Merge from mainline (163495:164578).
[official-gcc/graphite-test-results.git] / gcc / cp / semantics.c
blobb73dffb0560e04b198bd20ebbca3b19668a5daf0
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, 2003, 2004, 2005, 2006, 2007,
7 2008, 2009, 2010 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 3, 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 COPYING3. If not see
25 <http://www.gnu.org/licenses/>. */
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include "tree.h"
32 #include "cp-tree.h"
33 #include "c-family/c-common.h"
34 #include "tree-inline.h"
35 #include "tree-mudflap.h"
36 #include "toplev.h"
37 #include "flags.h"
38 #include "output.h"
39 #include "timevar.h"
40 #include "diagnostic.h"
41 #include "cgraph.h"
42 #include "tree-iterator.h"
43 #include "vec.h"
44 #include "target.h"
45 #include "gimple.h"
46 #include "bitmap.h"
48 /* There routines provide a modular interface to perform many parsing
49 operations. They may therefore be used during actual parsing, or
50 during template instantiation, which may be regarded as a
51 degenerate form of parsing. */
53 static tree maybe_convert_cond (tree);
54 static tree finalize_nrv_r (tree *, int *, void *);
55 static tree capture_decltype (tree);
56 static tree thisify_lambda_field (tree);
59 /* Deferred Access Checking Overview
60 ---------------------------------
62 Most C++ expressions and declarations require access checking
63 to be performed during parsing. However, in several cases,
64 this has to be treated differently.
66 For member declarations, access checking has to be deferred
67 until more information about the declaration is known. For
68 example:
70 class A {
71 typedef int X;
72 public:
73 X f();
76 A::X A::f();
77 A::X g();
79 When we are parsing the function return type `A::X', we don't
80 really know if this is allowed until we parse the function name.
82 Furthermore, some contexts require that access checking is
83 never performed at all. These include class heads, and template
84 instantiations.
86 Typical use of access checking functions is described here:
88 1. When we enter a context that requires certain access checking
89 mode, the function `push_deferring_access_checks' is called with
90 DEFERRING argument specifying the desired mode. Access checking
91 may be performed immediately (dk_no_deferred), deferred
92 (dk_deferred), or not performed (dk_no_check).
94 2. When a declaration such as a type, or a variable, is encountered,
95 the function `perform_or_defer_access_check' is called. It
96 maintains a VEC of all deferred checks.
98 3. The global `current_class_type' or `current_function_decl' is then
99 setup by the parser. `enforce_access' relies on these information
100 to check access.
102 4. Upon exiting the context mentioned in step 1,
103 `perform_deferred_access_checks' is called to check all declaration
104 stored in the VEC. `pop_deferring_access_checks' is then
105 called to restore the previous access checking mode.
107 In case of parsing error, we simply call `pop_deferring_access_checks'
108 without `perform_deferred_access_checks'. */
110 typedef struct GTY(()) deferred_access {
111 /* A VEC representing name-lookups for which we have deferred
112 checking access controls. We cannot check the accessibility of
113 names used in a decl-specifier-seq until we know what is being
114 declared because code like:
116 class A {
117 class B {};
118 B* f();
121 A::B* A::f() { return 0; }
123 is valid, even though `A::B' is not generally accessible. */
124 VEC (deferred_access_check,gc)* GTY(()) deferred_access_checks;
126 /* The current mode of access checks. */
127 enum deferring_kind deferring_access_checks_kind;
129 } deferred_access;
130 DEF_VEC_O (deferred_access);
131 DEF_VEC_ALLOC_O (deferred_access,gc);
133 /* Data for deferred access checking. */
134 static GTY(()) VEC(deferred_access,gc) *deferred_access_stack;
135 static GTY(()) unsigned deferred_access_no_check;
137 /* Save the current deferred access states and start deferred
138 access checking iff DEFER_P is true. */
140 void
141 push_deferring_access_checks (deferring_kind deferring)
143 /* For context like template instantiation, access checking
144 disabling applies to all nested context. */
145 if (deferred_access_no_check || deferring == dk_no_check)
146 deferred_access_no_check++;
147 else
149 deferred_access *ptr;
151 ptr = VEC_safe_push (deferred_access, gc, deferred_access_stack, NULL);
152 ptr->deferred_access_checks = NULL;
153 ptr->deferring_access_checks_kind = deferring;
157 /* Resume deferring access checks again after we stopped doing
158 this previously. */
160 void
161 resume_deferring_access_checks (void)
163 if (!deferred_access_no_check)
164 VEC_last (deferred_access, deferred_access_stack)
165 ->deferring_access_checks_kind = dk_deferred;
168 /* Stop deferring access checks. */
170 void
171 stop_deferring_access_checks (void)
173 if (!deferred_access_no_check)
174 VEC_last (deferred_access, deferred_access_stack)
175 ->deferring_access_checks_kind = dk_no_deferred;
178 /* Discard the current deferred access checks and restore the
179 previous states. */
181 void
182 pop_deferring_access_checks (void)
184 if (deferred_access_no_check)
185 deferred_access_no_check--;
186 else
187 VEC_pop (deferred_access, deferred_access_stack);
190 /* Returns a TREE_LIST representing the deferred checks.
191 The TREE_PURPOSE of each node is the type through which the
192 access occurred; the TREE_VALUE is the declaration named.
195 VEC (deferred_access_check,gc)*
196 get_deferred_access_checks (void)
198 if (deferred_access_no_check)
199 return NULL;
200 else
201 return (VEC_last (deferred_access, deferred_access_stack)
202 ->deferred_access_checks);
205 /* Take current deferred checks and combine with the
206 previous states if we also defer checks previously.
207 Otherwise perform checks now. */
209 void
210 pop_to_parent_deferring_access_checks (void)
212 if (deferred_access_no_check)
213 deferred_access_no_check--;
214 else
216 VEC (deferred_access_check,gc) *checks;
217 deferred_access *ptr;
219 checks = (VEC_last (deferred_access, deferred_access_stack)
220 ->deferred_access_checks);
222 VEC_pop (deferred_access, deferred_access_stack);
223 ptr = VEC_last (deferred_access, deferred_access_stack);
224 if (ptr->deferring_access_checks_kind == dk_no_deferred)
226 /* Check access. */
227 perform_access_checks (checks);
229 else
231 /* Merge with parent. */
232 int i, j;
233 deferred_access_check *chk, *probe;
235 FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
237 FOR_EACH_VEC_ELT (deferred_access_check,
238 ptr->deferred_access_checks, j, probe)
240 if (probe->binfo == chk->binfo &&
241 probe->decl == chk->decl &&
242 probe->diag_decl == chk->diag_decl)
243 goto found;
245 /* Insert into parent's checks. */
246 VEC_safe_push (deferred_access_check, gc,
247 ptr->deferred_access_checks, chk);
248 found:;
254 /* Perform the access checks in CHECKS. The TREE_PURPOSE of each node
255 is the BINFO indicating the qualifying scope used to access the
256 DECL node stored in the TREE_VALUE of the node. */
258 void
259 perform_access_checks (VEC (deferred_access_check,gc)* checks)
261 int i;
262 deferred_access_check *chk;
264 if (!checks)
265 return;
267 FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
268 enforce_access (chk->binfo, chk->decl, chk->diag_decl);
271 /* Perform the deferred access checks.
273 After performing the checks, we still have to keep the list
274 `deferred_access_stack->deferred_access_checks' since we may want
275 to check access for them again later in a different context.
276 For example:
278 class A {
279 typedef int X;
280 static X a;
282 A::X A::a, x; // No error for `A::a', error for `x'
284 We have to perform deferred access of `A::X', first with `A::a',
285 next with `x'. */
287 void
288 perform_deferred_access_checks (void)
290 perform_access_checks (get_deferred_access_checks ());
293 /* Defer checking the accessibility of DECL, when looked up in
294 BINFO. DIAG_DECL is the declaration to use to print diagnostics. */
296 void
297 perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl)
299 int i;
300 deferred_access *ptr;
301 deferred_access_check *chk;
302 deferred_access_check *new_access;
305 /* Exit if we are in a context that no access checking is performed.
307 if (deferred_access_no_check)
308 return;
310 gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
312 ptr = VEC_last (deferred_access, deferred_access_stack);
314 /* If we are not supposed to defer access checks, just check now. */
315 if (ptr->deferring_access_checks_kind == dk_no_deferred)
317 enforce_access (binfo, decl, diag_decl);
318 return;
321 /* See if we are already going to perform this check. */
322 FOR_EACH_VEC_ELT (deferred_access_check,
323 ptr->deferred_access_checks, i, chk)
325 if (chk->decl == decl && chk->binfo == binfo &&
326 chk->diag_decl == diag_decl)
328 return;
331 /* If not, record the check. */
332 new_access =
333 VEC_safe_push (deferred_access_check, gc,
334 ptr->deferred_access_checks, 0);
335 new_access->binfo = binfo;
336 new_access->decl = decl;
337 new_access->diag_decl = diag_decl;
340 /* Returns nonzero if the current statement is a full expression,
341 i.e. temporaries created during that statement should be destroyed
342 at the end of the statement. */
345 stmts_are_full_exprs_p (void)
347 return current_stmt_tree ()->stmts_are_full_exprs_p;
350 /* T is a statement. Add it to the statement-tree. This is the C++
351 version. The C/ObjC frontends have a slightly different version of
352 this function. */
354 tree
355 add_stmt (tree t)
357 enum tree_code code = TREE_CODE (t);
359 if (EXPR_P (t) && code != LABEL_EXPR)
361 if (!EXPR_HAS_LOCATION (t))
362 SET_EXPR_LOCATION (t, input_location);
364 /* When we expand a statement-tree, we must know whether or not the
365 statements are full-expressions. We record that fact here. */
366 STMT_IS_FULL_EXPR_P (t) = stmts_are_full_exprs_p ();
369 /* Add T to the statement-tree. Non-side-effect statements need to be
370 recorded during statement expressions. */
371 append_to_statement_list_force (t, &cur_stmt_list);
373 return t;
376 /* Returns the stmt_tree to which statements are currently being added. */
378 stmt_tree
379 current_stmt_tree (void)
381 return (cfun
382 ? &cfun->language->base.x_stmt_tree
383 : &scope_chain->x_stmt_tree);
386 /* If statements are full expressions, wrap STMT in a CLEANUP_POINT_EXPR. */
388 static tree
389 maybe_cleanup_point_expr (tree expr)
391 if (!processing_template_decl && stmts_are_full_exprs_p ())
392 expr = fold_build_cleanup_point_expr (TREE_TYPE (expr), expr);
393 return expr;
396 /* Like maybe_cleanup_point_expr except have the type of the new expression be
397 void so we don't need to create a temporary variable to hold the inner
398 expression. The reason why we do this is because the original type might be
399 an aggregate and we cannot create a temporary variable for that type. */
401 static tree
402 maybe_cleanup_point_expr_void (tree expr)
404 if (!processing_template_decl && stmts_are_full_exprs_p ())
405 expr = fold_build_cleanup_point_expr (void_type_node, expr);
406 return expr;
411 /* Create a declaration statement for the declaration given by the DECL. */
413 void
414 add_decl_expr (tree decl)
416 tree r = build_stmt (input_location, DECL_EXPR, decl);
417 if (DECL_INITIAL (decl)
418 || (DECL_SIZE (decl) && TREE_SIDE_EFFECTS (DECL_SIZE (decl))))
419 r = maybe_cleanup_point_expr_void (r);
420 add_stmt (r);
423 /* Finish a scope. */
425 tree
426 do_poplevel (tree stmt_list)
428 tree block = NULL;
430 if (stmts_are_full_exprs_p ())
431 block = poplevel (kept_level_p (), 1, 0);
433 stmt_list = pop_stmt_list (stmt_list);
435 if (!processing_template_decl)
437 stmt_list = c_build_bind_expr (input_location, block, stmt_list);
438 /* ??? See c_end_compound_stmt re statement expressions. */
441 return stmt_list;
444 /* Begin a new scope. */
446 static tree
447 do_pushlevel (scope_kind sk)
449 tree ret = push_stmt_list ();
450 if (stmts_are_full_exprs_p ())
451 begin_scope (sk, NULL);
452 return ret;
455 /* Queue a cleanup. CLEANUP is an expression/statement to be executed
456 when the current scope is exited. EH_ONLY is true when this is not
457 meant to apply to normal control flow transfer. */
459 void
460 push_cleanup (tree decl, tree cleanup, bool eh_only)
462 tree stmt = build_stmt (input_location, CLEANUP_STMT, NULL, cleanup, decl);
463 CLEANUP_EH_ONLY (stmt) = eh_only;
464 add_stmt (stmt);
465 CLEANUP_BODY (stmt) = push_stmt_list ();
468 /* Begin a conditional that might contain a declaration. When generating
469 normal code, we want the declaration to appear before the statement
470 containing the conditional. When generating template code, we want the
471 conditional to be rendered as the raw DECL_EXPR. */
473 static void
474 begin_cond (tree *cond_p)
476 if (processing_template_decl)
477 *cond_p = push_stmt_list ();
480 /* Finish such a conditional. */
482 static void
483 finish_cond (tree *cond_p, tree expr)
485 if (processing_template_decl)
487 tree cond = pop_stmt_list (*cond_p);
488 if (TREE_CODE (cond) == DECL_EXPR)
489 expr = cond;
491 if (check_for_bare_parameter_packs (expr))
492 *cond_p = error_mark_node;
494 *cond_p = expr;
497 /* If *COND_P specifies a conditional with a declaration, transform the
498 loop such that
499 while (A x = 42) { }
500 for (; A x = 42;) { }
501 becomes
502 while (true) { A x = 42; if (!x) break; }
503 for (;;) { A x = 42; if (!x) break; }
504 The statement list for BODY will be empty if the conditional did
505 not declare anything. */
507 static void
508 simplify_loop_decl_cond (tree *cond_p, tree body)
510 tree cond, if_stmt;
512 if (!TREE_SIDE_EFFECTS (body))
513 return;
515 cond = *cond_p;
516 *cond_p = boolean_true_node;
518 if_stmt = begin_if_stmt ();
519 cond = cp_build_unary_op (TRUTH_NOT_EXPR, cond, 0, tf_warning_or_error);
520 finish_if_stmt_cond (cond, if_stmt);
521 finish_break_stmt ();
522 finish_then_clause (if_stmt);
523 finish_if_stmt (if_stmt);
526 /* Finish a goto-statement. */
528 tree
529 finish_goto_stmt (tree destination)
531 if (TREE_CODE (destination) == IDENTIFIER_NODE)
532 destination = lookup_label (destination);
534 /* We warn about unused labels with -Wunused. That means we have to
535 mark the used labels as used. */
536 if (TREE_CODE (destination) == LABEL_DECL)
537 TREE_USED (destination) = 1;
538 else
540 if (!processing_template_decl)
542 destination = cp_convert (ptr_type_node, destination);
543 if (error_operand_p (destination))
544 return NULL_TREE;
546 /* We don't inline calls to functions with computed gotos.
547 Those functions are typically up to some funny business,
548 and may be depending on the labels being at particular
549 addresses, or some such. */
550 DECL_UNINLINABLE (current_function_decl) = 1;
553 check_goto (destination);
555 return add_stmt (build_stmt (input_location, GOTO_EXPR, destination));
558 /* COND is the condition-expression for an if, while, etc.,
559 statement. Convert it to a boolean value, if appropriate.
560 In addition, verify sequence points if -Wsequence-point is enabled. */
562 static tree
563 maybe_convert_cond (tree cond)
565 /* Empty conditions remain empty. */
566 if (!cond)
567 return NULL_TREE;
569 /* Wait until we instantiate templates before doing conversion. */
570 if (processing_template_decl)
571 return cond;
573 if (warn_sequence_point)
574 verify_sequence_points (cond);
576 /* Do the conversion. */
577 cond = convert_from_reference (cond);
579 if (TREE_CODE (cond) == MODIFY_EXPR
580 && !TREE_NO_WARNING (cond)
581 && warn_parentheses)
583 warning (OPT_Wparentheses,
584 "suggest parentheses around assignment used as truth value");
585 TREE_NO_WARNING (cond) = 1;
588 return condition_conversion (cond);
591 /* Finish an expression-statement, whose EXPRESSION is as indicated. */
593 tree
594 finish_expr_stmt (tree expr)
596 tree r = NULL_TREE;
598 if (expr != NULL_TREE)
600 if (!processing_template_decl)
602 if (warn_sequence_point)
603 verify_sequence_points (expr);
604 expr = convert_to_void (expr, ICV_STATEMENT, tf_warning_or_error);
606 else if (!type_dependent_expression_p (expr))
607 convert_to_void (build_non_dependent_expr (expr), ICV_STATEMENT,
608 tf_warning_or_error);
610 if (check_for_bare_parameter_packs (expr))
611 expr = error_mark_node;
613 /* Simplification of inner statement expressions, compound exprs,
614 etc can result in us already having an EXPR_STMT. */
615 if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
617 if (TREE_CODE (expr) != EXPR_STMT)
618 expr = build_stmt (input_location, EXPR_STMT, expr);
619 expr = maybe_cleanup_point_expr_void (expr);
622 r = add_stmt (expr);
625 finish_stmt ();
627 return r;
631 /* Begin an if-statement. Returns a newly created IF_STMT if
632 appropriate. */
634 tree
635 begin_if_stmt (void)
637 tree r, scope;
638 scope = do_pushlevel (sk_block);
639 r = build_stmt (input_location, IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
640 TREE_CHAIN (r) = scope;
641 begin_cond (&IF_COND (r));
642 return r;
645 /* Process the COND of an if-statement, which may be given by
646 IF_STMT. */
648 void
649 finish_if_stmt_cond (tree cond, tree if_stmt)
651 finish_cond (&IF_COND (if_stmt), maybe_convert_cond (cond));
652 add_stmt (if_stmt);
653 THEN_CLAUSE (if_stmt) = push_stmt_list ();
656 /* Finish the then-clause of an if-statement, which may be given by
657 IF_STMT. */
659 tree
660 finish_then_clause (tree if_stmt)
662 THEN_CLAUSE (if_stmt) = pop_stmt_list (THEN_CLAUSE (if_stmt));
663 return if_stmt;
666 /* Begin the else-clause of an if-statement. */
668 void
669 begin_else_clause (tree if_stmt)
671 ELSE_CLAUSE (if_stmt) = push_stmt_list ();
674 /* Finish the else-clause of an if-statement, which may be given by
675 IF_STMT. */
677 void
678 finish_else_clause (tree if_stmt)
680 ELSE_CLAUSE (if_stmt) = pop_stmt_list (ELSE_CLAUSE (if_stmt));
683 /* Finish an if-statement. */
685 void
686 finish_if_stmt (tree if_stmt)
688 tree scope = TREE_CHAIN (if_stmt);
689 TREE_CHAIN (if_stmt) = NULL;
690 add_stmt (do_poplevel (scope));
691 finish_stmt ();
694 /* Begin a while-statement. Returns a newly created WHILE_STMT if
695 appropriate. */
697 tree
698 begin_while_stmt (void)
700 tree r;
701 r = build_stmt (input_location, WHILE_STMT, NULL_TREE, NULL_TREE);
702 add_stmt (r);
703 WHILE_BODY (r) = do_pushlevel (sk_block);
704 begin_cond (&WHILE_COND (r));
705 return r;
708 /* Process the COND of a while-statement, which may be given by
709 WHILE_STMT. */
711 void
712 finish_while_stmt_cond (tree cond, tree while_stmt)
714 finish_cond (&WHILE_COND (while_stmt), maybe_convert_cond (cond));
715 simplify_loop_decl_cond (&WHILE_COND (while_stmt), WHILE_BODY (while_stmt));
718 /* Finish a while-statement, which may be given by WHILE_STMT. */
720 void
721 finish_while_stmt (tree while_stmt)
723 WHILE_BODY (while_stmt) = do_poplevel (WHILE_BODY (while_stmt));
724 finish_stmt ();
727 /* Begin a do-statement. Returns a newly created DO_STMT if
728 appropriate. */
730 tree
731 begin_do_stmt (void)
733 tree r = build_stmt (input_location, DO_STMT, NULL_TREE, NULL_TREE);
734 add_stmt (r);
735 DO_BODY (r) = push_stmt_list ();
736 return r;
739 /* Finish the body of a do-statement, which may be given by DO_STMT. */
741 void
742 finish_do_body (tree do_stmt)
744 tree body = DO_BODY (do_stmt) = pop_stmt_list (DO_BODY (do_stmt));
746 if (TREE_CODE (body) == STATEMENT_LIST && STATEMENT_LIST_TAIL (body))
747 body = STATEMENT_LIST_TAIL (body)->stmt;
749 if (IS_EMPTY_STMT (body))
750 warning (OPT_Wempty_body,
751 "suggest explicit braces around empty body in %<do%> statement");
754 /* Finish a do-statement, which may be given by DO_STMT, and whose
755 COND is as indicated. */
757 void
758 finish_do_stmt (tree cond, tree do_stmt)
760 cond = maybe_convert_cond (cond);
761 DO_COND (do_stmt) = cond;
762 finish_stmt ();
765 /* Finish a return-statement. The EXPRESSION returned, if any, is as
766 indicated. */
768 tree
769 finish_return_stmt (tree expr)
771 tree r;
772 bool no_warning;
774 expr = check_return_expr (expr, &no_warning);
776 if (flag_openmp && !check_omp_return ())
777 return error_mark_node;
778 if (!processing_template_decl)
780 if (warn_sequence_point)
781 verify_sequence_points (expr);
783 if (DECL_DESTRUCTOR_P (current_function_decl)
784 || (DECL_CONSTRUCTOR_P (current_function_decl)
785 && targetm.cxx.cdtor_returns_this ()))
787 /* Similarly, all destructors must run destructors for
788 base-classes before returning. So, all returns in a
789 destructor get sent to the DTOR_LABEL; finish_function emits
790 code to return a value there. */
791 return finish_goto_stmt (cdtor_label);
795 r = build_stmt (input_location, RETURN_EXPR, expr);
796 TREE_NO_WARNING (r) |= no_warning;
797 r = maybe_cleanup_point_expr_void (r);
798 r = add_stmt (r);
799 finish_stmt ();
801 return r;
804 /* Begin a for-statement. Returns a new FOR_STMT if appropriate. */
806 tree
807 begin_for_stmt (void)
809 tree r;
811 r = build_stmt (input_location, FOR_STMT, NULL_TREE, NULL_TREE,
812 NULL_TREE, NULL_TREE);
814 if (flag_new_for_scope > 0)
815 TREE_CHAIN (r) = do_pushlevel (sk_for);
817 if (processing_template_decl)
818 FOR_INIT_STMT (r) = push_stmt_list ();
820 return r;
823 /* Finish the for-init-statement of a for-statement, which may be
824 given by FOR_STMT. */
826 void
827 finish_for_init_stmt (tree for_stmt)
829 if (processing_template_decl)
830 FOR_INIT_STMT (for_stmt) = pop_stmt_list (FOR_INIT_STMT (for_stmt));
831 add_stmt (for_stmt);
832 FOR_BODY (for_stmt) = do_pushlevel (sk_block);
833 begin_cond (&FOR_COND (for_stmt));
836 /* Finish the COND of a for-statement, which may be given by
837 FOR_STMT. */
839 void
840 finish_for_cond (tree cond, tree for_stmt)
842 finish_cond (&FOR_COND (for_stmt), maybe_convert_cond (cond));
843 simplify_loop_decl_cond (&FOR_COND (for_stmt), FOR_BODY (for_stmt));
846 /* Finish the increment-EXPRESSION in a for-statement, which may be
847 given by FOR_STMT. */
849 void
850 finish_for_expr (tree expr, tree for_stmt)
852 if (!expr)
853 return;
854 /* If EXPR is an overloaded function, issue an error; there is no
855 context available to use to perform overload resolution. */
856 if (type_unknown_p (expr))
858 cxx_incomplete_type_error (expr, TREE_TYPE (expr));
859 expr = error_mark_node;
861 if (!processing_template_decl)
863 if (warn_sequence_point)
864 verify_sequence_points (expr);
865 expr = convert_to_void (expr, ICV_THIRD_IN_FOR,
866 tf_warning_or_error);
868 else if (!type_dependent_expression_p (expr))
869 convert_to_void (build_non_dependent_expr (expr), ICV_THIRD_IN_FOR,
870 tf_warning_or_error);
871 expr = maybe_cleanup_point_expr_void (expr);
872 if (check_for_bare_parameter_packs (expr))
873 expr = error_mark_node;
874 FOR_EXPR (for_stmt) = expr;
877 /* Finish the body of a for-statement, which may be given by
878 FOR_STMT. The increment-EXPR for the loop must be
879 provided.
880 It can also finish RANGE_FOR_STMT. */
882 void
883 finish_for_stmt (tree for_stmt)
885 if (TREE_CODE (for_stmt) == RANGE_FOR_STMT)
886 RANGE_FOR_BODY (for_stmt) = do_poplevel (RANGE_FOR_BODY (for_stmt));
887 else
888 FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt));
890 /* Pop the scope for the body of the loop. */
891 if (flag_new_for_scope > 0)
893 tree scope = TREE_CHAIN (for_stmt);
894 TREE_CHAIN (for_stmt) = NULL;
895 add_stmt (do_poplevel (scope));
898 finish_stmt ();
901 /* Begin a range-for-statement. Returns a new RANGE_FOR_STMT.
902 To finish it call finish_for_stmt(). */
904 tree
905 begin_range_for_stmt (void)
907 tree r;
909 r = build_stmt (input_location, RANGE_FOR_STMT,
910 NULL_TREE, NULL_TREE, NULL_TREE);
912 if (flag_new_for_scope > 0)
913 TREE_CHAIN (r) = do_pushlevel (sk_for);
915 return r;
918 /* Finish the head of a range-based for statement, which may
919 be given by RANGE_FOR_STMT. DECL must be the declaration
920 and EXPR must be the loop expression. */
922 void
923 finish_range_for_decl (tree range_for_stmt, tree decl, tree expr)
925 RANGE_FOR_DECL (range_for_stmt) = decl;
926 RANGE_FOR_EXPR (range_for_stmt) = expr;
927 add_stmt (range_for_stmt);
928 RANGE_FOR_BODY (range_for_stmt) = do_pushlevel (sk_block);
931 /* Finish a break-statement. */
933 tree
934 finish_break_stmt (void)
936 return add_stmt (build_stmt (input_location, BREAK_STMT));
939 /* Finish a continue-statement. */
941 tree
942 finish_continue_stmt (void)
944 return add_stmt (build_stmt (input_location, CONTINUE_STMT));
947 /* Begin a switch-statement. Returns a new SWITCH_STMT if
948 appropriate. */
950 tree
951 begin_switch_stmt (void)
953 tree r, scope;
955 r = build_stmt (input_location, SWITCH_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
957 scope = do_pushlevel (sk_block);
958 TREE_CHAIN (r) = scope;
959 begin_cond (&SWITCH_STMT_COND (r));
961 return r;
964 /* Finish the cond of a switch-statement. */
966 void
967 finish_switch_cond (tree cond, tree switch_stmt)
969 tree orig_type = NULL;
970 if (!processing_template_decl)
972 /* Convert the condition to an integer or enumeration type. */
973 cond = build_expr_type_conversion (WANT_INT | WANT_ENUM, cond, true);
974 if (cond == NULL_TREE)
976 error ("switch quantity not an integer");
977 cond = error_mark_node;
979 orig_type = TREE_TYPE (cond);
980 if (cond != error_mark_node)
982 /* [stmt.switch]
984 Integral promotions are performed. */
985 cond = perform_integral_promotions (cond);
986 cond = maybe_cleanup_point_expr (cond);
989 if (check_for_bare_parameter_packs (cond))
990 cond = error_mark_node;
991 else if (!processing_template_decl && warn_sequence_point)
992 verify_sequence_points (cond);
994 finish_cond (&SWITCH_STMT_COND (switch_stmt), cond);
995 SWITCH_STMT_TYPE (switch_stmt) = orig_type;
996 add_stmt (switch_stmt);
997 push_switch (switch_stmt);
998 SWITCH_STMT_BODY (switch_stmt) = push_stmt_list ();
1001 /* Finish the body of a switch-statement, which may be given by
1002 SWITCH_STMT. The COND to switch on is indicated. */
1004 void
1005 finish_switch_stmt (tree switch_stmt)
1007 tree scope;
1009 SWITCH_STMT_BODY (switch_stmt) =
1010 pop_stmt_list (SWITCH_STMT_BODY (switch_stmt));
1011 pop_switch ();
1012 finish_stmt ();
1014 scope = TREE_CHAIN (switch_stmt);
1015 TREE_CHAIN (switch_stmt) = NULL;
1016 add_stmt (do_poplevel (scope));
1019 /* Begin a try-block. Returns a newly-created TRY_BLOCK if
1020 appropriate. */
1022 tree
1023 begin_try_block (void)
1025 tree r = build_stmt (input_location, TRY_BLOCK, NULL_TREE, NULL_TREE);
1026 add_stmt (r);
1027 TRY_STMTS (r) = push_stmt_list ();
1028 return r;
1031 /* Likewise, for a function-try-block. The block returned in
1032 *COMPOUND_STMT is an artificial outer scope, containing the
1033 function-try-block. */
1035 tree
1036 begin_function_try_block (tree *compound_stmt)
1038 tree r;
1039 /* This outer scope does not exist in the C++ standard, but we need
1040 a place to put __FUNCTION__ and similar variables. */
1041 *compound_stmt = begin_compound_stmt (0);
1042 r = begin_try_block ();
1043 FN_TRY_BLOCK_P (r) = 1;
1044 return r;
1047 /* Finish a try-block, which may be given by TRY_BLOCK. */
1049 void
1050 finish_try_block (tree try_block)
1052 TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1053 TRY_HANDLERS (try_block) = push_stmt_list ();
1056 /* Finish the body of a cleanup try-block, which may be given by
1057 TRY_BLOCK. */
1059 void
1060 finish_cleanup_try_block (tree try_block)
1062 TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1065 /* Finish an implicitly generated try-block, with a cleanup is given
1066 by CLEANUP. */
1068 void
1069 finish_cleanup (tree cleanup, tree try_block)
1071 TRY_HANDLERS (try_block) = cleanup;
1072 CLEANUP_P (try_block) = 1;
1075 /* Likewise, for a function-try-block. */
1077 void
1078 finish_function_try_block (tree try_block)
1080 finish_try_block (try_block);
1081 /* FIXME : something queer about CTOR_INITIALIZER somehow following
1082 the try block, but moving it inside. */
1083 in_function_try_handler = 1;
1086 /* Finish a handler-sequence for a try-block, which may be given by
1087 TRY_BLOCK. */
1089 void
1090 finish_handler_sequence (tree try_block)
1092 TRY_HANDLERS (try_block) = pop_stmt_list (TRY_HANDLERS (try_block));
1093 check_handlers (TRY_HANDLERS (try_block));
1096 /* Finish the handler-seq for a function-try-block, given by
1097 TRY_BLOCK. COMPOUND_STMT is the outer block created by
1098 begin_function_try_block. */
1100 void
1101 finish_function_handler_sequence (tree try_block, tree compound_stmt)
1103 in_function_try_handler = 0;
1104 finish_handler_sequence (try_block);
1105 finish_compound_stmt (compound_stmt);
1108 /* Begin a handler. Returns a HANDLER if appropriate. */
1110 tree
1111 begin_handler (void)
1113 tree r;
1115 r = build_stmt (input_location, HANDLER, NULL_TREE, NULL_TREE);
1116 add_stmt (r);
1118 /* Create a binding level for the eh_info and the exception object
1119 cleanup. */
1120 HANDLER_BODY (r) = do_pushlevel (sk_catch);
1122 return r;
1125 /* Finish the handler-parameters for a handler, which may be given by
1126 HANDLER. DECL is the declaration for the catch parameter, or NULL
1127 if this is a `catch (...)' clause. */
1129 void
1130 finish_handler_parms (tree decl, tree handler)
1132 tree type = NULL_TREE;
1133 if (processing_template_decl)
1135 if (decl)
1137 decl = pushdecl (decl);
1138 decl = push_template_decl (decl);
1139 HANDLER_PARMS (handler) = decl;
1140 type = TREE_TYPE (decl);
1143 else
1144 type = expand_start_catch_block (decl);
1145 HANDLER_TYPE (handler) = type;
1146 if (!processing_template_decl && type)
1147 mark_used (eh_type_info (type));
1150 /* Finish a handler, which may be given by HANDLER. The BLOCKs are
1151 the return value from the matching call to finish_handler_parms. */
1153 void
1154 finish_handler (tree handler)
1156 if (!processing_template_decl)
1157 expand_end_catch_block ();
1158 HANDLER_BODY (handler) = do_poplevel (HANDLER_BODY (handler));
1161 /* Begin a compound statement. FLAGS contains some bits that control the
1162 behavior and context. If BCS_NO_SCOPE is set, the compound statement
1163 does not define a scope. If BCS_FN_BODY is set, this is the outermost
1164 block of a function. If BCS_TRY_BLOCK is set, this is the block
1165 created on behalf of a TRY statement. Returns a token to be passed to
1166 finish_compound_stmt. */
1168 tree
1169 begin_compound_stmt (unsigned int flags)
1171 tree r;
1173 if (flags & BCS_NO_SCOPE)
1175 r = push_stmt_list ();
1176 STATEMENT_LIST_NO_SCOPE (r) = 1;
1178 /* Normally, we try hard to keep the BLOCK for a statement-expression.
1179 But, if it's a statement-expression with a scopeless block, there's
1180 nothing to keep, and we don't want to accidentally keep a block
1181 *inside* the scopeless block. */
1182 keep_next_level (false);
1184 else
1185 r = do_pushlevel (flags & BCS_TRY_BLOCK ? sk_try : sk_block);
1187 /* When processing a template, we need to remember where the braces were,
1188 so that we can set up identical scopes when instantiating the template
1189 later. BIND_EXPR is a handy candidate for this.
1190 Note that do_poplevel won't create a BIND_EXPR itself here (and thus
1191 result in nested BIND_EXPRs), since we don't build BLOCK nodes when
1192 processing templates. */
1193 if (processing_template_decl)
1195 r = build3 (BIND_EXPR, NULL, NULL, r, NULL);
1196 BIND_EXPR_TRY_BLOCK (r) = (flags & BCS_TRY_BLOCK) != 0;
1197 BIND_EXPR_BODY_BLOCK (r) = (flags & BCS_FN_BODY) != 0;
1198 TREE_SIDE_EFFECTS (r) = 1;
1201 return r;
1204 /* Finish a compound-statement, which is given by STMT. */
1206 void
1207 finish_compound_stmt (tree stmt)
1209 if (TREE_CODE (stmt) == BIND_EXPR)
1210 BIND_EXPR_BODY (stmt) = do_poplevel (BIND_EXPR_BODY (stmt));
1211 else if (STATEMENT_LIST_NO_SCOPE (stmt))
1212 stmt = pop_stmt_list (stmt);
1213 else
1215 /* Destroy any ObjC "super" receivers that may have been
1216 created. */
1217 objc_clear_super_receiver ();
1219 stmt = do_poplevel (stmt);
1222 /* ??? See c_end_compound_stmt wrt statement expressions. */
1223 add_stmt (stmt);
1224 finish_stmt ();
1227 /* Finish an asm-statement, whose components are a STRING, some
1228 OUTPUT_OPERANDS, some INPUT_OPERANDS, some CLOBBERS and some
1229 LABELS. Also note whether the asm-statement should be
1230 considered volatile. */
1232 tree
1233 finish_asm_stmt (int volatile_p, tree string, tree output_operands,
1234 tree input_operands, tree clobbers, tree labels)
1236 tree r;
1237 tree t;
1238 int ninputs = list_length (input_operands);
1239 int noutputs = list_length (output_operands);
1241 if (!processing_template_decl)
1243 const char *constraint;
1244 const char **oconstraints;
1245 bool allows_mem, allows_reg, is_inout;
1246 tree operand;
1247 int i;
1249 oconstraints = XALLOCAVEC (const char *, noutputs);
1251 string = resolve_asm_operand_names (string, output_operands,
1252 input_operands, labels);
1254 for (i = 0, t = output_operands; t; t = TREE_CHAIN (t), ++i)
1256 operand = TREE_VALUE (t);
1258 /* ??? Really, this should not be here. Users should be using a
1259 proper lvalue, dammit. But there's a long history of using
1260 casts in the output operands. In cases like longlong.h, this
1261 becomes a primitive form of typechecking -- if the cast can be
1262 removed, then the output operand had a type of the proper width;
1263 otherwise we'll get an error. Gross, but ... */
1264 STRIP_NOPS (operand);
1266 operand = mark_lvalue_use (operand);
1268 if (!lvalue_or_else (operand, lv_asm, tf_warning_or_error))
1269 operand = error_mark_node;
1271 if (operand != error_mark_node
1272 && (TREE_READONLY (operand)
1273 || CP_TYPE_CONST_P (TREE_TYPE (operand))
1274 /* Functions are not modifiable, even though they are
1275 lvalues. */
1276 || TREE_CODE (TREE_TYPE (operand)) == FUNCTION_TYPE
1277 || TREE_CODE (TREE_TYPE (operand)) == METHOD_TYPE
1278 /* If it's an aggregate and any field is const, then it is
1279 effectively const. */
1280 || (CLASS_TYPE_P (TREE_TYPE (operand))
1281 && C_TYPE_FIELDS_READONLY (TREE_TYPE (operand)))))
1282 readonly_error (operand, REK_ASSIGNMENT_ASM);
1284 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1285 oconstraints[i] = constraint;
1287 if (parse_output_constraint (&constraint, i, ninputs, noutputs,
1288 &allows_mem, &allows_reg, &is_inout))
1290 /* If the operand is going to end up in memory,
1291 mark it addressable. */
1292 if (!allows_reg && !cxx_mark_addressable (operand))
1293 operand = error_mark_node;
1295 else
1296 operand = error_mark_node;
1298 TREE_VALUE (t) = operand;
1301 for (i = 0, t = input_operands; t; ++i, t = TREE_CHAIN (t))
1303 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1304 operand = decay_conversion (TREE_VALUE (t));
1306 /* If the type of the operand hasn't been determined (e.g.,
1307 because it involves an overloaded function), then issue
1308 an error message. There's no context available to
1309 resolve the overloading. */
1310 if (TREE_TYPE (operand) == unknown_type_node)
1312 error ("type of asm operand %qE could not be determined",
1313 TREE_VALUE (t));
1314 operand = error_mark_node;
1317 if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
1318 oconstraints, &allows_mem, &allows_reg))
1320 /* If the operand is going to end up in memory,
1321 mark it addressable. */
1322 if (!allows_reg && allows_mem)
1324 /* Strip the nops as we allow this case. FIXME, this really
1325 should be rejected or made deprecated. */
1326 STRIP_NOPS (operand);
1327 if (!cxx_mark_addressable (operand))
1328 operand = error_mark_node;
1331 else
1332 operand = error_mark_node;
1334 TREE_VALUE (t) = operand;
1338 r = build_stmt (input_location, ASM_EXPR, string,
1339 output_operands, input_operands,
1340 clobbers, labels);
1341 ASM_VOLATILE_P (r) = volatile_p || noutputs == 0;
1342 r = maybe_cleanup_point_expr_void (r);
1343 return add_stmt (r);
1346 /* Finish a label with the indicated NAME. Returns the new label. */
1348 tree
1349 finish_label_stmt (tree name)
1351 tree decl = define_label (input_location, name);
1353 if (decl == error_mark_node)
1354 return error_mark_node;
1356 add_stmt (build_stmt (input_location, LABEL_EXPR, decl));
1358 return decl;
1361 /* Finish a series of declarations for local labels. G++ allows users
1362 to declare "local" labels, i.e., labels with scope. This extension
1363 is useful when writing code involving statement-expressions. */
1365 void
1366 finish_label_decl (tree name)
1368 if (!at_function_scope_p ())
1370 error ("__label__ declarations are only allowed in function scopes");
1371 return;
1374 add_decl_expr (declare_local_label (name));
1377 /* When DECL goes out of scope, make sure that CLEANUP is executed. */
1379 void
1380 finish_decl_cleanup (tree decl, tree cleanup)
1382 push_cleanup (decl, cleanup, false);
1385 /* If the current scope exits with an exception, run CLEANUP. */
1387 void
1388 finish_eh_cleanup (tree cleanup)
1390 push_cleanup (NULL, cleanup, true);
1393 /* The MEM_INITS is a list of mem-initializers, in reverse of the
1394 order they were written by the user. Each node is as for
1395 emit_mem_initializers. */
1397 void
1398 finish_mem_initializers (tree mem_inits)
1400 /* Reorder the MEM_INITS so that they are in the order they appeared
1401 in the source program. */
1402 mem_inits = nreverse (mem_inits);
1404 if (processing_template_decl)
1406 tree mem;
1408 for (mem = mem_inits; mem; mem = TREE_CHAIN (mem))
1410 /* If the TREE_PURPOSE is a TYPE_PACK_EXPANSION, skip the
1411 check for bare parameter packs in the TREE_VALUE, because
1412 any parameter packs in the TREE_VALUE have already been
1413 bound as part of the TREE_PURPOSE. See
1414 make_pack_expansion for more information. */
1415 if (TREE_CODE (TREE_PURPOSE (mem)) != TYPE_PACK_EXPANSION
1416 && check_for_bare_parameter_packs (TREE_VALUE (mem)))
1417 TREE_VALUE (mem) = error_mark_node;
1420 add_stmt (build_min_nt (CTOR_INITIALIZER, mem_inits));
1422 else
1423 emit_mem_initializers (mem_inits);
1426 /* Finish a parenthesized expression EXPR. */
1428 tree
1429 finish_parenthesized_expr (tree expr)
1431 if (EXPR_P (expr))
1432 /* This inhibits warnings in c_common_truthvalue_conversion. */
1433 TREE_NO_WARNING (expr) = 1;
1435 if (TREE_CODE (expr) == OFFSET_REF)
1436 /* [expr.unary.op]/3 The qualified id of a pointer-to-member must not be
1437 enclosed in parentheses. */
1438 PTRMEM_OK_P (expr) = 0;
1440 if (TREE_CODE (expr) == STRING_CST)
1441 PAREN_STRING_LITERAL_P (expr) = 1;
1443 return expr;
1446 /* Finish a reference to a non-static data member (DECL) that is not
1447 preceded by `.' or `->'. */
1449 tree
1450 finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
1452 gcc_assert (TREE_CODE (decl) == FIELD_DECL);
1454 if (!object)
1456 tree scope = qualifying_scope;
1457 if (scope == NULL_TREE)
1458 scope = context_for_name_lookup (decl);
1459 object = maybe_dummy_object (scope, NULL);
1462 /* DR 613: Can use non-static data members without an associated
1463 object in sizeof/decltype/alignof. */
1464 if (is_dummy_object (object) && cp_unevaluated_operand == 0
1465 && (!processing_template_decl || !current_class_ref))
1467 if (current_function_decl
1468 && DECL_STATIC_FUNCTION_P (current_function_decl))
1469 error ("invalid use of member %q+D in static member function", decl);
1470 else
1471 error ("invalid use of non-static data member %q+D", decl);
1472 error ("from this location");
1474 return error_mark_node;
1477 if (current_class_ptr)
1478 TREE_USED (current_class_ptr) = 1;
1479 if (processing_template_decl && !qualifying_scope)
1481 tree type = TREE_TYPE (decl);
1483 if (TREE_CODE (type) == REFERENCE_TYPE)
1484 type = TREE_TYPE (type);
1485 else
1487 /* Set the cv qualifiers. */
1488 int quals = (current_class_ref
1489 ? cp_type_quals (TREE_TYPE (current_class_ref))
1490 : TYPE_UNQUALIFIED);
1492 if (DECL_MUTABLE_P (decl))
1493 quals &= ~TYPE_QUAL_CONST;
1495 quals |= cp_type_quals (TREE_TYPE (decl));
1496 type = cp_build_qualified_type (type, quals);
1499 return build_min (COMPONENT_REF, type, object, decl, NULL_TREE);
1501 /* If PROCESSING_TEMPLATE_DECL is nonzero here, then
1502 QUALIFYING_SCOPE is also non-null. Wrap this in a SCOPE_REF
1503 for now. */
1504 else if (processing_template_decl)
1505 return build_qualified_name (TREE_TYPE (decl),
1506 qualifying_scope,
1507 DECL_NAME (decl),
1508 /*template_p=*/false);
1509 else
1511 tree access_type = TREE_TYPE (object);
1513 perform_or_defer_access_check (TYPE_BINFO (access_type), decl,
1514 decl);
1516 /* If the data member was named `C::M', convert `*this' to `C'
1517 first. */
1518 if (qualifying_scope)
1520 tree binfo = NULL_TREE;
1521 object = build_scoped_ref (object, qualifying_scope,
1522 &binfo);
1525 return build_class_member_access_expr (object, decl,
1526 /*access_path=*/NULL_TREE,
1527 /*preserve_reference=*/false,
1528 tf_warning_or_error);
1532 /* If we are currently parsing a template and we encountered a typedef
1533 TYPEDEF_DECL that is being accessed though CONTEXT, this function
1534 adds the typedef to a list tied to the current template.
1535 At tempate instantiatin time, that list is walked and access check
1536 performed for each typedef.
1537 LOCATION is the location of the usage point of TYPEDEF_DECL. */
1539 void
1540 add_typedef_to_current_template_for_access_check (tree typedef_decl,
1541 tree context,
1542 location_t location)
1544 tree template_info = NULL;
1545 tree cs = current_scope ();
1547 if (!is_typedef_decl (typedef_decl)
1548 || !context
1549 || !CLASS_TYPE_P (context)
1550 || !cs)
1551 return;
1553 if (CLASS_TYPE_P (cs) || TREE_CODE (cs) == FUNCTION_DECL)
1554 template_info = get_template_info (cs);
1556 if (template_info
1557 && TI_TEMPLATE (template_info)
1558 && !currently_open_class (context))
1559 append_type_to_template_for_access_check (cs, typedef_decl,
1560 context, location);
1563 /* DECL was the declaration to which a qualified-id resolved. Issue
1564 an error message if it is not accessible. If OBJECT_TYPE is
1565 non-NULL, we have just seen `x->' or `x.' and OBJECT_TYPE is the
1566 type of `*x', or `x', respectively. If the DECL was named as
1567 `A::B' then NESTED_NAME_SPECIFIER is `A'. */
1569 void
1570 check_accessibility_of_qualified_id (tree decl,
1571 tree object_type,
1572 tree nested_name_specifier)
1574 tree scope;
1575 tree qualifying_type = NULL_TREE;
1577 /* If we are parsing a template declaration and if decl is a typedef,
1578 add it to a list tied to the template.
1579 At template instantiation time, that list will be walked and
1580 access check performed. */
1581 add_typedef_to_current_template_for_access_check (decl,
1582 nested_name_specifier
1583 ? nested_name_specifier
1584 : DECL_CONTEXT (decl),
1585 input_location);
1587 /* If we're not checking, return immediately. */
1588 if (deferred_access_no_check)
1589 return;
1591 /* Determine the SCOPE of DECL. */
1592 scope = context_for_name_lookup (decl);
1593 /* If the SCOPE is not a type, then DECL is not a member. */
1594 if (!TYPE_P (scope))
1595 return;
1596 /* Compute the scope through which DECL is being accessed. */
1597 if (object_type
1598 /* OBJECT_TYPE might not be a class type; consider:
1600 class A { typedef int I; };
1601 I *p;
1602 p->A::I::~I();
1604 In this case, we will have "A::I" as the DECL, but "I" as the
1605 OBJECT_TYPE. */
1606 && CLASS_TYPE_P (object_type)
1607 && DERIVED_FROM_P (scope, object_type))
1608 /* If we are processing a `->' or `.' expression, use the type of the
1609 left-hand side. */
1610 qualifying_type = object_type;
1611 else if (nested_name_specifier)
1613 /* If the reference is to a non-static member of the
1614 current class, treat it as if it were referenced through
1615 `this'. */
1616 if (DECL_NONSTATIC_MEMBER_P (decl)
1617 && current_class_ptr
1618 && DERIVED_FROM_P (scope, current_class_type))
1619 qualifying_type = current_class_type;
1620 /* Otherwise, use the type indicated by the
1621 nested-name-specifier. */
1622 else
1623 qualifying_type = nested_name_specifier;
1625 else
1626 /* Otherwise, the name must be from the current class or one of
1627 its bases. */
1628 qualifying_type = currently_open_derived_class (scope);
1630 if (qualifying_type
1631 /* It is possible for qualifying type to be a TEMPLATE_TYPE_PARM
1632 or similar in a default argument value. */
1633 && CLASS_TYPE_P (qualifying_type)
1634 && !dependent_type_p (qualifying_type))
1635 perform_or_defer_access_check (TYPE_BINFO (qualifying_type), decl,
1636 decl);
1639 /* EXPR is the result of a qualified-id. The QUALIFYING_CLASS was the
1640 class named to the left of the "::" operator. DONE is true if this
1641 expression is a complete postfix-expression; it is false if this
1642 expression is followed by '->', '[', '(', etc. ADDRESS_P is true
1643 iff this expression is the operand of '&'. TEMPLATE_P is true iff
1644 the qualified-id was of the form "A::template B". TEMPLATE_ARG_P
1645 is true iff this qualified name appears as a template argument. */
1647 tree
1648 finish_qualified_id_expr (tree qualifying_class,
1649 tree expr,
1650 bool done,
1651 bool address_p,
1652 bool template_p,
1653 bool template_arg_p)
1655 gcc_assert (TYPE_P (qualifying_class));
1657 if (error_operand_p (expr))
1658 return error_mark_node;
1660 if (DECL_P (expr) || BASELINK_P (expr))
1661 mark_used (expr);
1663 if (template_p)
1664 check_template_keyword (expr);
1666 /* If EXPR occurs as the operand of '&', use special handling that
1667 permits a pointer-to-member. */
1668 if (address_p && done)
1670 if (TREE_CODE (expr) == SCOPE_REF)
1671 expr = TREE_OPERAND (expr, 1);
1672 expr = build_offset_ref (qualifying_class, expr,
1673 /*address_p=*/true);
1674 return expr;
1677 /* Within the scope of a class, turn references to non-static
1678 members into expression of the form "this->...". */
1679 if (template_arg_p)
1680 /* But, within a template argument, we do not want make the
1681 transformation, as there is no "this" pointer. */
1683 else if (TREE_CODE (expr) == FIELD_DECL)
1685 push_deferring_access_checks (dk_no_check);
1686 expr = finish_non_static_data_member (expr, NULL_TREE,
1687 qualifying_class);
1688 pop_deferring_access_checks ();
1690 else if (BASELINK_P (expr) && !processing_template_decl)
1692 tree ob;
1694 /* See if any of the functions are non-static members. */
1695 /* If so, the expression may be relative to 'this'. */
1696 if (!shared_member_p (expr)
1697 && (ob = maybe_dummy_object (qualifying_class, NULL),
1698 !is_dummy_object (ob)))
1699 expr = (build_class_member_access_expr
1700 (ob,
1701 expr,
1702 BASELINK_ACCESS_BINFO (expr),
1703 /*preserve_reference=*/false,
1704 tf_warning_or_error));
1705 else if (done)
1706 /* The expression is a qualified name whose address is not
1707 being taken. */
1708 expr = build_offset_ref (qualifying_class, expr, /*address_p=*/false);
1711 return expr;
1714 /* Begin a statement-expression. The value returned must be passed to
1715 finish_stmt_expr. */
1717 tree
1718 begin_stmt_expr (void)
1720 return push_stmt_list ();
1723 /* Process the final expression of a statement expression. EXPR can be
1724 NULL, if the final expression is empty. Return a STATEMENT_LIST
1725 containing all the statements in the statement-expression, or
1726 ERROR_MARK_NODE if there was an error. */
1728 tree
1729 finish_stmt_expr_expr (tree expr, tree stmt_expr)
1731 if (error_operand_p (expr))
1733 /* The type of the statement-expression is the type of the last
1734 expression. */
1735 TREE_TYPE (stmt_expr) = error_mark_node;
1736 return error_mark_node;
1739 /* If the last statement does not have "void" type, then the value
1740 of the last statement is the value of the entire expression. */
1741 if (expr)
1743 tree type = TREE_TYPE (expr);
1745 if (processing_template_decl)
1747 expr = build_stmt (input_location, EXPR_STMT, expr);
1748 expr = add_stmt (expr);
1749 /* Mark the last statement so that we can recognize it as such at
1750 template-instantiation time. */
1751 EXPR_STMT_STMT_EXPR_RESULT (expr) = 1;
1753 else if (VOID_TYPE_P (type))
1755 /* Just treat this like an ordinary statement. */
1756 expr = finish_expr_stmt (expr);
1758 else
1760 /* It actually has a value we need to deal with. First, force it
1761 to be an rvalue so that we won't need to build up a copy
1762 constructor call later when we try to assign it to something. */
1763 expr = force_rvalue (expr);
1764 if (error_operand_p (expr))
1765 return error_mark_node;
1767 /* Update for array-to-pointer decay. */
1768 type = TREE_TYPE (expr);
1770 /* Wrap it in a CLEANUP_POINT_EXPR and add it to the list like a
1771 normal statement, but don't convert to void or actually add
1772 the EXPR_STMT. */
1773 if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
1774 expr = maybe_cleanup_point_expr (expr);
1775 add_stmt (expr);
1778 /* The type of the statement-expression is the type of the last
1779 expression. */
1780 TREE_TYPE (stmt_expr) = type;
1783 return stmt_expr;
1786 /* Finish a statement-expression. EXPR should be the value returned
1787 by the previous begin_stmt_expr. Returns an expression
1788 representing the statement-expression. */
1790 tree
1791 finish_stmt_expr (tree stmt_expr, bool has_no_scope)
1793 tree type;
1794 tree result;
1796 if (error_operand_p (stmt_expr))
1798 pop_stmt_list (stmt_expr);
1799 return error_mark_node;
1802 gcc_assert (TREE_CODE (stmt_expr) == STATEMENT_LIST);
1804 type = TREE_TYPE (stmt_expr);
1805 result = pop_stmt_list (stmt_expr);
1806 TREE_TYPE (result) = type;
1808 if (processing_template_decl)
1810 result = build_min (STMT_EXPR, type, result);
1811 TREE_SIDE_EFFECTS (result) = 1;
1812 STMT_EXPR_NO_SCOPE (result) = has_no_scope;
1814 else if (CLASS_TYPE_P (type))
1816 /* Wrap the statement-expression in a TARGET_EXPR so that the
1817 temporary object created by the final expression is destroyed at
1818 the end of the full-expression containing the
1819 statement-expression. */
1820 result = force_target_expr (type, result);
1823 return result;
1826 /* Returns the expression which provides the value of STMT_EXPR. */
1828 tree
1829 stmt_expr_value_expr (tree stmt_expr)
1831 tree t = STMT_EXPR_STMT (stmt_expr);
1833 if (TREE_CODE (t) == BIND_EXPR)
1834 t = BIND_EXPR_BODY (t);
1836 if (TREE_CODE (t) == STATEMENT_LIST && STATEMENT_LIST_TAIL (t))
1837 t = STATEMENT_LIST_TAIL (t)->stmt;
1839 if (TREE_CODE (t) == EXPR_STMT)
1840 t = EXPR_STMT_EXPR (t);
1842 return t;
1845 /* Return TRUE iff EXPR_STMT is an empty list of
1846 expression statements. */
1848 bool
1849 empty_expr_stmt_p (tree expr_stmt)
1851 tree body = NULL_TREE;
1853 if (expr_stmt == void_zero_node)
1854 return true;
1856 if (expr_stmt)
1858 if (TREE_CODE (expr_stmt) == EXPR_STMT)
1859 body = EXPR_STMT_EXPR (expr_stmt);
1860 else if (TREE_CODE (expr_stmt) == STATEMENT_LIST)
1861 body = expr_stmt;
1864 if (body)
1866 if (TREE_CODE (body) == STATEMENT_LIST)
1867 return tsi_end_p (tsi_start (body));
1868 else
1869 return empty_expr_stmt_p (body);
1871 return false;
1874 /* Perform Koenig lookup. FN is the postfix-expression representing
1875 the function (or functions) to call; ARGS are the arguments to the
1876 call; if INCLUDE_STD then the `std' namespace is automatically
1877 considered an associated namespace (used in range-based for loops).
1878 Returns the functions to be considered by overload resolution. */
1880 tree
1881 perform_koenig_lookup (tree fn, VEC(tree,gc) *args, bool include_std)
1883 tree identifier = NULL_TREE;
1884 tree functions = NULL_TREE;
1885 tree tmpl_args = NULL_TREE;
1886 bool template_id = false;
1888 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
1890 /* Use a separate flag to handle null args. */
1891 template_id = true;
1892 tmpl_args = TREE_OPERAND (fn, 1);
1893 fn = TREE_OPERAND (fn, 0);
1896 /* Find the name of the overloaded function. */
1897 if (TREE_CODE (fn) == IDENTIFIER_NODE)
1898 identifier = fn;
1899 else if (is_overloaded_fn (fn))
1901 functions = fn;
1902 identifier = DECL_NAME (get_first_fn (functions));
1904 else if (DECL_P (fn))
1906 functions = fn;
1907 identifier = DECL_NAME (fn);
1910 /* A call to a namespace-scope function using an unqualified name.
1912 Do Koenig lookup -- unless any of the arguments are
1913 type-dependent. */
1914 if (!any_type_dependent_arguments_p (args)
1915 && !any_dependent_template_arguments_p (tmpl_args))
1917 fn = lookup_arg_dependent (identifier, functions, args, include_std);
1918 if (!fn)
1919 /* The unqualified name could not be resolved. */
1920 fn = unqualified_fn_lookup_error (identifier);
1923 if (fn && template_id)
1924 fn = build2 (TEMPLATE_ID_EXPR, unknown_type_node, fn, tmpl_args);
1926 return fn;
1929 /* Generate an expression for `FN (ARGS)'. This may change the
1930 contents of ARGS.
1932 If DISALLOW_VIRTUAL is true, the call to FN will be not generated
1933 as a virtual call, even if FN is virtual. (This flag is set when
1934 encountering an expression where the function name is explicitly
1935 qualified. For example a call to `X::f' never generates a virtual
1936 call.)
1938 Returns code for the call. */
1940 tree
1941 finish_call_expr (tree fn, VEC(tree,gc) **args, bool disallow_virtual,
1942 bool koenig_p, tsubst_flags_t complain)
1944 tree result;
1945 tree orig_fn;
1946 VEC(tree,gc) *orig_args = NULL;
1948 if (fn == error_mark_node)
1949 return error_mark_node;
1951 gcc_assert (!TYPE_P (fn));
1953 orig_fn = fn;
1955 if (processing_template_decl)
1957 if (type_dependent_expression_p (fn)
1958 || any_type_dependent_arguments_p (*args))
1960 result = build_nt_call_vec (fn, *args);
1961 KOENIG_LOOKUP_P (result) = koenig_p;
1962 if (cfun)
1966 tree fndecl = OVL_CURRENT (fn);
1967 if (TREE_CODE (fndecl) != FUNCTION_DECL
1968 || !TREE_THIS_VOLATILE (fndecl))
1969 break;
1970 fn = OVL_NEXT (fn);
1972 while (fn);
1973 if (!fn)
1974 current_function_returns_abnormally = 1;
1976 return result;
1978 orig_args = make_tree_vector_copy (*args);
1979 if (!BASELINK_P (fn)
1980 && TREE_CODE (fn) != PSEUDO_DTOR_EXPR
1981 && TREE_TYPE (fn) != unknown_type_node)
1982 fn = build_non_dependent_expr (fn);
1983 make_args_non_dependent (*args);
1986 if (is_overloaded_fn (fn))
1987 fn = baselink_for_fns (fn);
1989 result = NULL_TREE;
1990 if (BASELINK_P (fn))
1992 tree object;
1994 /* A call to a member function. From [over.call.func]:
1996 If the keyword this is in scope and refers to the class of
1997 that member function, or a derived class thereof, then the
1998 function call is transformed into a qualified function call
1999 using (*this) as the postfix-expression to the left of the
2000 . operator.... [Otherwise] a contrived object of type T
2001 becomes the implied object argument.
2003 In this situation:
2005 struct A { void f(); };
2006 struct B : public A {};
2007 struct C : public A { void g() { B::f(); }};
2009 "the class of that member function" refers to `A'. But 11.2
2010 [class.access.base] says that we need to convert 'this' to B* as
2011 part of the access, so we pass 'B' to maybe_dummy_object. */
2013 object = maybe_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
2014 NULL);
2016 if (processing_template_decl)
2018 if (type_dependent_expression_p (object))
2020 tree ret = build_nt_call_vec (orig_fn, orig_args);
2021 release_tree_vector (orig_args);
2022 return ret;
2024 object = build_non_dependent_expr (object);
2027 result = build_new_method_call (object, fn, args, NULL_TREE,
2028 (disallow_virtual
2029 ? LOOKUP_NONVIRTUAL : 0),
2030 /*fn_p=*/NULL,
2031 complain);
2033 else if (is_overloaded_fn (fn))
2035 /* If the function is an overloaded builtin, resolve it. */
2036 if (TREE_CODE (fn) == FUNCTION_DECL
2037 && (DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL
2038 || DECL_BUILT_IN_CLASS (fn) == BUILT_IN_MD))
2039 result = resolve_overloaded_builtin (input_location, fn, *args);
2041 if (!result)
2042 /* A call to a namespace-scope function. */
2043 result = build_new_function_call (fn, args, koenig_p, complain);
2045 else if (TREE_CODE (fn) == PSEUDO_DTOR_EXPR)
2047 if (!VEC_empty (tree, *args))
2048 error ("arguments to destructor are not allowed");
2049 /* Mark the pseudo-destructor call as having side-effects so
2050 that we do not issue warnings about its use. */
2051 result = build1 (NOP_EXPR,
2052 void_type_node,
2053 TREE_OPERAND (fn, 0));
2054 TREE_SIDE_EFFECTS (result) = 1;
2056 else if (CLASS_TYPE_P (TREE_TYPE (fn)))
2057 /* If the "function" is really an object of class type, it might
2058 have an overloaded `operator ()'. */
2059 result = build_op_call (fn, args, complain);
2061 if (!result)
2062 /* A call where the function is unknown. */
2063 result = cp_build_function_call_vec (fn, args, complain);
2065 if (processing_template_decl)
2067 result = build_call_vec (TREE_TYPE (result), orig_fn, orig_args);
2068 KOENIG_LOOKUP_P (result) = koenig_p;
2069 release_tree_vector (orig_args);
2072 return result;
2075 /* Finish a call to a postfix increment or decrement or EXPR. (Which
2076 is indicated by CODE, which should be POSTINCREMENT_EXPR or
2077 POSTDECREMENT_EXPR.) */
2079 tree
2080 finish_increment_expr (tree expr, enum tree_code code)
2082 return build_x_unary_op (code, expr, tf_warning_or_error);
2085 /* Finish a use of `this'. Returns an expression for `this'. */
2087 tree
2088 finish_this_expr (void)
2090 tree result;
2092 if (current_class_ptr)
2094 tree type = TREE_TYPE (current_class_ref);
2096 /* In a lambda expression, 'this' refers to the captured 'this'. */
2097 if (LAMBDA_TYPE_P (type))
2098 result = lambda_expr_this_capture (CLASSTYPE_LAMBDA_EXPR (type));
2099 else
2100 result = current_class_ptr;
2103 else if (current_function_decl
2104 && DECL_STATIC_FUNCTION_P (current_function_decl))
2106 error ("%<this%> is unavailable for static member functions");
2107 result = error_mark_node;
2109 else
2111 if (current_function_decl)
2112 error ("invalid use of %<this%> in non-member function");
2113 else
2114 error ("invalid use of %<this%> at top level");
2115 result = error_mark_node;
2118 return result;
2121 /* Finish a pseudo-destructor expression. If SCOPE is NULL, the
2122 expression was of the form `OBJECT.~DESTRUCTOR' where DESTRUCTOR is
2123 the TYPE for the type given. If SCOPE is non-NULL, the expression
2124 was of the form `OBJECT.SCOPE::~DESTRUCTOR'. */
2126 tree
2127 finish_pseudo_destructor_expr (tree object, tree scope, tree destructor)
2129 if (object == error_mark_node || destructor == error_mark_node)
2130 return error_mark_node;
2132 gcc_assert (TYPE_P (destructor));
2134 if (!processing_template_decl)
2136 if (scope == error_mark_node)
2138 error ("invalid qualifying scope in pseudo-destructor name");
2139 return error_mark_node;
2141 if (scope && TYPE_P (scope) && !check_dtor_name (scope, destructor))
2143 error ("qualified type %qT does not match destructor name ~%qT",
2144 scope, destructor);
2145 return error_mark_node;
2149 /* [expr.pseudo] says both:
2151 The type designated by the pseudo-destructor-name shall be
2152 the same as the object type.
2154 and:
2156 The cv-unqualified versions of the object type and of the
2157 type designated by the pseudo-destructor-name shall be the
2158 same type.
2160 We implement the more generous second sentence, since that is
2161 what most other compilers do. */
2162 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (object),
2163 destructor))
2165 error ("%qE is not of type %qT", object, destructor);
2166 return error_mark_node;
2170 return build3 (PSEUDO_DTOR_EXPR, void_type_node, object, scope, destructor);
2173 /* Finish an expression of the form CODE EXPR. */
2175 tree
2176 finish_unary_op_expr (enum tree_code code, tree expr)
2178 tree result = build_x_unary_op (code, expr, tf_warning_or_error);
2179 /* Inside a template, build_x_unary_op does not fold the
2180 expression. So check whether the result is folded before
2181 setting TREE_NEGATED_INT. */
2182 if (code == NEGATE_EXPR && TREE_CODE (expr) == INTEGER_CST
2183 && TREE_CODE (result) == INTEGER_CST
2184 && !TYPE_UNSIGNED (TREE_TYPE (result))
2185 && INT_CST_LT (result, integer_zero_node))
2187 /* RESULT may be a cached INTEGER_CST, so we must copy it before
2188 setting TREE_NEGATED_INT. */
2189 result = copy_node (result);
2190 TREE_NEGATED_INT (result) = 1;
2192 if (TREE_OVERFLOW_P (result) && !TREE_OVERFLOW_P (expr))
2193 overflow_warning (input_location, result);
2195 return result;
2198 /* Finish a compound-literal expression. TYPE is the type to which
2199 the CONSTRUCTOR in COMPOUND_LITERAL is being cast. */
2201 tree
2202 finish_compound_literal (tree type, tree compound_literal)
2204 if (type == error_mark_node)
2205 return error_mark_node;
2207 if (!TYPE_OBJ_P (type))
2209 error ("compound literal of non-object type %qT", type);
2210 return error_mark_node;
2213 if (processing_template_decl)
2215 TREE_TYPE (compound_literal) = type;
2216 /* Mark the expression as a compound literal. */
2217 TREE_HAS_CONSTRUCTOR (compound_literal) = 1;
2218 return compound_literal;
2221 type = complete_type (type);
2223 if (TYPE_NON_AGGREGATE_CLASS (type))
2225 /* Trying to deal with a CONSTRUCTOR instead of a TREE_LIST
2226 everywhere that deals with function arguments would be a pain, so
2227 just wrap it in a TREE_LIST. The parser set a flag so we know
2228 that it came from T{} rather than T({}). */
2229 CONSTRUCTOR_IS_DIRECT_INIT (compound_literal) = 1;
2230 compound_literal = build_tree_list (NULL_TREE, compound_literal);
2231 return build_functional_cast (type, compound_literal, tf_error);
2234 if (TREE_CODE (type) == ARRAY_TYPE
2235 && check_array_initializer (NULL_TREE, type, compound_literal))
2236 return error_mark_node;
2237 compound_literal = reshape_init (type, compound_literal);
2238 if (TREE_CODE (type) == ARRAY_TYPE)
2239 cp_complete_array_type (&type, compound_literal, false);
2240 compound_literal = digest_init (type, compound_literal);
2241 return get_target_expr (compound_literal);
2244 /* Return the declaration for the function-name variable indicated by
2245 ID. */
2247 tree
2248 finish_fname (tree id)
2250 tree decl;
2252 decl = fname_decl (input_location, C_RID_CODE (id), id);
2253 if (processing_template_decl)
2254 decl = DECL_NAME (decl);
2255 return decl;
2258 /* Finish a translation unit. */
2260 void
2261 finish_translation_unit (void)
2263 /* In case there were missing closebraces,
2264 get us back to the global binding level. */
2265 pop_everything ();
2266 while (current_namespace != global_namespace)
2267 pop_namespace ();
2269 /* Do file scope __FUNCTION__ et al. */
2270 finish_fname_decls ();
2273 /* Finish a template type parameter, specified as AGGR IDENTIFIER.
2274 Returns the parameter. */
2276 tree
2277 finish_template_type_parm (tree aggr, tree identifier)
2279 if (aggr != class_type_node)
2281 permerror (input_location, "template type parameters must use the keyword %<class%> or %<typename%>");
2282 aggr = class_type_node;
2285 return build_tree_list (aggr, identifier);
2288 /* Finish a template template parameter, specified as AGGR IDENTIFIER.
2289 Returns the parameter. */
2291 tree
2292 finish_template_template_parm (tree aggr, tree identifier)
2294 tree decl = build_decl (input_location,
2295 TYPE_DECL, identifier, NULL_TREE);
2296 tree tmpl = build_lang_decl (TEMPLATE_DECL, identifier, NULL_TREE);
2297 DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
2298 DECL_TEMPLATE_RESULT (tmpl) = decl;
2299 DECL_ARTIFICIAL (decl) = 1;
2300 end_template_decl ();
2302 gcc_assert (DECL_TEMPLATE_PARMS (tmpl));
2304 check_default_tmpl_args (decl, DECL_TEMPLATE_PARMS (tmpl),
2305 /*is_primary=*/true, /*is_partial=*/false,
2306 /*is_friend=*/0);
2308 return finish_template_type_parm (aggr, tmpl);
2311 /* ARGUMENT is the default-argument value for a template template
2312 parameter. If ARGUMENT is invalid, issue error messages and return
2313 the ERROR_MARK_NODE. Otherwise, ARGUMENT itself is returned. */
2315 tree
2316 check_template_template_default_arg (tree argument)
2318 if (TREE_CODE (argument) != TEMPLATE_DECL
2319 && TREE_CODE (argument) != TEMPLATE_TEMPLATE_PARM
2320 && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
2322 if (TREE_CODE (argument) == TYPE_DECL)
2323 error ("invalid use of type %qT as a default value for a template "
2324 "template-parameter", TREE_TYPE (argument));
2325 else
2326 error ("invalid default argument for a template template parameter");
2327 return error_mark_node;
2330 return argument;
2333 /* Begin a class definition, as indicated by T. */
2335 tree
2336 begin_class_definition (tree t, tree attributes)
2338 if (error_operand_p (t) || error_operand_p (TYPE_MAIN_DECL (t)))
2339 return error_mark_node;
2341 if (processing_template_parmlist)
2343 error ("definition of %q#T inside template parameter list", t);
2344 return error_mark_node;
2347 /* According to the C++ ABI, decimal classes defined in ISO/IEC TR 24733
2348 are passed the same as decimal scalar types. */
2349 if (TREE_CODE (t) == RECORD_TYPE
2350 && !processing_template_decl)
2352 tree ns = TYPE_CONTEXT (t);
2353 if (ns && TREE_CODE (ns) == NAMESPACE_DECL
2354 && DECL_CONTEXT (ns) == std_node
2355 && DECL_NAME (ns)
2356 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (ns)), "decimal"))
2358 const char *n = TYPE_NAME_STRING (t);
2359 if ((strcmp (n, "decimal32") == 0)
2360 || (strcmp (n, "decimal64") == 0)
2361 || (strcmp (n, "decimal128") == 0))
2362 TYPE_TRANSPARENT_AGGR (t) = 1;
2366 /* A non-implicit typename comes from code like:
2368 template <typename T> struct A {
2369 template <typename U> struct A<T>::B ...
2371 This is erroneous. */
2372 else if (TREE_CODE (t) == TYPENAME_TYPE)
2374 error ("invalid definition of qualified type %qT", t);
2375 t = error_mark_node;
2378 if (t == error_mark_node || ! MAYBE_CLASS_TYPE_P (t))
2380 t = make_class_type (RECORD_TYPE);
2381 pushtag (make_anon_name (), t, /*tag_scope=*/ts_current);
2384 if (TYPE_BEING_DEFINED (t))
2386 t = make_class_type (TREE_CODE (t));
2387 pushtag (TYPE_IDENTIFIER (t), t, /*tag_scope=*/ts_current);
2389 maybe_process_partial_specialization (t);
2390 pushclass (t);
2391 TYPE_BEING_DEFINED (t) = 1;
2393 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
2395 if (flag_pack_struct)
2397 tree v;
2398 TYPE_PACKED (t) = 1;
2399 /* Even though the type is being defined for the first time
2400 here, there might have been a forward declaration, so there
2401 might be cv-qualified variants of T. */
2402 for (v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
2403 TYPE_PACKED (v) = 1;
2405 /* Reset the interface data, at the earliest possible
2406 moment, as it might have been set via a class foo;
2407 before. */
2408 if (! TYPE_ANONYMOUS_P (t))
2410 struct c_fileinfo *finfo = get_fileinfo (input_filename);
2411 CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
2412 SET_CLASSTYPE_INTERFACE_UNKNOWN_X
2413 (t, finfo->interface_unknown);
2415 reset_specialization();
2417 /* Make a declaration for this class in its own scope. */
2418 build_self_reference ();
2420 return t;
2423 /* Finish the member declaration given by DECL. */
2425 void
2426 finish_member_declaration (tree decl)
2428 if (decl == error_mark_node || decl == NULL_TREE)
2429 return;
2431 if (decl == void_type_node)
2432 /* The COMPONENT was a friend, not a member, and so there's
2433 nothing for us to do. */
2434 return;
2436 /* We should see only one DECL at a time. */
2437 gcc_assert (DECL_CHAIN (decl) == NULL_TREE);
2439 /* Set up access control for DECL. */
2440 TREE_PRIVATE (decl)
2441 = (current_access_specifier == access_private_node);
2442 TREE_PROTECTED (decl)
2443 = (current_access_specifier == access_protected_node);
2444 if (TREE_CODE (decl) == TEMPLATE_DECL)
2446 TREE_PRIVATE (DECL_TEMPLATE_RESULT (decl)) = TREE_PRIVATE (decl);
2447 TREE_PROTECTED (DECL_TEMPLATE_RESULT (decl)) = TREE_PROTECTED (decl);
2450 /* Mark the DECL as a member of the current class. */
2451 DECL_CONTEXT (decl) = current_class_type;
2453 /* Check for bare parameter packs in the member variable declaration. */
2454 if (TREE_CODE (decl) == FIELD_DECL)
2456 if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
2457 TREE_TYPE (decl) = error_mark_node;
2458 if (check_for_bare_parameter_packs (DECL_ATTRIBUTES (decl)))
2459 DECL_ATTRIBUTES (decl) = NULL_TREE;
2462 /* [dcl.link]
2464 A C language linkage is ignored for the names of class members
2465 and the member function type of class member functions. */
2466 if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
2467 SET_DECL_LANGUAGE (decl, lang_cplusplus);
2469 /* Put functions on the TYPE_METHODS list and everything else on the
2470 TYPE_FIELDS list. Note that these are built up in reverse order.
2471 We reverse them (to obtain declaration order) in finish_struct. */
2472 if (TREE_CODE (decl) == FUNCTION_DECL
2473 || DECL_FUNCTION_TEMPLATE_P (decl))
2475 /* We also need to add this function to the
2476 CLASSTYPE_METHOD_VEC. */
2477 if (add_method (current_class_type, decl, NULL_TREE))
2479 DECL_CHAIN (decl) = TYPE_METHODS (current_class_type);
2480 TYPE_METHODS (current_class_type) = decl;
2482 maybe_add_class_template_decl_list (current_class_type, decl,
2483 /*friend_p=*/0);
2486 /* Enter the DECL into the scope of the class. */
2487 else if ((TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
2488 || pushdecl_class_level (decl))
2490 /* All TYPE_DECLs go at the end of TYPE_FIELDS. Ordinary fields
2491 go at the beginning. The reason is that lookup_field_1
2492 searches the list in order, and we want a field name to
2493 override a type name so that the "struct stat hack" will
2494 work. In particular:
2496 struct S { enum E { }; int E } s;
2497 s.E = 3;
2499 is valid. In addition, the FIELD_DECLs must be maintained in
2500 declaration order so that class layout works as expected.
2501 However, we don't need that order until class layout, so we
2502 save a little time by putting FIELD_DECLs on in reverse order
2503 here, and then reversing them in finish_struct_1. (We could
2504 also keep a pointer to the correct insertion points in the
2505 list.) */
2507 if (TREE_CODE (decl) == TYPE_DECL)
2508 TYPE_FIELDS (current_class_type)
2509 = chainon (TYPE_FIELDS (current_class_type), decl);
2510 else
2512 DECL_CHAIN (decl) = TYPE_FIELDS (current_class_type);
2513 TYPE_FIELDS (current_class_type) = decl;
2516 maybe_add_class_template_decl_list (current_class_type, decl,
2517 /*friend_p=*/0);
2520 if (pch_file)
2521 note_decl_for_pch (decl);
2524 /* DECL has been declared while we are building a PCH file. Perform
2525 actions that we might normally undertake lazily, but which can be
2526 performed now so that they do not have to be performed in
2527 translation units which include the PCH file. */
2529 void
2530 note_decl_for_pch (tree decl)
2532 gcc_assert (pch_file);
2534 /* There's a good chance that we'll have to mangle names at some
2535 point, even if only for emission in debugging information. */
2536 if ((TREE_CODE (decl) == VAR_DECL
2537 || TREE_CODE (decl) == FUNCTION_DECL)
2538 && !processing_template_decl)
2539 mangle_decl (decl);
2542 /* Finish processing a complete template declaration. The PARMS are
2543 the template parameters. */
2545 void
2546 finish_template_decl (tree parms)
2548 if (parms)
2549 end_template_decl ();
2550 else
2551 end_specialization ();
2554 /* Finish processing a template-id (which names a type) of the form
2555 NAME < ARGS >. Return the TYPE_DECL for the type named by the
2556 template-id. If ENTERING_SCOPE is nonzero we are about to enter
2557 the scope of template-id indicated. */
2559 tree
2560 finish_template_type (tree name, tree args, int entering_scope)
2562 tree decl;
2564 decl = lookup_template_class (name, args,
2565 NULL_TREE, NULL_TREE, entering_scope,
2566 tf_warning_or_error | tf_user);
2567 if (decl != error_mark_node)
2568 decl = TYPE_STUB_DECL (decl);
2570 return decl;
2573 /* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2574 Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2575 BASE_CLASS, or NULL_TREE if an error occurred. The
2576 ACCESS_SPECIFIER is one of
2577 access_{default,public,protected_private}_node. For a virtual base
2578 we set TREE_TYPE. */
2580 tree
2581 finish_base_specifier (tree base, tree access, bool virtual_p)
2583 tree result;
2585 if (base == error_mark_node)
2587 error ("invalid base-class specification");
2588 result = NULL_TREE;
2590 else if (! MAYBE_CLASS_TYPE_P (base))
2592 error ("%qT is not a class type", base);
2593 result = NULL_TREE;
2595 else
2597 if (cp_type_quals (base) != 0)
2599 error ("base class %qT has cv qualifiers", base);
2600 base = TYPE_MAIN_VARIANT (base);
2602 result = build_tree_list (access, base);
2603 if (virtual_p)
2604 TREE_TYPE (result) = integer_type_node;
2607 return result;
2610 /* Issue a diagnostic that NAME cannot be found in SCOPE. DECL is
2611 what we found when we tried to do the lookup.
2612 LOCATION is the location of the NAME identifier;
2613 The location is used in the error message*/
2615 void
2616 qualified_name_lookup_error (tree scope, tree name,
2617 tree decl, location_t location)
2619 if (scope == error_mark_node)
2620 ; /* We already complained. */
2621 else if (TYPE_P (scope))
2623 if (!COMPLETE_TYPE_P (scope))
2624 error_at (location, "incomplete type %qT used in nested name specifier",
2625 scope);
2626 else if (TREE_CODE (decl) == TREE_LIST)
2628 error_at (location, "reference to %<%T::%D%> is ambiguous",
2629 scope, name);
2630 print_candidates (decl);
2632 else
2633 error_at (location, "%qD is not a member of %qT", name, scope);
2635 else if (scope != global_namespace)
2636 error_at (location, "%qD is not a member of %qD", name, scope);
2637 else
2638 error_at (location, "%<::%D%> has not been declared", name);
2641 /* If FNS is a member function, a set of member functions, or a
2642 template-id referring to one or more member functions, return a
2643 BASELINK for FNS, incorporating the current access context.
2644 Otherwise, return FNS unchanged. */
2646 tree
2647 baselink_for_fns (tree fns)
2649 tree fn;
2650 tree cl;
2652 if (BASELINK_P (fns)
2653 || error_operand_p (fns))
2654 return fns;
2656 fn = fns;
2657 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2658 fn = TREE_OPERAND (fn, 0);
2659 fn = get_first_fn (fn);
2660 if (!DECL_FUNCTION_MEMBER_P (fn))
2661 return fns;
2663 cl = currently_open_derived_class (DECL_CONTEXT (fn));
2664 if (!cl)
2665 cl = DECL_CONTEXT (fn);
2666 cl = TYPE_BINFO (cl);
2667 return build_baselink (cl, cl, fns, /*optype=*/NULL_TREE);
2670 /* Returns true iff DECL is an automatic variable from a function outside
2671 the current one. */
2673 static bool
2674 outer_automatic_var_p (tree decl)
2676 return ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
2677 && DECL_FUNCTION_SCOPE_P (decl)
2678 && !TREE_STATIC (decl)
2679 && DECL_CONTEXT (decl) != current_function_decl);
2682 /* Returns true iff DECL is a capture field from a lambda that is not our
2683 immediate context. */
2685 static bool
2686 outer_lambda_capture_p (tree decl)
2688 return (TREE_CODE (decl) == FIELD_DECL
2689 && LAMBDA_TYPE_P (DECL_CONTEXT (decl))
2690 && (!current_class_type
2691 || !DERIVED_FROM_P (DECL_CONTEXT (decl), current_class_type)));
2694 /* ID_EXPRESSION is a representation of parsed, but unprocessed,
2695 id-expression. (See cp_parser_id_expression for details.) SCOPE,
2696 if non-NULL, is the type or namespace used to explicitly qualify
2697 ID_EXPRESSION. DECL is the entity to which that name has been
2698 resolved.
2700 *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2701 constant-expression. In that case, *NON_CONSTANT_EXPRESSION_P will
2702 be set to true if this expression isn't permitted in a
2703 constant-expression, but it is otherwise not set by this function.
2704 *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2705 constant-expression, but a non-constant expression is also
2706 permissible.
2708 DONE is true if this expression is a complete postfix-expression;
2709 it is false if this expression is followed by '->', '[', '(', etc.
2710 ADDRESS_P is true iff this expression is the operand of '&'.
2711 TEMPLATE_P is true iff the qualified-id was of the form
2712 "A::template B". TEMPLATE_ARG_P is true iff this qualified name
2713 appears as a template argument.
2715 If an error occurs, and it is the kind of error that might cause
2716 the parser to abort a tentative parse, *ERROR_MSG is filled in. It
2717 is the caller's responsibility to issue the message. *ERROR_MSG
2718 will be a string with static storage duration, so the caller need
2719 not "free" it.
2721 Return an expression for the entity, after issuing appropriate
2722 diagnostics. This function is also responsible for transforming a
2723 reference to a non-static member into a COMPONENT_REF that makes
2724 the use of "this" explicit.
2726 Upon return, *IDK will be filled in appropriately. */
2727 tree
2728 finish_id_expression (tree id_expression,
2729 tree decl,
2730 tree scope,
2731 cp_id_kind *idk,
2732 bool integral_constant_expression_p,
2733 bool allow_non_integral_constant_expression_p,
2734 bool *non_integral_constant_expression_p,
2735 bool template_p,
2736 bool done,
2737 bool address_p,
2738 bool template_arg_p,
2739 const char **error_msg,
2740 location_t location)
2742 /* Initialize the output parameters. */
2743 *idk = CP_ID_KIND_NONE;
2744 *error_msg = NULL;
2746 if (id_expression == error_mark_node)
2747 return error_mark_node;
2748 /* If we have a template-id, then no further lookup is
2749 required. If the template-id was for a template-class, we
2750 will sometimes have a TYPE_DECL at this point. */
2751 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2752 || TREE_CODE (decl) == TYPE_DECL)
2754 /* Look up the name. */
2755 else
2757 if (decl == error_mark_node)
2759 /* Name lookup failed. */
2760 if (scope
2761 && (!TYPE_P (scope)
2762 || (!dependent_type_p (scope)
2763 && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
2764 && IDENTIFIER_TYPENAME_P (id_expression)
2765 && dependent_type_p (TREE_TYPE (id_expression))))))
2767 /* If the qualifying type is non-dependent (and the name
2768 does not name a conversion operator to a dependent
2769 type), issue an error. */
2770 qualified_name_lookup_error (scope, id_expression, decl, location);
2771 return error_mark_node;
2773 else if (!scope)
2775 /* It may be resolved via Koenig lookup. */
2776 *idk = CP_ID_KIND_UNQUALIFIED;
2777 return id_expression;
2779 else
2780 decl = id_expression;
2782 /* If DECL is a variable that would be out of scope under
2783 ANSI/ISO rules, but in scope in the ARM, name lookup
2784 will succeed. Issue a diagnostic here. */
2785 else
2786 decl = check_for_out_of_scope_variable (decl);
2788 /* Remember that the name was used in the definition of
2789 the current class so that we can check later to see if
2790 the meaning would have been different after the class
2791 was entirely defined. */
2792 if (!scope && decl != error_mark_node)
2793 maybe_note_name_used_in_class (id_expression, decl);
2795 /* Disallow uses of local variables from containing functions, except
2796 within lambda-expressions. */
2797 if ((outer_automatic_var_p (decl)
2798 || outer_lambda_capture_p (decl))
2799 /* It's not a use (3.2) if we're in an unevaluated context. */
2800 && !cp_unevaluated_operand)
2802 tree context = DECL_CONTEXT (decl);
2803 tree containing_function = current_function_decl;
2804 tree lambda_stack = NULL_TREE;
2805 tree lambda_expr = NULL_TREE;
2806 tree initializer = decl;
2808 /* Core issue 696: "[At the July 2009 meeting] the CWG expressed
2809 support for an approach in which a reference to a local
2810 [constant] automatic variable in a nested class or lambda body
2811 would enter the expression as an rvalue, which would reduce
2812 the complexity of the problem"
2814 FIXME update for final resolution of core issue 696. */
2815 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
2816 return integral_constant_value (decl);
2818 if (TYPE_P (context))
2820 /* Implicit capture of an explicit capture. */
2821 context = lambda_function (context);
2822 initializer = thisify_lambda_field (decl);
2825 /* If we are in a lambda function, we can move out until we hit
2826 1. the context,
2827 2. a non-lambda function, or
2828 3. a non-default capturing lambda function. */
2829 while (context != containing_function
2830 && LAMBDA_FUNCTION_P (containing_function))
2832 lambda_expr = CLASSTYPE_LAMBDA_EXPR
2833 (DECL_CONTEXT (containing_function));
2835 if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr)
2836 == CPLD_NONE)
2837 break;
2839 lambda_stack = tree_cons (NULL_TREE,
2840 lambda_expr,
2841 lambda_stack);
2843 containing_function
2844 = decl_function_context (containing_function);
2847 if (context == containing_function)
2849 decl = add_default_capture (lambda_stack,
2850 /*id=*/DECL_NAME (decl),
2851 initializer);
2853 else if (lambda_expr)
2855 error ("%qD is not captured", decl);
2856 return error_mark_node;
2858 else
2860 error (TREE_CODE (decl) == VAR_DECL
2861 ? "use of %<auto%> variable from containing function"
2862 : "use of parameter from containing function");
2863 error (" %q+#D declared here", decl);
2864 return error_mark_node;
2868 /* Also disallow uses of function parameters outside the function
2869 body, except inside an unevaluated context (i.e. decltype). */
2870 if (TREE_CODE (decl) == PARM_DECL
2871 && DECL_CONTEXT (decl) == NULL_TREE
2872 && !cp_unevaluated_operand)
2874 error ("use of parameter %qD outside function body", decl);
2875 return error_mark_node;
2879 /* If we didn't find anything, or what we found was a type,
2880 then this wasn't really an id-expression. */
2881 if (TREE_CODE (decl) == TEMPLATE_DECL
2882 && !DECL_FUNCTION_TEMPLATE_P (decl))
2884 *error_msg = "missing template arguments";
2885 return error_mark_node;
2887 else if (TREE_CODE (decl) == TYPE_DECL
2888 || TREE_CODE (decl) == NAMESPACE_DECL)
2890 *error_msg = "expected primary-expression";
2891 return error_mark_node;
2894 /* If the name resolved to a template parameter, there is no
2895 need to look it up again later. */
2896 if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
2897 || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2899 tree r;
2901 *idk = CP_ID_KIND_NONE;
2902 if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2903 decl = TEMPLATE_PARM_DECL (decl);
2904 r = convert_from_reference (DECL_INITIAL (decl));
2906 if (integral_constant_expression_p
2907 && !dependent_type_p (TREE_TYPE (decl))
2908 && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
2910 if (!allow_non_integral_constant_expression_p)
2911 error ("template parameter %qD of type %qT is not allowed in "
2912 "an integral constant expression because it is not of "
2913 "integral or enumeration type", decl, TREE_TYPE (decl));
2914 *non_integral_constant_expression_p = true;
2916 return r;
2918 /* Similarly, we resolve enumeration constants to their
2919 underlying values. */
2920 else if (TREE_CODE (decl) == CONST_DECL)
2922 *idk = CP_ID_KIND_NONE;
2923 if (!processing_template_decl)
2925 used_types_insert (TREE_TYPE (decl));
2926 return DECL_INITIAL (decl);
2928 return decl;
2930 else
2932 bool dependent_p;
2934 /* If the declaration was explicitly qualified indicate
2935 that. The semantics of `A::f(3)' are different than
2936 `f(3)' if `f' is virtual. */
2937 *idk = (scope
2938 ? CP_ID_KIND_QUALIFIED
2939 : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2940 ? CP_ID_KIND_TEMPLATE_ID
2941 : CP_ID_KIND_UNQUALIFIED));
2944 /* [temp.dep.expr]
2946 An id-expression is type-dependent if it contains an
2947 identifier that was declared with a dependent type.
2949 The standard is not very specific about an id-expression that
2950 names a set of overloaded functions. What if some of them
2951 have dependent types and some of them do not? Presumably,
2952 such a name should be treated as a dependent name. */
2953 /* Assume the name is not dependent. */
2954 dependent_p = false;
2955 if (!processing_template_decl)
2956 /* No names are dependent outside a template. */
2958 /* A template-id where the name of the template was not resolved
2959 is definitely dependent. */
2960 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2961 && (TREE_CODE (TREE_OPERAND (decl, 0))
2962 == IDENTIFIER_NODE))
2963 dependent_p = true;
2964 /* For anything except an overloaded function, just check its
2965 type. */
2966 else if (!is_overloaded_fn (decl))
2967 dependent_p
2968 = dependent_type_p (TREE_TYPE (decl));
2969 /* For a set of overloaded functions, check each of the
2970 functions. */
2971 else
2973 tree fns = decl;
2975 if (BASELINK_P (fns))
2976 fns = BASELINK_FUNCTIONS (fns);
2978 /* For a template-id, check to see if the template
2979 arguments are dependent. */
2980 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
2982 tree args = TREE_OPERAND (fns, 1);
2983 dependent_p = any_dependent_template_arguments_p (args);
2984 /* The functions are those referred to by the
2985 template-id. */
2986 fns = TREE_OPERAND (fns, 0);
2989 /* If there are no dependent template arguments, go through
2990 the overloaded functions. */
2991 while (fns && !dependent_p)
2993 tree fn = OVL_CURRENT (fns);
2995 /* Member functions of dependent classes are
2996 dependent. */
2997 if (TREE_CODE (fn) == FUNCTION_DECL
2998 && type_dependent_expression_p (fn))
2999 dependent_p = true;
3000 else if (TREE_CODE (fn) == TEMPLATE_DECL
3001 && dependent_template_p (fn))
3002 dependent_p = true;
3004 fns = OVL_NEXT (fns);
3008 /* If the name was dependent on a template parameter, we will
3009 resolve the name at instantiation time. */
3010 if (dependent_p)
3012 /* Create a SCOPE_REF for qualified names, if the scope is
3013 dependent. */
3014 if (scope)
3016 if (TYPE_P (scope))
3018 if (address_p && done)
3019 decl = finish_qualified_id_expr (scope, decl,
3020 done, address_p,
3021 template_p,
3022 template_arg_p);
3023 else
3025 tree type = NULL_TREE;
3026 if (DECL_P (decl) && !dependent_scope_p (scope))
3027 type = TREE_TYPE (decl);
3028 decl = build_qualified_name (type,
3029 scope,
3030 id_expression,
3031 template_p);
3034 if (TREE_TYPE (decl))
3035 decl = convert_from_reference (decl);
3036 return decl;
3038 /* A TEMPLATE_ID already contains all the information we
3039 need. */
3040 if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
3041 return id_expression;
3042 *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
3043 /* If we found a variable, then name lookup during the
3044 instantiation will always resolve to the same VAR_DECL
3045 (or an instantiation thereof). */
3046 if (TREE_CODE (decl) == VAR_DECL
3047 || TREE_CODE (decl) == PARM_DECL)
3048 return convert_from_reference (decl);
3049 /* The same is true for FIELD_DECL, but we also need to
3050 make sure that the syntax is correct. */
3051 else if (TREE_CODE (decl) == FIELD_DECL)
3053 /* Since SCOPE is NULL here, this is an unqualified name.
3054 Access checking has been performed during name lookup
3055 already. Turn off checking to avoid duplicate errors. */
3056 push_deferring_access_checks (dk_no_check);
3057 decl = finish_non_static_data_member
3058 (decl, NULL_TREE,
3059 /*qualifying_scope=*/NULL_TREE);
3060 pop_deferring_access_checks ();
3061 return decl;
3063 return id_expression;
3066 /* Only certain kinds of names are allowed in constant
3067 expression. Enumerators and template parameters have already
3068 been handled above. */
3069 if (integral_constant_expression_p
3070 && ! DECL_INTEGRAL_CONSTANT_VAR_P (decl)
3071 && ! builtin_valid_in_constant_expr_p (decl))
3073 if (!allow_non_integral_constant_expression_p)
3075 error ("%qD cannot appear in a constant-expression", decl);
3076 return error_mark_node;
3078 *non_integral_constant_expression_p = true;
3081 if (TREE_CODE (decl) == NAMESPACE_DECL)
3083 error ("use of namespace %qD as expression", decl);
3084 return error_mark_node;
3086 else if (DECL_CLASS_TEMPLATE_P (decl))
3088 error ("use of class template %qT as expression", decl);
3089 return error_mark_node;
3091 else if (TREE_CODE (decl) == TREE_LIST)
3093 /* Ambiguous reference to base members. */
3094 error ("request for member %qD is ambiguous in "
3095 "multiple inheritance lattice", id_expression);
3096 print_candidates (decl);
3097 return error_mark_node;
3100 /* Mark variable-like entities as used. Functions are similarly
3101 marked either below or after overload resolution. */
3102 if (TREE_CODE (decl) == VAR_DECL
3103 || TREE_CODE (decl) == PARM_DECL
3104 || TREE_CODE (decl) == RESULT_DECL)
3105 mark_used (decl);
3107 if (scope)
3109 decl = (adjust_result_of_qualified_name_lookup
3110 (decl, scope, current_class_type));
3112 if (TREE_CODE (decl) == FUNCTION_DECL)
3113 mark_used (decl);
3115 if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl))
3116 decl = finish_qualified_id_expr (scope,
3117 decl,
3118 done,
3119 address_p,
3120 template_p,
3121 template_arg_p);
3122 else
3124 tree r = convert_from_reference (decl);
3126 /* In a template, return a SCOPE_REF for most qualified-ids
3127 so that we can check access at instantiation time. But if
3128 we're looking at a member of the current instantiation, we
3129 know we have access and building up the SCOPE_REF confuses
3130 non-type template argument handling. */
3131 if (processing_template_decl && TYPE_P (scope)
3132 && !currently_open_class (scope))
3133 r = build_qualified_name (TREE_TYPE (r),
3134 scope, decl,
3135 template_p);
3136 decl = r;
3139 else if (TREE_CODE (decl) == FIELD_DECL)
3141 /* Since SCOPE is NULL here, this is an unqualified name.
3142 Access checking has been performed during name lookup
3143 already. Turn off checking to avoid duplicate errors. */
3144 push_deferring_access_checks (dk_no_check);
3145 decl = finish_non_static_data_member (decl, NULL_TREE,
3146 /*qualifying_scope=*/NULL_TREE);
3147 pop_deferring_access_checks ();
3149 else if (is_overloaded_fn (decl))
3151 tree first_fn;
3153 first_fn = get_first_fn (decl);
3154 if (TREE_CODE (first_fn) == TEMPLATE_DECL)
3155 first_fn = DECL_TEMPLATE_RESULT (first_fn);
3157 if (!really_overloaded_fn (decl))
3158 mark_used (first_fn);
3160 if (!template_arg_p
3161 && TREE_CODE (first_fn) == FUNCTION_DECL
3162 && DECL_FUNCTION_MEMBER_P (first_fn)
3163 && !shared_member_p (decl))
3165 /* A set of member functions. */
3166 decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
3167 return finish_class_member_access_expr (decl, id_expression,
3168 /*template_p=*/false,
3169 tf_warning_or_error);
3172 decl = baselink_for_fns (decl);
3174 else
3176 if (DECL_P (decl) && DECL_NONLOCAL (decl)
3177 && DECL_CLASS_SCOPE_P (decl))
3179 tree context = context_for_name_lookup (decl);
3180 if (context != current_class_type)
3182 tree path = currently_open_derived_class (context);
3183 perform_or_defer_access_check (TYPE_BINFO (path),
3184 decl, decl);
3188 decl = convert_from_reference (decl);
3192 if (TREE_DEPRECATED (decl))
3193 warn_deprecated_use (decl, NULL_TREE);
3195 return decl;
3198 /* Implement the __typeof keyword: Return the type of EXPR, suitable for
3199 use as a type-specifier. */
3201 tree
3202 finish_typeof (tree expr)
3204 tree type;
3206 if (type_dependent_expression_p (expr))
3208 type = cxx_make_type (TYPEOF_TYPE);
3209 TYPEOF_TYPE_EXPR (type) = expr;
3210 SET_TYPE_STRUCTURAL_EQUALITY (type);
3212 return type;
3215 expr = mark_type_use (expr);
3217 type = unlowered_expr_type (expr);
3219 if (!type || type == unknown_type_node)
3221 error ("type of %qE is unknown", expr);
3222 return error_mark_node;
3225 return type;
3228 /* Perform C++-specific checks for __builtin_offsetof before calling
3229 fold_offsetof. */
3231 tree
3232 finish_offsetof (tree expr)
3234 if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
3236 error ("cannot apply %<offsetof%> to destructor %<~%T%>",
3237 TREE_OPERAND (expr, 2));
3238 return error_mark_node;
3240 if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
3241 || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
3242 || TREE_TYPE (expr) == unknown_type_node)
3244 if (TREE_CODE (expr) == COMPONENT_REF
3245 || TREE_CODE (expr) == COMPOUND_EXPR)
3246 expr = TREE_OPERAND (expr, 1);
3247 error ("cannot apply %<offsetof%> to member function %qD", expr);
3248 return error_mark_node;
3250 if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
3251 expr = TREE_OPERAND (expr, 0);
3252 return fold_offsetof (expr, NULL_TREE);
3255 /* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR. This
3256 function is broken out from the above for the benefit of the tree-ssa
3257 project. */
3259 void
3260 simplify_aggr_init_expr (tree *tp)
3262 tree aggr_init_expr = *tp;
3264 /* Form an appropriate CALL_EXPR. */
3265 tree fn = AGGR_INIT_EXPR_FN (aggr_init_expr);
3266 tree slot = AGGR_INIT_EXPR_SLOT (aggr_init_expr);
3267 tree type = TREE_TYPE (slot);
3269 tree call_expr;
3270 enum style_t { ctor, arg, pcc } style;
3272 if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
3273 style = ctor;
3274 #ifdef PCC_STATIC_STRUCT_RETURN
3275 else if (1)
3276 style = pcc;
3277 #endif
3278 else
3280 gcc_assert (TREE_ADDRESSABLE (type));
3281 style = arg;
3284 call_expr = build_call_array_loc (input_location,
3285 TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
3287 aggr_init_expr_nargs (aggr_init_expr),
3288 AGGR_INIT_EXPR_ARGP (aggr_init_expr));
3289 TREE_NOTHROW (call_expr) = TREE_NOTHROW (aggr_init_expr);
3291 if (style == ctor)
3293 /* Replace the first argument to the ctor with the address of the
3294 slot. */
3295 cxx_mark_addressable (slot);
3296 CALL_EXPR_ARG (call_expr, 0) =
3297 build1 (ADDR_EXPR, build_pointer_type (type), slot);
3299 else if (style == arg)
3301 /* Just mark it addressable here, and leave the rest to
3302 expand_call{,_inline}. */
3303 cxx_mark_addressable (slot);
3304 CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
3305 call_expr = build2 (INIT_EXPR, TREE_TYPE (call_expr), slot, call_expr);
3307 else if (style == pcc)
3309 /* If we're using the non-reentrant PCC calling convention, then we
3310 need to copy the returned value out of the static buffer into the
3311 SLOT. */
3312 push_deferring_access_checks (dk_no_check);
3313 call_expr = build_aggr_init (slot, call_expr,
3314 DIRECT_BIND | LOOKUP_ONLYCONVERTING,
3315 tf_warning_or_error);
3316 pop_deferring_access_checks ();
3317 call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
3320 if (AGGR_INIT_ZERO_FIRST (aggr_init_expr))
3322 tree init = build_zero_init (type, NULL_TREE,
3323 /*static_storage_p=*/false);
3324 init = build2 (INIT_EXPR, void_type_node, slot, init);
3325 call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (call_expr),
3326 init, call_expr);
3329 *tp = call_expr;
3332 /* Emit all thunks to FN that should be emitted when FN is emitted. */
3334 void
3335 emit_associated_thunks (tree fn)
3337 /* When we use vcall offsets, we emit thunks with the virtual
3338 functions to which they thunk. The whole point of vcall offsets
3339 is so that you can know statically the entire set of thunks that
3340 will ever be needed for a given virtual function, thereby
3341 enabling you to output all the thunks with the function itself. */
3342 if (DECL_VIRTUAL_P (fn)
3343 /* Do not emit thunks for extern template instantiations. */
3344 && ! DECL_REALLY_EXTERN (fn))
3346 tree thunk;
3348 for (thunk = DECL_THUNKS (fn); thunk; thunk = DECL_CHAIN (thunk))
3350 if (!THUNK_ALIAS (thunk))
3352 use_thunk (thunk, /*emit_p=*/1);
3353 if (DECL_RESULT_THUNK_P (thunk))
3355 tree probe;
3357 for (probe = DECL_THUNKS (thunk);
3358 probe; probe = DECL_CHAIN (probe))
3359 use_thunk (probe, /*emit_p=*/1);
3362 else
3363 gcc_assert (!DECL_THUNKS (thunk));
3368 /* Generate RTL for FN. */
3370 bool
3371 expand_or_defer_fn_1 (tree fn)
3373 /* When the parser calls us after finishing the body of a template
3374 function, we don't really want to expand the body. */
3375 if (processing_template_decl)
3377 /* Normally, collection only occurs in rest_of_compilation. So,
3378 if we don't collect here, we never collect junk generated
3379 during the processing of templates until we hit a
3380 non-template function. It's not safe to do this inside a
3381 nested class, though, as the parser may have local state that
3382 is not a GC root. */
3383 if (!function_depth)
3384 ggc_collect ();
3385 return false;
3388 gcc_assert (DECL_SAVED_TREE (fn));
3390 /* If this is a constructor or destructor body, we have to clone
3391 it. */
3392 if (maybe_clone_body (fn))
3394 /* We don't want to process FN again, so pretend we've written
3395 it out, even though we haven't. */
3396 TREE_ASM_WRITTEN (fn) = 1;
3397 DECL_SAVED_TREE (fn) = NULL_TREE;
3398 return false;
3401 /* We make a decision about linkage for these functions at the end
3402 of the compilation. Until that point, we do not want the back
3403 end to output them -- but we do want it to see the bodies of
3404 these functions so that it can inline them as appropriate. */
3405 if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3407 if (DECL_INTERFACE_KNOWN (fn))
3408 /* We've already made a decision as to how this function will
3409 be handled. */;
3410 else if (!at_eof)
3412 DECL_EXTERNAL (fn) = 1;
3413 DECL_NOT_REALLY_EXTERN (fn) = 1;
3414 note_vague_linkage_fn (fn);
3415 /* A non-template inline function with external linkage will
3416 always be COMDAT. As we must eventually determine the
3417 linkage of all functions, and as that causes writes to
3418 the data mapped in from the PCH file, it's advantageous
3419 to mark the functions at this point. */
3420 if (!DECL_IMPLICIT_INSTANTIATION (fn))
3422 /* This function must have external linkage, as
3423 otherwise DECL_INTERFACE_KNOWN would have been
3424 set. */
3425 gcc_assert (TREE_PUBLIC (fn));
3426 comdat_linkage (fn);
3427 DECL_INTERFACE_KNOWN (fn) = 1;
3430 else
3431 import_export_decl (fn);
3433 /* If the user wants us to keep all inline functions, then mark
3434 this function as needed so that finish_file will make sure to
3435 output it later. Similarly, all dllexport'd functions must
3436 be emitted; there may be callers in other DLLs. */
3437 if ((flag_keep_inline_functions
3438 && DECL_DECLARED_INLINE_P (fn)
3439 && !DECL_REALLY_EXTERN (fn))
3440 || lookup_attribute ("dllexport", DECL_ATTRIBUTES (fn)))
3441 mark_needed (fn);
3444 /* There's no reason to do any of the work here if we're only doing
3445 semantic analysis; this code just generates RTL. */
3446 if (flag_syntax_only)
3447 return false;
3449 return true;
3452 void
3453 expand_or_defer_fn (tree fn)
3455 if (expand_or_defer_fn_1 (fn))
3457 function_depth++;
3459 /* Expand or defer, at the whim of the compilation unit manager. */
3460 cgraph_finalize_function (fn, function_depth > 1);
3461 emit_associated_thunks (fn);
3463 function_depth--;
3467 struct nrv_data
3469 tree var;
3470 tree result;
3471 htab_t visited;
3474 /* Helper function for walk_tree, used by finalize_nrv below. */
3476 static tree
3477 finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
3479 struct nrv_data *dp = (struct nrv_data *)data;
3480 void **slot;
3482 /* No need to walk into types. There wouldn't be any need to walk into
3483 non-statements, except that we have to consider STMT_EXPRs. */
3484 if (TYPE_P (*tp))
3485 *walk_subtrees = 0;
3486 /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3487 but differs from using NULL_TREE in that it indicates that we care
3488 about the value of the RESULT_DECL. */
3489 else if (TREE_CODE (*tp) == RETURN_EXPR)
3490 TREE_OPERAND (*tp, 0) = dp->result;
3491 /* Change all cleanups for the NRV to only run when an exception is
3492 thrown. */
3493 else if (TREE_CODE (*tp) == CLEANUP_STMT
3494 && CLEANUP_DECL (*tp) == dp->var)
3495 CLEANUP_EH_ONLY (*tp) = 1;
3496 /* Replace the DECL_EXPR for the NRV with an initialization of the
3497 RESULT_DECL, if needed. */
3498 else if (TREE_CODE (*tp) == DECL_EXPR
3499 && DECL_EXPR_DECL (*tp) == dp->var)
3501 tree init;
3502 if (DECL_INITIAL (dp->var)
3503 && DECL_INITIAL (dp->var) != error_mark_node)
3504 init = build2 (INIT_EXPR, void_type_node, dp->result,
3505 DECL_INITIAL (dp->var));
3506 else
3507 init = build_empty_stmt (EXPR_LOCATION (*tp));
3508 DECL_INITIAL (dp->var) = NULL_TREE;
3509 SET_EXPR_LOCATION (init, EXPR_LOCATION (*tp));
3510 *tp = init;
3512 /* And replace all uses of the NRV with the RESULT_DECL. */
3513 else if (*tp == dp->var)
3514 *tp = dp->result;
3516 /* Avoid walking into the same tree more than once. Unfortunately, we
3517 can't just use walk_tree_without duplicates because it would only call
3518 us for the first occurrence of dp->var in the function body. */
3519 slot = htab_find_slot (dp->visited, *tp, INSERT);
3520 if (*slot)
3521 *walk_subtrees = 0;
3522 else
3523 *slot = *tp;
3525 /* Keep iterating. */
3526 return NULL_TREE;
3529 /* Called from finish_function to implement the named return value
3530 optimization by overriding all the RETURN_EXPRs and pertinent
3531 CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
3532 RESULT_DECL for the function. */
3534 void
3535 finalize_nrv (tree *tp, tree var, tree result)
3537 struct nrv_data data;
3539 /* Copy name from VAR to RESULT. */
3540 DECL_NAME (result) = DECL_NAME (var);
3541 /* Don't forget that we take its address. */
3542 TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
3543 /* Finally set DECL_VALUE_EXPR to avoid assigning
3544 a stack slot at -O0 for the original var and debug info
3545 uses RESULT location for VAR. */
3546 SET_DECL_VALUE_EXPR (var, result);
3547 DECL_HAS_VALUE_EXPR_P (var) = 1;
3549 data.var = var;
3550 data.result = result;
3551 data.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
3552 cp_walk_tree (tp, finalize_nrv_r, &data, 0);
3553 htab_delete (data.visited);
3556 /* Create CP_OMP_CLAUSE_INFO for clause C. Returns true if it is invalid. */
3558 bool
3559 cxx_omp_create_clause_info (tree c, tree type, bool need_default_ctor,
3560 bool need_copy_ctor, bool need_copy_assignment)
3562 int save_errorcount = errorcount;
3563 tree info, t;
3565 /* Always allocate 3 elements for simplicity. These are the
3566 function decls for the ctor, dtor, and assignment op.
3567 This layout is known to the three lang hooks,
3568 cxx_omp_clause_default_init, cxx_omp_clause_copy_init,
3569 and cxx_omp_clause_assign_op. */
3570 info = make_tree_vec (3);
3571 CP_OMP_CLAUSE_INFO (c) = info;
3573 if (need_default_ctor || need_copy_ctor)
3575 if (need_default_ctor)
3576 t = get_default_ctor (type);
3577 else
3578 t = get_copy_ctor (type);
3580 if (t && !trivial_fn_p (t))
3581 TREE_VEC_ELT (info, 0) = t;
3584 if ((need_default_ctor || need_copy_ctor)
3585 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3586 TREE_VEC_ELT (info, 1) = get_dtor (type);
3588 if (need_copy_assignment)
3590 t = get_copy_assign (type);
3592 if (t && !trivial_fn_p (t))
3593 TREE_VEC_ELT (info, 2) = t;
3596 return errorcount != save_errorcount;
3599 /* For all elements of CLAUSES, validate them vs OpenMP constraints.
3600 Remove any elements from the list that are invalid. */
3602 tree
3603 finish_omp_clauses (tree clauses)
3605 bitmap_head generic_head, firstprivate_head, lastprivate_head;
3606 tree c, t, *pc = &clauses;
3607 const char *name;
3609 bitmap_obstack_initialize (NULL);
3610 bitmap_initialize (&generic_head, &bitmap_default_obstack);
3611 bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
3612 bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
3614 for (pc = &clauses, c = clauses; c ; c = *pc)
3616 bool remove = false;
3618 switch (OMP_CLAUSE_CODE (c))
3620 case OMP_CLAUSE_SHARED:
3621 name = "shared";
3622 goto check_dup_generic;
3623 case OMP_CLAUSE_PRIVATE:
3624 name = "private";
3625 goto check_dup_generic;
3626 case OMP_CLAUSE_REDUCTION:
3627 name = "reduction";
3628 goto check_dup_generic;
3629 case OMP_CLAUSE_COPYPRIVATE:
3630 name = "copyprivate";
3631 goto check_dup_generic;
3632 case OMP_CLAUSE_COPYIN:
3633 name = "copyin";
3634 goto check_dup_generic;
3635 check_dup_generic:
3636 t = OMP_CLAUSE_DECL (c);
3637 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3639 if (processing_template_decl)
3640 break;
3641 if (DECL_P (t))
3642 error ("%qD is not a variable in clause %qs", t, name);
3643 else
3644 error ("%qE is not a variable in clause %qs", t, name);
3645 remove = true;
3647 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3648 || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
3649 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3651 error ("%qD appears more than once in data clauses", t);
3652 remove = true;
3654 else
3655 bitmap_set_bit (&generic_head, DECL_UID (t));
3656 break;
3658 case OMP_CLAUSE_FIRSTPRIVATE:
3659 t = OMP_CLAUSE_DECL (c);
3660 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3662 if (processing_template_decl)
3663 break;
3664 if (DECL_P (t))
3665 error ("%qD is not a variable in clause %<firstprivate%>", t);
3666 else
3667 error ("%qE is not a variable in clause %<firstprivate%>", t);
3668 remove = true;
3670 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3671 || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3673 error ("%qD appears more than once in data clauses", t);
3674 remove = true;
3676 else
3677 bitmap_set_bit (&firstprivate_head, DECL_UID (t));
3678 break;
3680 case OMP_CLAUSE_LASTPRIVATE:
3681 t = OMP_CLAUSE_DECL (c);
3682 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3684 if (processing_template_decl)
3685 break;
3686 if (DECL_P (t))
3687 error ("%qD is not a variable in clause %<lastprivate%>", t);
3688 else
3689 error ("%qE is not a variable in clause %<lastprivate%>", t);
3690 remove = true;
3692 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3693 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3695 error ("%qD appears more than once in data clauses", t);
3696 remove = true;
3698 else
3699 bitmap_set_bit (&lastprivate_head, DECL_UID (t));
3700 break;
3702 case OMP_CLAUSE_IF:
3703 t = OMP_CLAUSE_IF_EXPR (c);
3704 t = maybe_convert_cond (t);
3705 if (t == error_mark_node)
3706 remove = true;
3707 OMP_CLAUSE_IF_EXPR (c) = t;
3708 break;
3710 case OMP_CLAUSE_NUM_THREADS:
3711 t = OMP_CLAUSE_NUM_THREADS_EXPR (c);
3712 if (t == error_mark_node)
3713 remove = true;
3714 else if (!type_dependent_expression_p (t)
3715 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
3717 error ("num_threads expression must be integral");
3718 remove = true;
3720 break;
3722 case OMP_CLAUSE_SCHEDULE:
3723 t = OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c);
3724 if (t == NULL)
3726 else if (t == error_mark_node)
3727 remove = true;
3728 else if (!type_dependent_expression_p (t)
3729 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
3731 error ("schedule chunk size expression must be integral");
3732 remove = true;
3734 break;
3736 case OMP_CLAUSE_NOWAIT:
3737 case OMP_CLAUSE_ORDERED:
3738 case OMP_CLAUSE_DEFAULT:
3739 case OMP_CLAUSE_UNTIED:
3740 case OMP_CLAUSE_COLLAPSE:
3741 break;
3743 default:
3744 gcc_unreachable ();
3747 if (remove)
3748 *pc = OMP_CLAUSE_CHAIN (c);
3749 else
3750 pc = &OMP_CLAUSE_CHAIN (c);
3753 for (pc = &clauses, c = clauses; c ; c = *pc)
3755 enum omp_clause_code c_kind = OMP_CLAUSE_CODE (c);
3756 bool remove = false;
3757 bool need_complete_non_reference = false;
3758 bool need_default_ctor = false;
3759 bool need_copy_ctor = false;
3760 bool need_copy_assignment = false;
3761 bool need_implicitly_determined = false;
3762 tree type, inner_type;
3764 switch (c_kind)
3766 case OMP_CLAUSE_SHARED:
3767 name = "shared";
3768 need_implicitly_determined = true;
3769 break;
3770 case OMP_CLAUSE_PRIVATE:
3771 name = "private";
3772 need_complete_non_reference = true;
3773 need_default_ctor = true;
3774 need_implicitly_determined = true;
3775 break;
3776 case OMP_CLAUSE_FIRSTPRIVATE:
3777 name = "firstprivate";
3778 need_complete_non_reference = true;
3779 need_copy_ctor = true;
3780 need_implicitly_determined = true;
3781 break;
3782 case OMP_CLAUSE_LASTPRIVATE:
3783 name = "lastprivate";
3784 need_complete_non_reference = true;
3785 need_copy_assignment = true;
3786 need_implicitly_determined = true;
3787 break;
3788 case OMP_CLAUSE_REDUCTION:
3789 name = "reduction";
3790 need_implicitly_determined = true;
3791 break;
3792 case OMP_CLAUSE_COPYPRIVATE:
3793 name = "copyprivate";
3794 need_copy_assignment = true;
3795 break;
3796 case OMP_CLAUSE_COPYIN:
3797 name = "copyin";
3798 need_copy_assignment = true;
3799 break;
3800 default:
3801 pc = &OMP_CLAUSE_CHAIN (c);
3802 continue;
3805 t = OMP_CLAUSE_DECL (c);
3806 if (processing_template_decl
3807 && TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3809 pc = &OMP_CLAUSE_CHAIN (c);
3810 continue;
3813 switch (c_kind)
3815 case OMP_CLAUSE_LASTPRIVATE:
3816 if (!bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3817 need_default_ctor = true;
3818 break;
3820 case OMP_CLAUSE_REDUCTION:
3821 if (AGGREGATE_TYPE_P (TREE_TYPE (t))
3822 || POINTER_TYPE_P (TREE_TYPE (t)))
3824 error ("%qE has invalid type for %<reduction%>", t);
3825 remove = true;
3827 else if (FLOAT_TYPE_P (TREE_TYPE (t)))
3829 enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
3830 switch (r_code)
3832 case PLUS_EXPR:
3833 case MULT_EXPR:
3834 case MINUS_EXPR:
3835 break;
3836 default:
3837 error ("%qE has invalid type for %<reduction(%s)%>",
3838 t, operator_name_info[r_code].name);
3839 remove = true;
3842 break;
3844 case OMP_CLAUSE_COPYIN:
3845 if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
3847 error ("%qE must be %<threadprivate%> for %<copyin%>", t);
3848 remove = true;
3850 break;
3852 default:
3853 break;
3856 if (need_complete_non_reference)
3858 t = require_complete_type (t);
3859 if (t == error_mark_node)
3860 remove = true;
3861 else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
3863 error ("%qE has reference type for %qs", t, name);
3864 remove = true;
3867 if (need_implicitly_determined)
3869 const char *share_name = NULL;
3871 if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
3872 share_name = "threadprivate";
3873 else switch (cxx_omp_predetermined_sharing (t))
3875 case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
3876 break;
3877 case OMP_CLAUSE_DEFAULT_SHARED:
3878 share_name = "shared";
3879 break;
3880 case OMP_CLAUSE_DEFAULT_PRIVATE:
3881 share_name = "private";
3882 break;
3883 default:
3884 gcc_unreachable ();
3886 if (share_name)
3888 error ("%qE is predetermined %qs for %qs",
3889 t, share_name, name);
3890 remove = true;
3894 /* We're interested in the base element, not arrays. */
3895 inner_type = type = TREE_TYPE (t);
3896 while (TREE_CODE (inner_type) == ARRAY_TYPE)
3897 inner_type = TREE_TYPE (inner_type);
3899 /* Check for special function availability by building a call to one.
3900 Save the results, because later we won't be in the right context
3901 for making these queries. */
3902 if (CLASS_TYPE_P (inner_type)
3903 && (need_default_ctor || need_copy_ctor || need_copy_assignment)
3904 && !type_dependent_expression_p (t)
3905 && cxx_omp_create_clause_info (c, inner_type, need_default_ctor,
3906 need_copy_ctor, need_copy_assignment))
3907 remove = true;
3909 if (remove)
3910 *pc = OMP_CLAUSE_CHAIN (c);
3911 else
3912 pc = &OMP_CLAUSE_CHAIN (c);
3915 bitmap_obstack_release (NULL);
3916 return clauses;
3919 /* For all variables in the tree_list VARS, mark them as thread local. */
3921 void
3922 finish_omp_threadprivate (tree vars)
3924 tree t;
3926 /* Mark every variable in VARS to be assigned thread local storage. */
3927 for (t = vars; t; t = TREE_CHAIN (t))
3929 tree v = TREE_PURPOSE (t);
3931 if (error_operand_p (v))
3933 else if (TREE_CODE (v) != VAR_DECL)
3934 error ("%<threadprivate%> %qD is not file, namespace "
3935 "or block scope variable", v);
3936 /* If V had already been marked threadprivate, it doesn't matter
3937 whether it had been used prior to this point. */
3938 else if (TREE_USED (v)
3939 && (DECL_LANG_SPECIFIC (v) == NULL
3940 || !CP_DECL_THREADPRIVATE_P (v)))
3941 error ("%qE declared %<threadprivate%> after first use", v);
3942 else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
3943 error ("automatic variable %qE cannot be %<threadprivate%>", v);
3944 else if (! COMPLETE_TYPE_P (TREE_TYPE (v)))
3945 error ("%<threadprivate%> %qE has incomplete type", v);
3946 else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v))
3947 && CP_DECL_CONTEXT (v) != current_class_type)
3948 error ("%<threadprivate%> %qE directive not "
3949 "in %qT definition", v, CP_DECL_CONTEXT (v));
3950 else
3952 /* Allocate a LANG_SPECIFIC structure for V, if needed. */
3953 if (DECL_LANG_SPECIFIC (v) == NULL)
3955 retrofit_lang_decl (v);
3957 /* Make sure that DECL_DISCRIMINATOR_P continues to be true
3958 after the allocation of the lang_decl structure. */
3959 if (DECL_DISCRIMINATOR_P (v))
3960 DECL_LANG_SPECIFIC (v)->u.base.u2sel = 1;
3963 if (! DECL_THREAD_LOCAL_P (v))
3965 DECL_TLS_MODEL (v) = decl_default_tls_model (v);
3966 /* If rtl has been already set for this var, call
3967 make_decl_rtl once again, so that encode_section_info
3968 has a chance to look at the new decl flags. */
3969 if (DECL_RTL_SET_P (v))
3970 make_decl_rtl (v);
3972 CP_DECL_THREADPRIVATE_P (v) = 1;
3977 /* Build an OpenMP structured block. */
3979 tree
3980 begin_omp_structured_block (void)
3982 return do_pushlevel (sk_omp);
3985 tree
3986 finish_omp_structured_block (tree block)
3988 return do_poplevel (block);
3991 /* Similarly, except force the retention of the BLOCK. */
3993 tree
3994 begin_omp_parallel (void)
3996 keep_next_level (true);
3997 return begin_omp_structured_block ();
4000 tree
4001 finish_omp_parallel (tree clauses, tree body)
4003 tree stmt;
4005 body = finish_omp_structured_block (body);
4007 stmt = make_node (OMP_PARALLEL);
4008 TREE_TYPE (stmt) = void_type_node;
4009 OMP_PARALLEL_CLAUSES (stmt) = clauses;
4010 OMP_PARALLEL_BODY (stmt) = body;
4012 return add_stmt (stmt);
4015 tree
4016 begin_omp_task (void)
4018 keep_next_level (true);
4019 return begin_omp_structured_block ();
4022 tree
4023 finish_omp_task (tree clauses, tree body)
4025 tree stmt;
4027 body = finish_omp_structured_block (body);
4029 stmt = make_node (OMP_TASK);
4030 TREE_TYPE (stmt) = void_type_node;
4031 OMP_TASK_CLAUSES (stmt) = clauses;
4032 OMP_TASK_BODY (stmt) = body;
4034 return add_stmt (stmt);
4037 /* Helper function for finish_omp_for. Convert Ith random access iterator
4038 into integral iterator. Return FALSE if successful. */
4040 static bool
4041 handle_omp_for_class_iterator (int i, location_t locus, tree declv, tree initv,
4042 tree condv, tree incrv, tree *body,
4043 tree *pre_body, tree clauses)
4045 tree diff, iter_init, iter_incr = NULL, last;
4046 tree incr_var = NULL, orig_pre_body, orig_body, c;
4047 tree decl = TREE_VEC_ELT (declv, i);
4048 tree init = TREE_VEC_ELT (initv, i);
4049 tree cond = TREE_VEC_ELT (condv, i);
4050 tree incr = TREE_VEC_ELT (incrv, i);
4051 tree iter = decl;
4052 location_t elocus = locus;
4054 if (init && EXPR_HAS_LOCATION (init))
4055 elocus = EXPR_LOCATION (init);
4057 switch (TREE_CODE (cond))
4059 case GT_EXPR:
4060 case GE_EXPR:
4061 case LT_EXPR:
4062 case LE_EXPR:
4063 if (TREE_OPERAND (cond, 1) == iter)
4064 cond = build2 (swap_tree_comparison (TREE_CODE (cond)),
4065 TREE_TYPE (cond), iter, TREE_OPERAND (cond, 0));
4066 if (TREE_OPERAND (cond, 0) != iter)
4067 cond = error_mark_node;
4068 else
4070 tree tem = build_x_binary_op (TREE_CODE (cond), iter, ERROR_MARK,
4071 TREE_OPERAND (cond, 1), ERROR_MARK,
4072 NULL, tf_warning_or_error);
4073 if (error_operand_p (tem))
4074 return true;
4076 break;
4077 default:
4078 cond = error_mark_node;
4079 break;
4081 if (cond == error_mark_node)
4083 error_at (elocus, "invalid controlling predicate");
4084 return true;
4086 diff = build_x_binary_op (MINUS_EXPR, TREE_OPERAND (cond, 1),
4087 ERROR_MARK, iter, ERROR_MARK, NULL,
4088 tf_warning_or_error);
4089 if (error_operand_p (diff))
4090 return true;
4091 if (TREE_CODE (TREE_TYPE (diff)) != INTEGER_TYPE)
4093 error_at (elocus, "difference between %qE and %qD does not have integer type",
4094 TREE_OPERAND (cond, 1), iter);
4095 return true;
4098 switch (TREE_CODE (incr))
4100 case PREINCREMENT_EXPR:
4101 case PREDECREMENT_EXPR:
4102 case POSTINCREMENT_EXPR:
4103 case POSTDECREMENT_EXPR:
4104 if (TREE_OPERAND (incr, 0) != iter)
4106 incr = error_mark_node;
4107 break;
4109 iter_incr = build_x_unary_op (TREE_CODE (incr), iter,
4110 tf_warning_or_error);
4111 if (error_operand_p (iter_incr))
4112 return true;
4113 else if (TREE_CODE (incr) == PREINCREMENT_EXPR
4114 || TREE_CODE (incr) == POSTINCREMENT_EXPR)
4115 incr = integer_one_node;
4116 else
4117 incr = integer_minus_one_node;
4118 break;
4119 case MODIFY_EXPR:
4120 if (TREE_OPERAND (incr, 0) != iter)
4121 incr = error_mark_node;
4122 else if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
4123 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
4125 tree rhs = TREE_OPERAND (incr, 1);
4126 if (TREE_OPERAND (rhs, 0) == iter)
4128 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 1)))
4129 != INTEGER_TYPE)
4130 incr = error_mark_node;
4131 else
4133 iter_incr = build_x_modify_expr (iter, TREE_CODE (rhs),
4134 TREE_OPERAND (rhs, 1),
4135 tf_warning_or_error);
4136 if (error_operand_p (iter_incr))
4137 return true;
4138 incr = TREE_OPERAND (rhs, 1);
4139 incr = cp_convert (TREE_TYPE (diff), incr);
4140 if (TREE_CODE (rhs) == MINUS_EXPR)
4142 incr = build1 (NEGATE_EXPR, TREE_TYPE (diff), incr);
4143 incr = fold_if_not_in_template (incr);
4145 if (TREE_CODE (incr) != INTEGER_CST
4146 && (TREE_CODE (incr) != NOP_EXPR
4147 || (TREE_CODE (TREE_OPERAND (incr, 0))
4148 != INTEGER_CST)))
4149 iter_incr = NULL;
4152 else if (TREE_OPERAND (rhs, 1) == iter)
4154 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 0))) != INTEGER_TYPE
4155 || TREE_CODE (rhs) != PLUS_EXPR)
4156 incr = error_mark_node;
4157 else
4159 iter_incr = build_x_binary_op (PLUS_EXPR,
4160 TREE_OPERAND (rhs, 0),
4161 ERROR_MARK, iter,
4162 ERROR_MARK, NULL,
4163 tf_warning_or_error);
4164 if (error_operand_p (iter_incr))
4165 return true;
4166 iter_incr = build_x_modify_expr (iter, NOP_EXPR,
4167 iter_incr,
4168 tf_warning_or_error);
4169 if (error_operand_p (iter_incr))
4170 return true;
4171 incr = TREE_OPERAND (rhs, 0);
4172 iter_incr = NULL;
4175 else
4176 incr = error_mark_node;
4178 else
4179 incr = error_mark_node;
4180 break;
4181 default:
4182 incr = error_mark_node;
4183 break;
4186 if (incr == error_mark_node)
4188 error_at (elocus, "invalid increment expression");
4189 return true;
4192 incr = cp_convert (TREE_TYPE (diff), incr);
4193 for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
4194 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
4195 && OMP_CLAUSE_DECL (c) == iter)
4196 break;
4198 decl = create_temporary_var (TREE_TYPE (diff));
4199 pushdecl (decl);
4200 add_decl_expr (decl);
4201 last = create_temporary_var (TREE_TYPE (diff));
4202 pushdecl (last);
4203 add_decl_expr (last);
4204 if (c && iter_incr == NULL)
4206 incr_var = create_temporary_var (TREE_TYPE (diff));
4207 pushdecl (incr_var);
4208 add_decl_expr (incr_var);
4210 gcc_assert (stmts_are_full_exprs_p ());
4212 orig_pre_body = *pre_body;
4213 *pre_body = push_stmt_list ();
4214 if (orig_pre_body)
4215 add_stmt (orig_pre_body);
4216 if (init != NULL)
4217 finish_expr_stmt (build_x_modify_expr (iter, NOP_EXPR, init,
4218 tf_warning_or_error));
4219 init = build_int_cst (TREE_TYPE (diff), 0);
4220 if (c && iter_incr == NULL)
4222 finish_expr_stmt (build_x_modify_expr (incr_var, NOP_EXPR,
4223 incr, tf_warning_or_error));
4224 incr = incr_var;
4225 iter_incr = build_x_modify_expr (iter, PLUS_EXPR, incr,
4226 tf_warning_or_error);
4228 finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, init,
4229 tf_warning_or_error));
4230 *pre_body = pop_stmt_list (*pre_body);
4232 cond = cp_build_binary_op (elocus,
4233 TREE_CODE (cond), decl, diff,
4234 tf_warning_or_error);
4235 incr = build_modify_expr (elocus, decl, NULL_TREE, PLUS_EXPR,
4236 elocus, incr, NULL_TREE);
4238 orig_body = *body;
4239 *body = push_stmt_list ();
4240 iter_init = build2 (MINUS_EXPR, TREE_TYPE (diff), decl, last);
4241 iter_init = build_x_modify_expr (iter, PLUS_EXPR, iter_init,
4242 tf_warning_or_error);
4243 iter_init = build1 (NOP_EXPR, void_type_node, iter_init);
4244 finish_expr_stmt (iter_init);
4245 finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, decl,
4246 tf_warning_or_error));
4247 add_stmt (orig_body);
4248 *body = pop_stmt_list (*body);
4250 if (c)
4252 OMP_CLAUSE_LASTPRIVATE_STMT (c) = push_stmt_list ();
4253 finish_expr_stmt (iter_incr);
4254 OMP_CLAUSE_LASTPRIVATE_STMT (c)
4255 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (c));
4258 TREE_VEC_ELT (declv, i) = decl;
4259 TREE_VEC_ELT (initv, i) = init;
4260 TREE_VEC_ELT (condv, i) = cond;
4261 TREE_VEC_ELT (incrv, i) = incr;
4263 return false;
4266 /* Build and validate an OMP_FOR statement. CLAUSES, BODY, COND, INCR
4267 are directly for their associated operands in the statement. DECL
4268 and INIT are a combo; if DECL is NULL then INIT ought to be a
4269 MODIFY_EXPR, and the DECL should be extracted. PRE_BODY are
4270 optional statements that need to go before the loop into its
4271 sk_omp scope. */
4273 tree
4274 finish_omp_for (location_t locus, tree declv, tree initv, tree condv,
4275 tree incrv, tree body, tree pre_body, tree clauses)
4277 tree omp_for = NULL, orig_incr = NULL;
4278 tree decl, init, cond, incr;
4279 location_t elocus;
4280 int i;
4282 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (initv));
4283 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (condv));
4284 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (incrv));
4285 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4287 decl = TREE_VEC_ELT (declv, i);
4288 init = TREE_VEC_ELT (initv, i);
4289 cond = TREE_VEC_ELT (condv, i);
4290 incr = TREE_VEC_ELT (incrv, i);
4291 elocus = locus;
4293 if (decl == NULL)
4295 if (init != NULL)
4296 switch (TREE_CODE (init))
4298 case MODIFY_EXPR:
4299 decl = TREE_OPERAND (init, 0);
4300 init = TREE_OPERAND (init, 1);
4301 break;
4302 case MODOP_EXPR:
4303 if (TREE_CODE (TREE_OPERAND (init, 1)) == NOP_EXPR)
4305 decl = TREE_OPERAND (init, 0);
4306 init = TREE_OPERAND (init, 2);
4308 break;
4309 default:
4310 break;
4313 if (decl == NULL)
4315 error_at (locus,
4316 "expected iteration declaration or initialization");
4317 return NULL;
4321 if (init && EXPR_HAS_LOCATION (init))
4322 elocus = EXPR_LOCATION (init);
4324 if (cond == NULL)
4326 error_at (elocus, "missing controlling predicate");
4327 return NULL;
4330 if (incr == NULL)
4332 error_at (elocus, "missing increment expression");
4333 return NULL;
4336 TREE_VEC_ELT (declv, i) = decl;
4337 TREE_VEC_ELT (initv, i) = init;
4340 if (dependent_omp_for_p (declv, initv, condv, incrv))
4342 tree stmt;
4344 stmt = make_node (OMP_FOR);
4346 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4348 /* This is really just a place-holder. We'll be decomposing this
4349 again and going through the cp_build_modify_expr path below when
4350 we instantiate the thing. */
4351 TREE_VEC_ELT (initv, i)
4352 = build2 (MODIFY_EXPR, void_type_node, TREE_VEC_ELT (declv, i),
4353 TREE_VEC_ELT (initv, i));
4356 TREE_TYPE (stmt) = void_type_node;
4357 OMP_FOR_INIT (stmt) = initv;
4358 OMP_FOR_COND (stmt) = condv;
4359 OMP_FOR_INCR (stmt) = incrv;
4360 OMP_FOR_BODY (stmt) = body;
4361 OMP_FOR_PRE_BODY (stmt) = pre_body;
4362 OMP_FOR_CLAUSES (stmt) = clauses;
4364 SET_EXPR_LOCATION (stmt, locus);
4365 return add_stmt (stmt);
4368 if (processing_template_decl)
4369 orig_incr = make_tree_vec (TREE_VEC_LENGTH (incrv));
4371 for (i = 0; i < TREE_VEC_LENGTH (declv); )
4373 decl = TREE_VEC_ELT (declv, i);
4374 init = TREE_VEC_ELT (initv, i);
4375 cond = TREE_VEC_ELT (condv, i);
4376 incr = TREE_VEC_ELT (incrv, i);
4377 if (orig_incr)
4378 TREE_VEC_ELT (orig_incr, i) = incr;
4379 elocus = locus;
4381 if (init && EXPR_HAS_LOCATION (init))
4382 elocus = EXPR_LOCATION (init);
4384 if (!DECL_P (decl))
4386 error_at (elocus, "expected iteration declaration or initialization");
4387 return NULL;
4390 if (incr && TREE_CODE (incr) == MODOP_EXPR)
4392 if (orig_incr)
4393 TREE_VEC_ELT (orig_incr, i) = incr;
4394 incr = cp_build_modify_expr (TREE_OPERAND (incr, 0),
4395 TREE_CODE (TREE_OPERAND (incr, 1)),
4396 TREE_OPERAND (incr, 2),
4397 tf_warning_or_error);
4400 if (CLASS_TYPE_P (TREE_TYPE (decl)))
4402 if (handle_omp_for_class_iterator (i, locus, declv, initv, condv,
4403 incrv, &body, &pre_body, clauses))
4404 return NULL;
4405 continue;
4408 if (!INTEGRAL_TYPE_P (TREE_TYPE (decl))
4409 && TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
4411 error_at (elocus, "invalid type for iteration variable %qE", decl);
4412 return NULL;
4415 if (!processing_template_decl)
4417 init = fold_build_cleanup_point_expr (TREE_TYPE (init), init);
4418 init = cp_build_modify_expr (decl, NOP_EXPR, init, tf_warning_or_error);
4420 else
4421 init = build2 (MODIFY_EXPR, void_type_node, decl, init);
4422 if (cond
4423 && TREE_SIDE_EFFECTS (cond)
4424 && COMPARISON_CLASS_P (cond)
4425 && !processing_template_decl)
4427 tree t = TREE_OPERAND (cond, 0);
4428 if (TREE_SIDE_EFFECTS (t)
4429 && t != decl
4430 && (TREE_CODE (t) != NOP_EXPR
4431 || TREE_OPERAND (t, 0) != decl))
4432 TREE_OPERAND (cond, 0)
4433 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4435 t = TREE_OPERAND (cond, 1);
4436 if (TREE_SIDE_EFFECTS (t)
4437 && t != decl
4438 && (TREE_CODE (t) != NOP_EXPR
4439 || TREE_OPERAND (t, 0) != decl))
4440 TREE_OPERAND (cond, 1)
4441 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4443 if (decl == error_mark_node || init == error_mark_node)
4444 return NULL;
4446 TREE_VEC_ELT (declv, i) = decl;
4447 TREE_VEC_ELT (initv, i) = init;
4448 TREE_VEC_ELT (condv, i) = cond;
4449 TREE_VEC_ELT (incrv, i) = incr;
4450 i++;
4453 if (IS_EMPTY_STMT (pre_body))
4454 pre_body = NULL;
4456 omp_for = c_finish_omp_for (locus, declv, initv, condv, incrv,
4457 body, pre_body);
4459 if (omp_for == NULL)
4460 return NULL;
4462 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INCR (omp_for)); i++)
4464 decl = TREE_OPERAND (TREE_VEC_ELT (OMP_FOR_INIT (omp_for), i), 0);
4465 incr = TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i);
4467 if (TREE_CODE (incr) != MODIFY_EXPR)
4468 continue;
4470 if (TREE_SIDE_EFFECTS (TREE_OPERAND (incr, 1))
4471 && BINARY_CLASS_P (TREE_OPERAND (incr, 1))
4472 && !processing_template_decl)
4474 tree t = TREE_OPERAND (TREE_OPERAND (incr, 1), 0);
4475 if (TREE_SIDE_EFFECTS (t)
4476 && t != decl
4477 && (TREE_CODE (t) != NOP_EXPR
4478 || TREE_OPERAND (t, 0) != decl))
4479 TREE_OPERAND (TREE_OPERAND (incr, 1), 0)
4480 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4482 t = TREE_OPERAND (TREE_OPERAND (incr, 1), 1);
4483 if (TREE_SIDE_EFFECTS (t)
4484 && t != decl
4485 && (TREE_CODE (t) != NOP_EXPR
4486 || TREE_OPERAND (t, 0) != decl))
4487 TREE_OPERAND (TREE_OPERAND (incr, 1), 1)
4488 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4491 if (orig_incr)
4492 TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i) = TREE_VEC_ELT (orig_incr, i);
4494 if (omp_for != NULL)
4495 OMP_FOR_CLAUSES (omp_for) = clauses;
4496 return omp_for;
4499 void
4500 finish_omp_atomic (enum tree_code code, tree lhs, tree rhs)
4502 tree orig_lhs;
4503 tree orig_rhs;
4504 bool dependent_p;
4505 tree stmt;
4507 orig_lhs = lhs;
4508 orig_rhs = rhs;
4509 dependent_p = false;
4510 stmt = NULL_TREE;
4512 /* Even in a template, we can detect invalid uses of the atomic
4513 pragma if neither LHS nor RHS is type-dependent. */
4514 if (processing_template_decl)
4516 dependent_p = (type_dependent_expression_p (lhs)
4517 || type_dependent_expression_p (rhs));
4518 if (!dependent_p)
4520 lhs = build_non_dependent_expr (lhs);
4521 rhs = build_non_dependent_expr (rhs);
4524 if (!dependent_p)
4526 stmt = c_finish_omp_atomic (input_location, code, lhs, rhs);
4527 if (stmt == error_mark_node)
4528 return;
4530 if (processing_template_decl)
4531 stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node,
4532 build2 (code, void_type_node, orig_lhs, orig_rhs));
4533 add_stmt (stmt);
4536 void
4537 finish_omp_barrier (void)
4539 tree fn = built_in_decls[BUILT_IN_GOMP_BARRIER];
4540 VEC(tree,gc) *vec = make_tree_vector ();
4541 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4542 release_tree_vector (vec);
4543 finish_expr_stmt (stmt);
4546 void
4547 finish_omp_flush (void)
4549 tree fn = built_in_decls[BUILT_IN_SYNCHRONIZE];
4550 VEC(tree,gc) *vec = make_tree_vector ();
4551 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4552 release_tree_vector (vec);
4553 finish_expr_stmt (stmt);
4556 void
4557 finish_omp_taskwait (void)
4559 tree fn = built_in_decls[BUILT_IN_GOMP_TASKWAIT];
4560 VEC(tree,gc) *vec = make_tree_vector ();
4561 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4562 release_tree_vector (vec);
4563 finish_expr_stmt (stmt);
4566 void
4567 init_cp_semantics (void)
4571 /* Build a STATIC_ASSERT for a static assertion with the condition
4572 CONDITION and the message text MESSAGE. LOCATION is the location
4573 of the static assertion in the source code. When MEMBER_P, this
4574 static assertion is a member of a class. */
4575 void
4576 finish_static_assert (tree condition, tree message, location_t location,
4577 bool member_p)
4579 if (check_for_bare_parameter_packs (condition))
4580 condition = error_mark_node;
4582 if (type_dependent_expression_p (condition)
4583 || value_dependent_expression_p (condition))
4585 /* We're in a template; build a STATIC_ASSERT and put it in
4586 the right place. */
4587 tree assertion;
4589 assertion = make_node (STATIC_ASSERT);
4590 STATIC_ASSERT_CONDITION (assertion) = condition;
4591 STATIC_ASSERT_MESSAGE (assertion) = message;
4592 STATIC_ASSERT_SOURCE_LOCATION (assertion) = location;
4594 if (member_p)
4595 maybe_add_class_template_decl_list (current_class_type,
4596 assertion,
4597 /*friend_p=*/0);
4598 else
4599 add_stmt (assertion);
4601 return;
4604 /* Fold the expression and convert it to a boolean value. */
4605 condition = fold_non_dependent_expr (condition);
4606 condition = cp_convert (boolean_type_node, condition);
4608 if (TREE_CODE (condition) == INTEGER_CST && !integer_zerop (condition))
4609 /* Do nothing; the condition is satisfied. */
4611 else
4613 location_t saved_loc = input_location;
4615 input_location = location;
4616 if (TREE_CODE (condition) == INTEGER_CST
4617 && integer_zerop (condition))
4618 /* Report the error. */
4619 error ("static assertion failed: %E", message);
4620 else if (condition && condition != error_mark_node)
4621 error ("non-constant condition for static assertion");
4622 input_location = saved_loc;
4626 /* Returns the type of EXPR for cases where we can determine it even though
4627 EXPR is a type-dependent expression. */
4629 tree
4630 describable_type (tree expr)
4632 tree type = NULL_TREE;
4634 if (! type_dependent_expression_p (expr)
4635 && ! type_unknown_p (expr))
4637 type = unlowered_expr_type (expr);
4638 if (real_lvalue_p (expr))
4639 type = build_reference_type (type);
4642 if (type)
4643 return type;
4645 switch (TREE_CODE (expr))
4647 case VAR_DECL:
4648 case PARM_DECL:
4649 case RESULT_DECL:
4650 case FUNCTION_DECL:
4651 return TREE_TYPE (expr);
4652 break;
4654 case NEW_EXPR:
4655 case CONST_DECL:
4656 case TEMPLATE_PARM_INDEX:
4657 case CAST_EXPR:
4658 case STATIC_CAST_EXPR:
4659 case REINTERPRET_CAST_EXPR:
4660 case CONST_CAST_EXPR:
4661 case DYNAMIC_CAST_EXPR:
4662 type = TREE_TYPE (expr);
4663 break;
4665 case INDIRECT_REF:
4667 tree ptrtype = describable_type (TREE_OPERAND (expr, 0));
4668 if (ptrtype && POINTER_TYPE_P (ptrtype))
4669 type = build_reference_type (TREE_TYPE (ptrtype));
4671 break;
4673 default:
4674 if (TREE_CODE_CLASS (TREE_CODE (expr)) == tcc_constant)
4675 type = TREE_TYPE (expr);
4676 break;
4679 if (type && type_uses_auto (type))
4680 return NULL_TREE;
4681 else
4682 return type;
4685 /* Implements the C++0x decltype keyword. Returns the type of EXPR,
4686 suitable for use as a type-specifier.
4688 ID_EXPRESSION_OR_MEMBER_ACCESS_P is true when EXPR was parsed as an
4689 id-expression or a class member access, FALSE when it was parsed as
4690 a full expression. */
4692 tree
4693 finish_decltype_type (tree expr, bool id_expression_or_member_access_p)
4695 tree orig_expr = expr;
4696 tree type = NULL_TREE;
4698 if (!expr || error_operand_p (expr))
4699 return error_mark_node;
4701 if (TYPE_P (expr)
4702 || TREE_CODE (expr) == TYPE_DECL
4703 || (TREE_CODE (expr) == BIT_NOT_EXPR
4704 && TYPE_P (TREE_OPERAND (expr, 0))))
4706 error ("argument to decltype must be an expression");
4707 return error_mark_node;
4710 if (type_dependent_expression_p (expr)
4711 /* In a template, a COMPONENT_REF has an IDENTIFIER_NODE for op1 even
4712 if it isn't dependent, so that we can check access control at
4713 instantiation time, so defer the decltype as well (PR 42277). */
4714 || (id_expression_or_member_access_p
4715 && processing_template_decl
4716 && TREE_CODE (expr) == COMPONENT_REF))
4718 if (id_expression_or_member_access_p)
4720 switch (TREE_CODE (expr))
4722 case VAR_DECL:
4723 case PARM_DECL:
4724 case RESULT_DECL:
4725 case FUNCTION_DECL:
4726 case CONST_DECL:
4727 case TEMPLATE_PARM_INDEX:
4728 type = TREE_TYPE (expr);
4729 break;
4731 default:
4732 break;
4736 if (type && !type_uses_auto (type))
4737 return type;
4739 treat_as_dependent:
4740 type = cxx_make_type (DECLTYPE_TYPE);
4741 DECLTYPE_TYPE_EXPR (type) = expr;
4742 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type)
4743 = id_expression_or_member_access_p;
4744 SET_TYPE_STRUCTURAL_EQUALITY (type);
4746 return type;
4749 /* The type denoted by decltype(e) is defined as follows: */
4751 expr = resolve_nondeduced_context (expr);
4753 /* To get the size of a static data member declared as an array of
4754 unknown bound, we need to instantiate it. */
4755 if (TREE_CODE (expr) == VAR_DECL
4756 && VAR_HAD_UNKNOWN_BOUND (expr)
4757 && DECL_TEMPLATE_INSTANTIATION (expr))
4758 instantiate_decl (expr, /*defer_ok*/true, /*expl_inst_mem*/false);
4760 if (id_expression_or_member_access_p)
4762 /* If e is an id-expression or a class member access (5.2.5
4763 [expr.ref]), decltype(e) is defined as the type of the entity
4764 named by e. If there is no such entity, or e names a set of
4765 overloaded functions, the program is ill-formed. */
4766 if (TREE_CODE (expr) == IDENTIFIER_NODE)
4767 expr = lookup_name (expr);
4769 if (TREE_CODE (expr) == INDIRECT_REF)
4770 /* This can happen when the expression is, e.g., "a.b". Just
4771 look at the underlying operand. */
4772 expr = TREE_OPERAND (expr, 0);
4774 if (TREE_CODE (expr) == OFFSET_REF
4775 || TREE_CODE (expr) == MEMBER_REF)
4776 /* We're only interested in the field itself. If it is a
4777 BASELINK, we will need to see through it in the next
4778 step. */
4779 expr = TREE_OPERAND (expr, 1);
4781 if (TREE_CODE (expr) == BASELINK)
4782 /* See through BASELINK nodes to the underlying functions. */
4783 expr = BASELINK_FUNCTIONS (expr);
4785 if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
4786 expr = TREE_OPERAND (expr, 0);
4788 if (TREE_CODE (expr) == OVERLOAD)
4790 if (OVL_CHAIN (expr)
4791 || TREE_CODE (OVL_FUNCTION (expr)) == TEMPLATE_DECL)
4793 error ("%qE refers to a set of overloaded functions", orig_expr);
4794 return error_mark_node;
4796 else
4797 /* An overload set containing only one function: just look
4798 at that function. */
4799 expr = OVL_FUNCTION (expr);
4802 switch (TREE_CODE (expr))
4804 case FIELD_DECL:
4805 if (DECL_BIT_FIELD_TYPE (expr))
4807 type = DECL_BIT_FIELD_TYPE (expr);
4808 break;
4810 /* Fall through for fields that aren't bitfields. */
4812 case FUNCTION_DECL:
4813 case VAR_DECL:
4814 case CONST_DECL:
4815 case PARM_DECL:
4816 case RESULT_DECL:
4817 case TEMPLATE_PARM_INDEX:
4818 expr = mark_type_use (expr);
4819 type = TREE_TYPE (expr);
4820 break;
4822 case ERROR_MARK:
4823 type = error_mark_node;
4824 break;
4826 case COMPONENT_REF:
4827 mark_type_use (expr);
4828 type = is_bitfield_expr_with_lowered_type (expr);
4829 if (!type)
4830 type = TREE_TYPE (TREE_OPERAND (expr, 1));
4831 break;
4833 case BIT_FIELD_REF:
4834 gcc_unreachable ();
4836 case INTEGER_CST:
4837 /* We can get here when the id-expression refers to an
4838 enumerator. */
4839 type = TREE_TYPE (expr);
4840 break;
4842 default:
4843 gcc_assert (TYPE_P (expr) || DECL_P (expr)
4844 || TREE_CODE (expr) == SCOPE_REF);
4845 error ("argument to decltype must be an expression");
4846 return error_mark_node;
4849 else
4851 /* Expressions of reference type are sometimes wrapped in
4852 INDIRECT_REFs. INDIRECT_REFs are just internal compiler
4853 representation, not part of the language, so we have to look
4854 through them. */
4855 if (TREE_CODE (expr) == INDIRECT_REF
4856 && TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0)))
4857 == REFERENCE_TYPE)
4858 expr = TREE_OPERAND (expr, 0);
4860 if (TREE_CODE (expr) == CALL_EXPR)
4862 /* If e is a function call (5.2.2 [expr.call]) or an
4863 invocation of an overloaded operator (parentheses around e
4864 are ignored), decltype(e) is defined as the return type of
4865 that function. */
4866 tree fndecl = get_callee_fndecl (expr);
4867 if (fndecl && fndecl != error_mark_node)
4868 type = TREE_TYPE (TREE_TYPE (fndecl));
4869 else
4871 tree target_type = TREE_TYPE (CALL_EXPR_FN (expr));
4872 if ((TREE_CODE (target_type) == REFERENCE_TYPE
4873 || TREE_CODE (target_type) == POINTER_TYPE)
4874 && (TREE_CODE (TREE_TYPE (target_type)) == FUNCTION_TYPE
4875 || TREE_CODE (TREE_TYPE (target_type)) == METHOD_TYPE))
4876 type = TREE_TYPE (TREE_TYPE (target_type));
4877 else if (processing_template_decl)
4878 /* Within a template finish_call_expr doesn't resolve
4879 CALL_EXPR_FN, so even though this decltype isn't really
4880 dependent let's defer resolving it. */
4881 goto treat_as_dependent;
4882 else
4883 sorry ("unable to determine the declared type of expression %<%E%>",
4884 expr);
4887 else
4889 type = is_bitfield_expr_with_lowered_type (expr);
4890 if (type)
4892 /* Bitfields are special, because their type encodes the
4893 number of bits they store. If the expression referenced a
4894 bitfield, TYPE now has the declared type of that
4895 bitfield. */
4896 type = cp_build_qualified_type (type,
4897 cp_type_quals (TREE_TYPE (expr)));
4899 if (real_lvalue_p (expr))
4900 type = build_reference_type (type);
4902 /* Within a lambda-expression:
4904 Every occurrence of decltype((x)) where x is a possibly
4905 parenthesized id-expression that names an entity of
4906 automatic storage duration is treated as if x were
4907 transformed into an access to a corresponding data member
4908 of the closure type that would have been declared if x
4909 were a use of the denoted entity. */
4910 else if (outer_automatic_var_p (expr)
4911 && current_function_decl
4912 && LAMBDA_FUNCTION_P (current_function_decl))
4913 type = capture_decltype (expr);
4914 else
4916 /* Otherwise, where T is the type of e, if e is an lvalue,
4917 decltype(e) is defined as T&, otherwise decltype(e) is
4918 defined as T. */
4919 type = TREE_TYPE (expr);
4920 if (type == error_mark_node)
4921 return error_mark_node;
4922 else if (expr == current_class_ptr)
4923 /* If the expression is just "this", we want the
4924 cv-unqualified pointer for the "this" type. */
4925 type = TYPE_MAIN_VARIANT (type);
4926 else if (real_lvalue_p (expr))
4928 if (TREE_CODE (type) != REFERENCE_TYPE
4929 || TYPE_REF_IS_RVALUE (type))
4930 type = build_reference_type (non_reference (type));
4932 else
4933 type = non_reference (type);
4938 if (!type || type == unknown_type_node)
4940 error ("type of %qE is unknown", expr);
4941 return error_mark_node;
4944 return type;
4947 /* Called from trait_expr_value to evaluate either __has_nothrow_assign or
4948 __has_nothrow_copy, depending on assign_p. */
4950 static bool
4951 classtype_has_nothrow_assign_or_copy_p (tree type, bool assign_p)
4953 tree fns;
4955 if (assign_p)
4957 int ix;
4958 ix = lookup_fnfields_1 (type, ansi_assopname (NOP_EXPR));
4959 if (ix < 0)
4960 return false;
4961 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), ix);
4963 else if (TYPE_HAS_COPY_CTOR (type))
4965 /* If construction of the copy constructor was postponed, create
4966 it now. */
4967 if (CLASSTYPE_LAZY_COPY_CTOR (type))
4968 lazily_declare_fn (sfk_copy_constructor, type);
4969 if (CLASSTYPE_LAZY_MOVE_CTOR (type))
4970 lazily_declare_fn (sfk_move_constructor, type);
4971 fns = CLASSTYPE_CONSTRUCTORS (type);
4973 else
4974 return false;
4976 for (; fns; fns = OVL_NEXT (fns))
4978 tree fn = OVL_CURRENT (fns);
4980 if (assign_p)
4982 if (copy_fn_p (fn) == 0)
4983 continue;
4985 else if (copy_fn_p (fn) <= 0)
4986 continue;
4988 if (!TYPE_NOTHROW_P (TREE_TYPE (fn)))
4989 return false;
4992 return true;
4995 /* Actually evaluates the trait. */
4997 static bool
4998 trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
5000 enum tree_code type_code1;
5001 tree t;
5003 type_code1 = TREE_CODE (type1);
5005 switch (kind)
5007 case CPTK_HAS_NOTHROW_ASSIGN:
5008 type1 = strip_array_types (type1);
5009 return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5010 && (trait_expr_value (CPTK_HAS_TRIVIAL_ASSIGN, type1, type2)
5011 || (CLASS_TYPE_P (type1)
5012 && classtype_has_nothrow_assign_or_copy_p (type1,
5013 true))));
5015 case CPTK_HAS_TRIVIAL_ASSIGN:
5016 /* ??? The standard seems to be missing the "or array of such a class
5017 type" wording for this trait. */
5018 type1 = strip_array_types (type1);
5019 return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5020 && (trivial_type_p (type1)
5021 || (CLASS_TYPE_P (type1)
5022 && TYPE_HAS_TRIVIAL_COPY_ASSIGN (type1))));
5024 case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5025 type1 = strip_array_types (type1);
5026 return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2)
5027 || (CLASS_TYPE_P (type1)
5028 && (t = locate_ctor (type1))
5029 && TYPE_NOTHROW_P (TREE_TYPE (t))));
5031 case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5032 type1 = strip_array_types (type1);
5033 return (trivial_type_p (type1)
5034 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_DFLT (type1)));
5036 case CPTK_HAS_NOTHROW_COPY:
5037 type1 = strip_array_types (type1);
5038 return (trait_expr_value (CPTK_HAS_TRIVIAL_COPY, type1, type2)
5039 || (CLASS_TYPE_P (type1)
5040 && classtype_has_nothrow_assign_or_copy_p (type1, false)));
5042 case CPTK_HAS_TRIVIAL_COPY:
5043 /* ??? The standard seems to be missing the "or array of such a class
5044 type" wording for this trait. */
5045 type1 = strip_array_types (type1);
5046 return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5047 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_COPY_CTOR (type1)));
5049 case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5050 type1 = strip_array_types (type1);
5051 return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5052 || (CLASS_TYPE_P (type1)
5053 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
5055 case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5056 return type_has_virtual_destructor (type1);
5058 case CPTK_IS_ABSTRACT:
5059 return (CLASS_TYPE_P (type1) && CLASSTYPE_PURE_VIRTUALS (type1));
5061 case CPTK_IS_BASE_OF:
5062 return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5063 && DERIVED_FROM_P (type1, type2));
5065 case CPTK_IS_CLASS:
5066 return (NON_UNION_CLASS_TYPE_P (type1));
5068 case CPTK_IS_CONVERTIBLE_TO:
5069 /* TODO */
5070 return false;
5072 case CPTK_IS_EMPTY:
5073 return (NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1));
5075 case CPTK_IS_ENUM:
5076 return (type_code1 == ENUMERAL_TYPE);
5078 case CPTK_IS_POD:
5079 return (pod_type_p (type1));
5081 case CPTK_IS_POLYMORPHIC:
5082 return (CLASS_TYPE_P (type1) && TYPE_POLYMORPHIC_P (type1));
5084 case CPTK_IS_STD_LAYOUT:
5085 return (std_layout_type_p (type1));
5087 case CPTK_IS_TRIVIAL:
5088 return (trivial_type_p (type1));
5090 case CPTK_IS_UNION:
5091 return (type_code1 == UNION_TYPE);
5093 default:
5094 gcc_unreachable ();
5095 return false;
5099 /* Returns true if TYPE is a complete type, an array of unknown bound,
5100 or (possibly cv-qualified) void, returns false otherwise. */
5102 static bool
5103 check_trait_type (tree type)
5105 if (COMPLETE_TYPE_P (type))
5106 return true;
5108 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
5109 && COMPLETE_TYPE_P (TREE_TYPE (type)))
5110 return true;
5112 if (VOID_TYPE_P (type))
5113 return true;
5115 return false;
5118 /* Process a trait expression. */
5120 tree
5121 finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
5123 gcc_assert (kind == CPTK_HAS_NOTHROW_ASSIGN
5124 || kind == CPTK_HAS_NOTHROW_CONSTRUCTOR
5125 || kind == CPTK_HAS_NOTHROW_COPY
5126 || kind == CPTK_HAS_TRIVIAL_ASSIGN
5127 || kind == CPTK_HAS_TRIVIAL_CONSTRUCTOR
5128 || kind == CPTK_HAS_TRIVIAL_COPY
5129 || kind == CPTK_HAS_TRIVIAL_DESTRUCTOR
5130 || kind == CPTK_HAS_VIRTUAL_DESTRUCTOR
5131 || kind == CPTK_IS_ABSTRACT
5132 || kind == CPTK_IS_BASE_OF
5133 || kind == CPTK_IS_CLASS
5134 || kind == CPTK_IS_CONVERTIBLE_TO
5135 || kind == CPTK_IS_EMPTY
5136 || kind == CPTK_IS_ENUM
5137 || kind == CPTK_IS_POD
5138 || kind == CPTK_IS_POLYMORPHIC
5139 || kind == CPTK_IS_STD_LAYOUT
5140 || kind == CPTK_IS_TRIVIAL
5141 || kind == CPTK_IS_UNION);
5143 if (kind == CPTK_IS_CONVERTIBLE_TO)
5145 sorry ("__is_convertible_to");
5146 return error_mark_node;
5149 if (type1 == error_mark_node
5150 || ((kind == CPTK_IS_BASE_OF || kind == CPTK_IS_CONVERTIBLE_TO)
5151 && type2 == error_mark_node))
5152 return error_mark_node;
5154 if (processing_template_decl)
5156 tree trait_expr = make_node (TRAIT_EXPR);
5157 TREE_TYPE (trait_expr) = boolean_type_node;
5158 TRAIT_EXPR_TYPE1 (trait_expr) = type1;
5159 TRAIT_EXPR_TYPE2 (trait_expr) = type2;
5160 TRAIT_EXPR_KIND (trait_expr) = kind;
5161 return trait_expr;
5164 complete_type (type1);
5165 if (type2)
5166 complete_type (type2);
5168 switch (kind)
5170 case CPTK_HAS_NOTHROW_ASSIGN:
5171 case CPTK_HAS_TRIVIAL_ASSIGN:
5172 case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5173 case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5174 case CPTK_HAS_NOTHROW_COPY:
5175 case CPTK_HAS_TRIVIAL_COPY:
5176 case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5177 case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5178 case CPTK_IS_ABSTRACT:
5179 case CPTK_IS_EMPTY:
5180 case CPTK_IS_POD:
5181 case CPTK_IS_POLYMORPHIC:
5182 case CPTK_IS_STD_LAYOUT:
5183 case CPTK_IS_TRIVIAL:
5184 if (!check_trait_type (type1))
5186 error ("incomplete type %qT not allowed", type1);
5187 return error_mark_node;
5189 break;
5191 case CPTK_IS_BASE_OF:
5192 if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5193 && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
5194 && !COMPLETE_TYPE_P (type2))
5196 error ("incomplete type %qT not allowed", type2);
5197 return error_mark_node;
5199 break;
5201 case CPTK_IS_CLASS:
5202 case CPTK_IS_ENUM:
5203 case CPTK_IS_UNION:
5204 break;
5206 case CPTK_IS_CONVERTIBLE_TO:
5207 default:
5208 gcc_unreachable ();
5211 return (trait_expr_value (kind, type1, type2)
5212 ? boolean_true_node : boolean_false_node);
5215 /* Do-nothing variants of functions to handle pragma FLOAT_CONST_DECIMAL64,
5216 which is ignored for C++. */
5218 void
5219 set_float_const_decimal64 (void)
5223 void
5224 clear_float_const_decimal64 (void)
5228 bool
5229 float_const_decimal64_p (void)
5231 return 0;
5234 /* Return true if T is a literal type. */
5236 bool
5237 literal_type_p (tree t)
5239 if (SCALAR_TYPE_P (t))
5240 return true;
5241 if (CLASS_TYPE_P (t))
5242 return CLASSTYPE_LITERAL_P (t);
5243 if (TREE_CODE (t) == ARRAY_TYPE)
5244 return literal_type_p (strip_array_types (t));
5245 return false;
5249 /* If DECL is a variable declared `constexpr', require its type
5250 be literal. Return the DECL if OK, otherwise NULL. */
5252 tree
5253 ensure_literal_type_for_constexpr_object (tree decl)
5255 tree type = TREE_TYPE (decl);
5256 if (TREE_CODE (decl) == VAR_DECL && DECL_DECLARED_CONSTEXPR_P (decl)
5257 && !processing_template_decl && !literal_type_p (type))
5259 error ("the type %qT of constexpr variable %qD is not literal",
5260 type, decl);
5261 return NULL;
5263 return decl;
5266 /* Return non-null if FUN certainly designates a valid constexpr function
5267 declaration. Otherwise return NULL. Issue appropriate diagnostics
5268 if necessary. Note that we only check the declaration, not the body
5269 of the function. */
5271 tree
5272 validate_constexpr_fundecl (tree fun)
5274 tree rettype = NULL;
5275 tree parm = NULL;
5277 /* Don't bother if FUN is not marked constexpr. */
5278 if (!DECL_DECLARED_CONSTEXPR_P (fun))
5279 return NULL;
5281 /* For a function template, we have absolutely no guarantee that all
5282 instantiations will be constexpr. */
5283 if (TREE_CODE (fun) == TEMPLATE_DECL)
5284 return NULL;
5286 parm = FUNCTION_FIRST_USER_PARM (fun);
5287 for (; parm != NULL; parm = TREE_CHAIN (parm))
5289 tree type = TREE_TYPE (parm);
5290 if (dependent_type_p (type))
5291 return NULL;
5292 if (!literal_type_p (type))
5294 error ("parameter %q#D is not of literal type", parm);
5295 return NULL;
5299 if (DECL_CONSTRUCTOR_P (fun))
5300 return fun;
5302 rettype = TREE_TYPE (TREE_TYPE (fun));
5303 if (dependent_type_p (rettype))
5304 return NULL;
5305 if (!literal_type_p (rettype))
5307 error ("return type %qT of function %qD is not a literal type",
5308 TREE_TYPE (TREE_TYPE (fun)), fun);
5309 return NULL;
5311 return fun;
5315 /* Constructor for a lambda expression. */
5317 tree
5318 build_lambda_expr (void)
5320 tree lambda = make_node (LAMBDA_EXPR);
5321 LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) = CPLD_NONE;
5322 LAMBDA_EXPR_CAPTURE_LIST (lambda) = NULL_TREE;
5323 LAMBDA_EXPR_THIS_CAPTURE (lambda) = NULL_TREE;
5324 LAMBDA_EXPR_RETURN_TYPE (lambda) = NULL_TREE;
5325 LAMBDA_EXPR_MUTABLE_P (lambda) = false;
5326 return lambda;
5329 /* Create the closure object for a LAMBDA_EXPR. */
5331 tree
5332 build_lambda_object (tree lambda_expr)
5334 /* Build aggregate constructor call.
5335 - cp_parser_braced_list
5336 - cp_parser_functional_cast */
5337 VEC(constructor_elt,gc) *elts = NULL;
5338 tree node, expr, type;
5339 location_t saved_loc;
5341 if (processing_template_decl)
5342 return lambda_expr;
5344 /* Make sure any error messages refer to the lambda-introducer. */
5345 saved_loc = input_location;
5346 input_location = LAMBDA_EXPR_LOCATION (lambda_expr);
5348 for (node = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
5349 node;
5350 node = TREE_CHAIN (node))
5352 tree field = TREE_PURPOSE (node);
5353 tree val = TREE_VALUE (node);
5355 if (DECL_P (val))
5356 mark_used (val);
5358 /* Mere mortals can't copy arrays with aggregate initialization, so
5359 do some magic to make it work here. */
5360 if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
5361 val = build_array_copy (val);
5362 else if (DECL_NORMAL_CAPTURE_P (field)
5363 && TREE_CODE (TREE_TYPE (field)) != REFERENCE_TYPE)
5365 /* "the entities that are captured by copy are used to
5366 direct-initialize each corresponding non-static data
5367 member of the resulting closure object."
5369 There's normally no way to express direct-initialization
5370 from an element of a CONSTRUCTOR, so we build up a special
5371 TARGET_EXPR to bypass the usual copy-initialization. */
5372 val = force_rvalue (val);
5373 if (TREE_CODE (val) == TARGET_EXPR)
5374 TARGET_EXPR_DIRECT_INIT_P (val) = true;
5377 CONSTRUCTOR_APPEND_ELT (elts, DECL_NAME (field), val);
5380 expr = build_constructor (init_list_type_node, elts);
5381 CONSTRUCTOR_IS_DIRECT_INIT (expr) = 1;
5383 /* N2927: "[The closure] class type is not an aggregate."
5384 But we briefly treat it as an aggregate to make this simpler. */
5385 type = TREE_TYPE (lambda_expr);
5386 CLASSTYPE_NON_AGGREGATE (type) = 0;
5387 expr = finish_compound_literal (type, expr);
5388 CLASSTYPE_NON_AGGREGATE (type) = 1;
5390 input_location = saved_loc;
5391 return expr;
5394 /* Return an initialized RECORD_TYPE for LAMBDA.
5395 LAMBDA must have its explicit captures already. */
5397 tree
5398 begin_lambda_type (tree lambda)
5400 tree type;
5403 /* Unique name. This is just like an unnamed class, but we cannot use
5404 make_anon_name because of certain checks against TYPE_ANONYMOUS_P. */
5405 tree name;
5406 name = make_lambda_name ();
5408 /* Create the new RECORD_TYPE for this lambda. */
5409 type = xref_tag (/*tag_code=*/record_type,
5410 name,
5411 /*scope=*/ts_within_enclosing_non_class,
5412 /*template_header_p=*/false);
5415 /* Designate it as a struct so that we can use aggregate initialization. */
5416 CLASSTYPE_DECLARED_CLASS (type) = false;
5418 /* Clear base types. */
5419 xref_basetypes (type, /*bases=*/NULL_TREE);
5421 /* Start the class. */
5422 type = begin_class_definition (type, /*attributes=*/NULL_TREE);
5424 /* Cross-reference the expression and the type. */
5425 TREE_TYPE (lambda) = type;
5426 CLASSTYPE_LAMBDA_EXPR (type) = lambda;
5428 return type;
5431 /* Returns the type to use for the return type of the operator() of a
5432 closure class. */
5434 tree
5435 lambda_return_type (tree expr)
5437 tree type;
5438 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
5440 warning (0, "cannot deduce lambda return type from a braced-init-list");
5441 return void_type_node;
5443 if (type_dependent_expression_p (expr))
5445 type = cxx_make_type (DECLTYPE_TYPE);
5446 DECLTYPE_TYPE_EXPR (type) = expr;
5447 DECLTYPE_FOR_LAMBDA_RETURN (type) = true;
5448 SET_TYPE_STRUCTURAL_EQUALITY (type);
5450 else
5451 type = type_decays_to (unlowered_expr_type (expr));
5452 return type;
5455 /* Given a LAMBDA_EXPR or closure type LAMBDA, return the op() of the
5456 closure type. */
5458 tree
5459 lambda_function (tree lambda)
5461 tree type;
5462 if (TREE_CODE (lambda) == LAMBDA_EXPR)
5463 type = TREE_TYPE (lambda);
5464 else
5465 type = lambda;
5466 gcc_assert (LAMBDA_TYPE_P (type));
5467 /* Don't let debug_tree cause instantiation. */
5468 if (CLASSTYPE_TEMPLATE_INSTANTIATION (type) && !COMPLETE_TYPE_P (type))
5469 return NULL_TREE;
5470 lambda = lookup_member (type, ansi_opname (CALL_EXPR),
5471 /*protect=*/0, /*want_type=*/false);
5472 if (lambda)
5473 lambda = BASELINK_FUNCTIONS (lambda);
5474 return lambda;
5477 /* Returns the type to use for the FIELD_DECL corresponding to the
5478 capture of EXPR.
5479 The caller should add REFERENCE_TYPE for capture by reference. */
5481 tree
5482 lambda_capture_field_type (tree expr)
5484 tree type;
5485 if (type_dependent_expression_p (expr))
5487 type = cxx_make_type (DECLTYPE_TYPE);
5488 DECLTYPE_TYPE_EXPR (type) = expr;
5489 DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true;
5490 SET_TYPE_STRUCTURAL_EQUALITY (type);
5492 else
5493 type = non_reference (unlowered_expr_type (expr));
5494 return type;
5497 /* Recompute the return type for LAMBDA with body of the form:
5498 { return EXPR ; } */
5500 void
5501 apply_lambda_return_type (tree lambda, tree return_type)
5503 tree fco = lambda_function (lambda);
5504 tree result;
5506 LAMBDA_EXPR_RETURN_TYPE (lambda) = return_type;
5508 /* If we got a DECLTYPE_TYPE, don't stick it in the function yet,
5509 it would interfere with instantiating the closure type. */
5510 if (dependent_type_p (return_type))
5511 return;
5512 if (return_type == error_mark_node)
5513 return;
5515 /* TREE_TYPE (FUNCTION_DECL) == METHOD_TYPE
5516 TREE_TYPE (METHOD_TYPE) == return-type */
5517 TREE_TYPE (fco) = change_return_type (return_type, TREE_TYPE (fco));
5519 result = DECL_RESULT (fco);
5520 if (result == NULL_TREE)
5521 return;
5523 /* We already have a DECL_RESULT from start_preparsed_function.
5524 Now we need to redo the work it and allocate_struct_function
5525 did to reflect the new type. */
5526 result = build_decl (input_location, RESULT_DECL, NULL_TREE,
5527 TYPE_MAIN_VARIANT (return_type));
5528 DECL_ARTIFICIAL (result) = 1;
5529 DECL_IGNORED_P (result) = 1;
5530 cp_apply_type_quals_to_decl (cp_type_quals (return_type),
5531 result);
5533 DECL_RESULT (fco) = result;
5535 if (!processing_template_decl && aggregate_value_p (result, fco))
5537 #ifdef PCC_STATIC_STRUCT_RETURN
5538 cfun->returns_pcc_struct = 1;
5539 #endif
5540 cfun->returns_struct = 1;
5545 /* DECL is a local variable or parameter from the surrounding scope of a
5546 lambda-expression. Returns the decltype for a use of the capture field
5547 for DECL even if it hasn't been captured yet. */
5549 static tree
5550 capture_decltype (tree decl)
5552 tree lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
5553 /* FIXME do lookup instead of list walk? */
5554 tree cap = value_member (decl, LAMBDA_EXPR_CAPTURE_LIST (lam));
5555 tree type;
5557 if (cap)
5558 type = TREE_TYPE (TREE_PURPOSE (cap));
5559 else
5560 switch (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam))
5562 case CPLD_NONE:
5563 error ("%qD is not captured", decl);
5564 return error_mark_node;
5566 case CPLD_COPY:
5567 type = TREE_TYPE (decl);
5568 if (TREE_CODE (type) == REFERENCE_TYPE
5569 && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
5570 type = TREE_TYPE (type);
5571 break;
5573 case CPLD_REFERENCE:
5574 type = TREE_TYPE (decl);
5575 if (TREE_CODE (type) != REFERENCE_TYPE)
5576 type = build_reference_type (TREE_TYPE (decl));
5577 break;
5579 default:
5580 gcc_unreachable ();
5583 if (TREE_CODE (type) != REFERENCE_TYPE)
5585 if (!LAMBDA_EXPR_MUTABLE_P (lam))
5586 type = cp_build_qualified_type (type, (cp_type_quals (type)
5587 |TYPE_QUAL_CONST));
5588 type = build_reference_type (type);
5590 return type;
5593 /* From an ID and INITIALIZER, create a capture (by reference if
5594 BY_REFERENCE_P is true), add it to the capture-list for LAMBDA,
5595 and return it. */
5597 tree
5598 add_capture (tree lambda, tree id, tree initializer, bool by_reference_p,
5599 bool explicit_init_p)
5601 tree type;
5602 tree member;
5604 type = lambda_capture_field_type (initializer);
5605 if (by_reference_p)
5607 type = build_reference_type (type);
5608 if (!real_lvalue_p (initializer))
5609 error ("cannot capture %qE by reference", initializer);
5612 /* Make member variable. */
5613 member = build_lang_decl (FIELD_DECL, id, type);
5614 if (!explicit_init_p)
5615 /* Normal captures are invisible to name lookup but uses are replaced
5616 with references to the capture field; we implement this by only
5617 really making them invisible in unevaluated context; see
5618 qualify_lookup. For now, let's make explicitly initialized captures
5619 always visible. */
5620 DECL_NORMAL_CAPTURE_P (member) = true;
5622 /* Add it to the appropriate closure class if we've started it. */
5623 if (current_class_type && current_class_type == TREE_TYPE (lambda))
5624 finish_member_declaration (member);
5626 LAMBDA_EXPR_CAPTURE_LIST (lambda)
5627 = tree_cons (member, initializer, LAMBDA_EXPR_CAPTURE_LIST (lambda));
5629 if (id == get_identifier ("__this"))
5631 if (LAMBDA_EXPR_CAPTURES_THIS_P (lambda))
5632 error ("already captured %<this%> in lambda expression");
5633 LAMBDA_EXPR_THIS_CAPTURE (lambda) = member;
5636 return member;
5639 /* Register all the capture members on the list CAPTURES, which is the
5640 LAMBDA_EXPR_CAPTURE_LIST for the lambda after the introducer. */
5642 void register_capture_members (tree captures)
5644 if (captures)
5646 register_capture_members (TREE_CHAIN (captures));
5647 finish_member_declaration (TREE_PURPOSE (captures));
5651 /* Given a FIELD_DECL decl belonging to a closure type, return a
5652 COMPONENT_REF of it relative to the 'this' parameter of the op() for
5653 that type. */
5655 static tree
5656 thisify_lambda_field (tree decl)
5658 tree context = lambda_function (DECL_CONTEXT (decl));
5659 tree object = cp_build_indirect_ref (DECL_ARGUMENTS (context),
5660 RO_NULL,
5661 tf_warning_or_error);
5662 return finish_non_static_data_member (decl, object,
5663 /*qualifying_scope*/NULL_TREE);
5666 /* Similar to add_capture, except this works on a stack of nested lambdas.
5667 BY_REFERENCE_P in this case is derived from the default capture mode.
5668 Returns the capture for the lambda at the bottom of the stack. */
5670 tree
5671 add_default_capture (tree lambda_stack, tree id, tree initializer)
5673 bool this_capture_p = (id == get_identifier ("__this"));
5675 tree member = NULL_TREE;
5677 tree saved_class_type = current_class_type;
5679 tree node;
5681 for (node = lambda_stack;
5682 node;
5683 node = TREE_CHAIN (node))
5685 tree lambda = TREE_VALUE (node);
5687 current_class_type = TREE_TYPE (lambda);
5688 member = add_capture (lambda,
5690 initializer,
5691 /*by_reference_p=*/
5692 (!this_capture_p
5693 && (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda)
5694 == CPLD_REFERENCE)),
5695 /*explicit_init_p=*/false);
5696 initializer = thisify_lambda_field (member);
5699 current_class_type = saved_class_type;
5701 return member;
5704 /* Return the capture pertaining to a use of 'this' in LAMBDA, in the form of an
5705 INDIRECT_REF, possibly adding it through default capturing. */
5707 tree
5708 lambda_expr_this_capture (tree lambda)
5710 tree result;
5712 tree this_capture = LAMBDA_EXPR_THIS_CAPTURE (lambda);
5714 /* Try to default capture 'this' if we can. */
5715 if (!this_capture
5716 && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE)
5718 tree containing_function = TYPE_CONTEXT (TREE_TYPE (lambda));
5719 tree lambda_stack = tree_cons (NULL_TREE, lambda, NULL_TREE);
5720 tree init = NULL_TREE;
5722 /* If we are in a lambda function, we can move out until we hit:
5723 1. a non-lambda function,
5724 2. a lambda function capturing 'this', or
5725 3. a non-default capturing lambda function. */
5726 while (LAMBDA_FUNCTION_P (containing_function))
5728 tree lambda
5729 = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (containing_function));
5731 if (LAMBDA_EXPR_THIS_CAPTURE (lambda))
5733 /* An outer lambda has already captured 'this'. */
5734 tree cap = LAMBDA_EXPR_THIS_CAPTURE (lambda);
5735 init = thisify_lambda_field (cap);
5736 break;
5739 if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_NONE)
5740 /* An outer lambda won't let us capture 'this'. */
5741 break;
5743 lambda_stack = tree_cons (NULL_TREE,
5744 lambda,
5745 lambda_stack);
5747 containing_function = decl_function_context (containing_function);
5750 if (!init && DECL_NONSTATIC_MEMBER_FUNCTION_P (containing_function)
5751 && !LAMBDA_FUNCTION_P (containing_function))
5752 /* First parameter is 'this'. */
5753 init = DECL_ARGUMENTS (containing_function);
5755 if (init)
5756 this_capture = add_default_capture (lambda_stack,
5757 /*id=*/get_identifier ("__this"),
5758 init);
5761 if (!this_capture)
5763 error ("%<this%> was not captured for this lambda function");
5764 result = error_mark_node;
5766 else
5768 /* To make sure that current_class_ref is for the lambda. */
5769 gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)) == TREE_TYPE (lambda));
5771 result = finish_non_static_data_member (this_capture,
5772 NULL_TREE,
5773 /*qualifying_scope=*/NULL_TREE);
5775 /* If 'this' is captured, each use of 'this' is transformed into an
5776 access to the corresponding unnamed data member of the closure
5777 type cast (_expr.cast_ 5.4) to the type of 'this'. [ The cast
5778 ensures that the transformed expression is an rvalue. ] */
5779 result = rvalue (result);
5782 return result;
5785 /* Returns the method basetype of the innermost non-lambda function, or
5786 NULL_TREE if none. */
5788 tree
5789 nonlambda_method_basetype (void)
5791 tree fn, type;
5792 if (!current_class_ref)
5793 return NULL_TREE;
5795 type = current_class_type;
5796 if (!LAMBDA_TYPE_P (type))
5797 return type;
5799 /* Find the nearest enclosing non-lambda function. */
5800 fn = TYPE_NAME (type);
5802 fn = decl_function_context (fn);
5803 while (fn && LAMBDA_FUNCTION_P (fn));
5805 if (!fn || !DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
5806 return NULL_TREE;
5808 return TYPE_METHOD_BASETYPE (TREE_TYPE (fn));
5811 /* If the closure TYPE has a static op(), also add a conversion to function
5812 pointer. */
5814 void
5815 maybe_add_lambda_conv_op (tree type)
5817 bool nested = (current_function_decl != NULL_TREE);
5818 tree callop = lambda_function (type);
5819 tree rettype, name, fntype, fn, body, compound_stmt;
5820 tree thistype, stattype, statfn, convfn, call, arg;
5821 VEC (tree, gc) *argvec;
5823 if (LAMBDA_EXPR_CAPTURE_LIST (CLASSTYPE_LAMBDA_EXPR (type)) != NULL_TREE)
5824 return;
5826 stattype = build_function_type (TREE_TYPE (TREE_TYPE (callop)),
5827 FUNCTION_ARG_CHAIN (callop));
5829 /* First build up the conversion op. */
5831 rettype = build_pointer_type (stattype);
5832 name = mangle_conv_op_name_for_type (rettype);
5833 thistype = cp_build_qualified_type (type, TYPE_QUAL_CONST);
5834 fntype = build_method_type_directly (thistype, rettype, void_list_node);
5835 fn = convfn = build_lang_decl (FUNCTION_DECL, name, fntype);
5836 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
5838 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
5839 && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
5840 DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
5842 SET_OVERLOADED_OPERATOR_CODE (fn, TYPE_EXPR);
5843 grokclassfn (type, fn, NO_SPECIAL);
5844 set_linkage_according_to_type (type, fn);
5845 rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
5846 DECL_IN_AGGR_P (fn) = 1;
5847 DECL_ARTIFICIAL (fn) = 1;
5848 DECL_NOT_REALLY_EXTERN (fn) = 1;
5849 DECL_DECLARED_INLINE_P (fn) = 1;
5850 DECL_ARGUMENTS (fn) = build_this_parm (fntype, TYPE_QUAL_CONST);
5851 if (nested)
5852 DECL_INTERFACE_KNOWN (fn) = 1;
5854 add_method (type, fn, NULL_TREE);
5856 /* Generic thunk code fails for varargs; we'll complain in mark_used if
5857 the conversion op is used. */
5858 if (varargs_function_p (callop))
5860 DECL_DELETED_FN (fn) = 1;
5861 return;
5864 /* Now build up the thunk to be returned. */
5866 name = get_identifier ("_FUN");
5867 fn = statfn = build_lang_decl (FUNCTION_DECL, name, stattype);
5868 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
5869 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
5870 && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
5871 DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
5872 grokclassfn (type, fn, NO_SPECIAL);
5873 set_linkage_according_to_type (type, fn);
5874 rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
5875 DECL_IN_AGGR_P (fn) = 1;
5876 DECL_ARTIFICIAL (fn) = 1;
5877 DECL_NOT_REALLY_EXTERN (fn) = 1;
5878 DECL_DECLARED_INLINE_P (fn) = 1;
5879 DECL_STATIC_FUNCTION_P (fn) = 1;
5880 DECL_ARGUMENTS (fn) = copy_list (DECL_CHAIN (DECL_ARGUMENTS (callop)));
5881 for (arg = DECL_ARGUMENTS (fn); arg; arg = DECL_CHAIN (arg))
5882 DECL_CONTEXT (arg) = fn;
5883 if (nested)
5884 DECL_INTERFACE_KNOWN (fn) = 1;
5886 add_method (type, fn, NULL_TREE);
5888 if (nested)
5889 push_function_context ();
5891 /* Generate the body of the thunk. */
5893 start_preparsed_function (statfn, NULL_TREE,
5894 SF_PRE_PARSED | SF_INCLASS_INLINE);
5895 if (DECL_ONE_ONLY (statfn))
5897 /* Put the thunk in the same comdat group as the call op. */
5898 struct cgraph_node *callop_node, *thunk_node;
5899 DECL_COMDAT_GROUP (statfn) = DECL_COMDAT_GROUP (callop);
5900 callop_node = cgraph_node (callop);
5901 thunk_node = cgraph_node (statfn);
5902 gcc_assert (callop_node->same_comdat_group == NULL);
5903 gcc_assert (thunk_node->same_comdat_group == NULL);
5904 callop_node->same_comdat_group = thunk_node;
5905 thunk_node->same_comdat_group = callop_node;
5907 body = begin_function_body ();
5908 compound_stmt = begin_compound_stmt (0);
5910 arg = build1 (NOP_EXPR, TREE_TYPE (DECL_ARGUMENTS (callop)),
5911 null_pointer_node);
5912 argvec = make_tree_vector ();
5913 VEC_quick_push (tree, argvec, arg);
5914 for (arg = DECL_ARGUMENTS (statfn); arg; arg = DECL_CHAIN (arg))
5915 VEC_safe_push (tree, gc, argvec, arg);
5916 call = build_call_a (callop, VEC_length (tree, argvec),
5917 VEC_address (tree, argvec));
5918 CALL_FROM_THUNK_P (call) = 1;
5919 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (call)))
5920 call = build_cplus_new (TREE_TYPE (call), call);
5921 call = convert_from_reference (call);
5922 finish_return_stmt (call);
5924 finish_compound_stmt (compound_stmt);
5925 finish_function_body (body);
5927 expand_or_defer_fn (finish_function (2));
5929 /* Generate the body of the conversion op. */
5931 start_preparsed_function (convfn, NULL_TREE,
5932 SF_PRE_PARSED | SF_INCLASS_INLINE);
5933 body = begin_function_body ();
5934 compound_stmt = begin_compound_stmt (0);
5936 finish_return_stmt (decay_conversion (statfn));
5938 finish_compound_stmt (compound_stmt);
5939 finish_function_body (body);
5941 expand_or_defer_fn (finish_function (2));
5943 if (nested)
5944 pop_function_context ();
5946 #include "gt-cp-semantics.h"