OSDN Git Service

592696346cd42a4f4f4f9d602d15442c8f73d20e
[pf3gnuchains/gcc-fork.git] / gcc / cp / semantics.c
1 /* Perform the semantic phase of parsing, i.e., the process of
2    building tree structure, checking semantic consistency, and
3    building RTL.  These routines are used both during actual parsing
4    and during the instantiation of template functions.
5
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.
10
11    This file is part of GCC.
12
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.
17
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.
22
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/>.  */
26
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"
47
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.  */
52
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);
57
58
59 /* Deferred Access Checking Overview
60    ---------------------------------
61
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.
65
66    For member declarations, access checking has to be deferred
67    until more information about the declaration is known.  For
68    example:
69
70      class A {
71          typedef int X;
72        public:
73          X f();
74      };
75
76      A::X A::f();
77      A::X g();
78
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.
81
82    Furthermore, some contexts require that access checking is
83    never performed at all.  These include class heads, and template
84    instantiations.
85
86    Typical use of access checking functions is described here:
87
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).
93
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.
97
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.
101
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.
106
107       In case of parsing error, we simply call `pop_deferring_access_checks'
108       without `perform_deferred_access_checks'.  */
109
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:
115
116        class A {
117          class B {};
118          B* f();
119        }
120
121        A::B* A::f() { return 0; }
122
123      is valid, even though `A::B' is not generally accessible.  */
124   VEC (deferred_access_check,gc)* GTY(()) deferred_access_checks;
125
126   /* The current mode of access checks.  */
127   enum deferring_kind deferring_access_checks_kind;
128
129 } deferred_access;
130 DEF_VEC_O (deferred_access);
131 DEF_VEC_ALLOC_O (deferred_access,gc);
132
133 /* Data for deferred access checking.  */
134 static GTY(()) VEC(deferred_access,gc) *deferred_access_stack;
135 static GTY(()) unsigned deferred_access_no_check;
136
137 /* Save the current deferred access states and start deferred
138    access checking iff DEFER_P is true.  */
139
140 void
141 push_deferring_access_checks (deferring_kind deferring)
142 {
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
148     {
149       deferred_access *ptr;
150
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;
154     }
155 }
156
157 /* Resume deferring access checks again after we stopped doing
158    this previously.  */
159
160 void
161 resume_deferring_access_checks (void)
162 {
163   if (!deferred_access_no_check)
164     VEC_last (deferred_access, deferred_access_stack)
165       ->deferring_access_checks_kind = dk_deferred;
166 }
167
168 /* Stop deferring access checks.  */
169
170 void
171 stop_deferring_access_checks (void)
172 {
173   if (!deferred_access_no_check)
174     VEC_last (deferred_access, deferred_access_stack)
175       ->deferring_access_checks_kind = dk_no_deferred;
176 }
177
178 /* Discard the current deferred access checks and restore the
179    previous states.  */
180
181 void
182 pop_deferring_access_checks (void)
183 {
184   if (deferred_access_no_check)
185     deferred_access_no_check--;
186   else
187     VEC_pop (deferred_access, deferred_access_stack);
188 }
189
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.
193    */
194
195 VEC (deferred_access_check,gc)*
196 get_deferred_access_checks (void)
197 {
198   if (deferred_access_no_check)
199     return NULL;
200   else
201     return (VEC_last (deferred_access, deferred_access_stack)
202             ->deferred_access_checks);
203 }
204
205 /* Take current deferred checks and combine with the
206    previous states if we also defer checks previously.
207    Otherwise perform checks now.  */
208
209 void
210 pop_to_parent_deferring_access_checks (void)
211 {
212   if (deferred_access_no_check)
213     deferred_access_no_check--;
214   else
215     {
216       VEC (deferred_access_check,gc) *checks;
217       deferred_access *ptr;
218
219       checks = (VEC_last (deferred_access, deferred_access_stack)
220                 ->deferred_access_checks);
221
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)
225         {
226           /* Check access.  */
227           perform_access_checks (checks);
228         }
229       else
230         {
231           /* Merge with parent.  */
232           int i, j;
233           deferred_access_check *chk, *probe;
234
235           FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
236             {
237               FOR_EACH_VEC_ELT (deferred_access_check,
238                                 ptr->deferred_access_checks, j, probe)
239                 {
240                   if (probe->binfo == chk->binfo &&
241                       probe->decl == chk->decl &&
242                       probe->diag_decl == chk->diag_decl)
243                     goto found;
244                 }
245               /* Insert into parent's checks.  */
246               VEC_safe_push (deferred_access_check, gc,
247                              ptr->deferred_access_checks, chk);
248             found:;
249             }
250         }
251     }
252 }
253
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.  */
257
258 void
259 perform_access_checks (VEC (deferred_access_check,gc)* checks)
260 {
261   int i;
262   deferred_access_check *chk;
263
264   if (!checks)
265     return;
266
267   FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
268     enforce_access (chk->binfo, chk->decl, chk->diag_decl);
269 }
270
271 /* Perform the deferred access checks.
272
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:
277
278      class A {
279        typedef int X;
280        static X a;
281      };
282      A::X A::a, x;      // No error for `A::a', error for `x'
283
284    We have to perform deferred access of `A::X', first with `A::a',
285    next with `x'.  */
286
287 void
288 perform_deferred_access_checks (void)
289 {
290   perform_access_checks (get_deferred_access_checks ());
291 }
292
293 /* Defer checking the accessibility of DECL, when looked up in
294    BINFO. DIAG_DECL is the declaration to use to print diagnostics.  */
295
296 void
297 perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl)
298 {
299   int i;
300   deferred_access *ptr;
301   deferred_access_check *chk;
302   deferred_access_check *new_access;
303
304
305   /* Exit if we are in a context that no access checking is performed.
306      */
307   if (deferred_access_no_check)
308     return;
309
310   gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
311
312   ptr = VEC_last (deferred_access, deferred_access_stack);
313
314   /* If we are not supposed to defer access checks, just check now.  */
315   if (ptr->deferring_access_checks_kind == dk_no_deferred)
316     {
317       enforce_access (binfo, decl, diag_decl);
318       return;
319     }
320
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)
324     {
325       if (chk->decl == decl && chk->binfo == binfo &&
326           chk->diag_decl == diag_decl)
327         {
328           return;
329         }
330     }
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;
338 }
339
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.  */
343
344 int
345 stmts_are_full_exprs_p (void)
346 {
347   return current_stmt_tree ()->stmts_are_full_exprs_p;
348 }
349
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.  */
353
354 tree
355 add_stmt (tree t)
356 {
357   enum tree_code code = TREE_CODE (t);
358
359   if (EXPR_P (t) && code != LABEL_EXPR)
360     {
361       if (!EXPR_HAS_LOCATION (t))
362         SET_EXPR_LOCATION (t, input_location);
363
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 ();
367     }
368
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);
372
373   return t;
374 }
375
376 /* Returns the stmt_tree to which statements are currently being added.  */
377
378 stmt_tree
379 current_stmt_tree (void)
380 {
381   return (cfun
382           ? &cfun->language->base.x_stmt_tree
383           : &scope_chain->x_stmt_tree);
384 }
385
386 /* If statements are full expressions, wrap STMT in a CLEANUP_POINT_EXPR.  */
387
388 static tree
389 maybe_cleanup_point_expr (tree expr)
390 {
391   if (!processing_template_decl && stmts_are_full_exprs_p ())
392     expr = fold_build_cleanup_point_expr (TREE_TYPE (expr), expr);
393   return expr;
394 }
395
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.  */
400
401 static tree
402 maybe_cleanup_point_expr_void (tree expr)
403 {
404   if (!processing_template_decl && stmts_are_full_exprs_p ())
405     expr = fold_build_cleanup_point_expr (void_type_node, expr);
406   return expr;
407 }
408
409
410
411 /* Create a declaration statement for the declaration given by the DECL.  */
412
413 void
414 add_decl_expr (tree decl)
415 {
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);
421 }
422
423 /* Finish a scope.  */
424
425 tree
426 do_poplevel (tree stmt_list)
427 {
428   tree block = NULL;
429
430   if (stmts_are_full_exprs_p ())
431     block = poplevel (kept_level_p (), 1, 0);
432
433   stmt_list = pop_stmt_list (stmt_list);
434
435   if (!processing_template_decl)
436     {
437       stmt_list = c_build_bind_expr (input_location, block, stmt_list);
438       /* ??? See c_end_compound_stmt re statement expressions.  */
439     }
440
441   return stmt_list;
442 }
443
444 /* Begin a new scope.  */
445
446 static tree
447 do_pushlevel (scope_kind sk)
448 {
449   tree ret = push_stmt_list ();
450   if (stmts_are_full_exprs_p ())
451     begin_scope (sk, NULL);
452   return ret;
453 }
454
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.  */
458
459 void
460 push_cleanup (tree decl, tree cleanup, bool eh_only)
461 {
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 ();
466 }
467
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.  */
472
473 static void
474 begin_cond (tree *cond_p)
475 {
476   if (processing_template_decl)
477     *cond_p = push_stmt_list ();
478 }
479
480 /* Finish such a conditional.  */
481
482 static void
483 finish_cond (tree *cond_p, tree expr)
484 {
485   if (processing_template_decl)
486     {
487       tree cond = pop_stmt_list (*cond_p);
488       if (TREE_CODE (cond) == DECL_EXPR)
489         expr = cond;
490
491       if (check_for_bare_parameter_packs (expr))
492         *cond_p = error_mark_node;
493     }
494   *cond_p = expr;
495 }
496
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.  */
506
507 static void
508 simplify_loop_decl_cond (tree *cond_p, tree body)
509 {
510   tree cond, if_stmt;
511
512   if (!TREE_SIDE_EFFECTS (body))
513     return;
514
515   cond = *cond_p;
516   *cond_p = boolean_true_node;
517
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);
524 }
525
526 /* Finish a goto-statement.  */
527
528 tree
529 finish_goto_stmt (tree destination)
530 {
531   if (TREE_CODE (destination) == IDENTIFIER_NODE)
532     destination = lookup_label (destination);
533
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
539     {
540       destination = mark_rvalue_use (destination);
541       if (!processing_template_decl)
542         {
543           destination = cp_convert (ptr_type_node, destination);
544           if (error_operand_p (destination))
545             return NULL_TREE;
546         }
547       /* We don't inline calls to functions with computed gotos.
548          Those functions are typically up to some funny business,
549          and may be depending on the labels being at particular
550          addresses, or some such.  */
551       DECL_UNINLINABLE (current_function_decl) = 1;
552     }
553
554   check_goto (destination);
555
556   return add_stmt (build_stmt (input_location, GOTO_EXPR, destination));
557 }
558
559 /* COND is the condition-expression for an if, while, etc.,
560    statement.  Convert it to a boolean value, if appropriate.
561    In addition, verify sequence points if -Wsequence-point is enabled.  */
562
563 static tree
564 maybe_convert_cond (tree cond)
565 {
566   /* Empty conditions remain empty.  */
567   if (!cond)
568     return NULL_TREE;
569
570   /* Wait until we instantiate templates before doing conversion.  */
571   if (processing_template_decl)
572     return cond;
573
574   if (warn_sequence_point)
575     verify_sequence_points (cond);
576
577   /* Do the conversion.  */
578   cond = convert_from_reference (cond);
579
580   if (TREE_CODE (cond) == MODIFY_EXPR
581       && !TREE_NO_WARNING (cond)
582       && warn_parentheses)
583     {
584       warning (OPT_Wparentheses,
585                "suggest parentheses around assignment used as truth value");
586       TREE_NO_WARNING (cond) = 1;
587     }
588
589   return condition_conversion (cond);
590 }
591
592 /* Finish an expression-statement, whose EXPRESSION is as indicated.  */
593
594 tree
595 finish_expr_stmt (tree expr)
596 {
597   tree r = NULL_TREE;
598
599   if (expr != NULL_TREE)
600     {
601       if (!processing_template_decl)
602         {
603           if (warn_sequence_point)
604             verify_sequence_points (expr);
605           expr = convert_to_void (expr, ICV_STATEMENT, tf_warning_or_error);
606         }
607       else if (!type_dependent_expression_p (expr))
608         convert_to_void (build_non_dependent_expr (expr), ICV_STATEMENT, 
609                          tf_warning_or_error);
610
611       if (check_for_bare_parameter_packs (expr))
612         expr = error_mark_node;
613
614       /* Simplification of inner statement expressions, compound exprs,
615          etc can result in us already having an EXPR_STMT.  */
616       if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
617         {
618           if (TREE_CODE (expr) != EXPR_STMT)
619             expr = build_stmt (input_location, EXPR_STMT, expr);
620           expr = maybe_cleanup_point_expr_void (expr);
621         }
622
623       r = add_stmt (expr);
624     }
625
626   finish_stmt ();
627
628   return r;
629 }
630
631
632 /* Begin an if-statement.  Returns a newly created IF_STMT if
633    appropriate.  */
634
635 tree
636 begin_if_stmt (void)
637 {
638   tree r, scope;
639   scope = do_pushlevel (sk_block);
640   r = build_stmt (input_location, IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
641   TREE_CHAIN (r) = scope;
642   begin_cond (&IF_COND (r));
643   return r;
644 }
645
646 /* Process the COND of an if-statement, which may be given by
647    IF_STMT.  */
648
649 void
650 finish_if_stmt_cond (tree cond, tree if_stmt)
651 {
652   finish_cond (&IF_COND (if_stmt), maybe_convert_cond (cond));
653   add_stmt (if_stmt);
654   THEN_CLAUSE (if_stmt) = push_stmt_list ();
655 }
656
657 /* Finish the then-clause of an if-statement, which may be given by
658    IF_STMT.  */
659
660 tree
661 finish_then_clause (tree if_stmt)
662 {
663   THEN_CLAUSE (if_stmt) = pop_stmt_list (THEN_CLAUSE (if_stmt));
664   return if_stmt;
665 }
666
667 /* Begin the else-clause of an if-statement.  */
668
669 void
670 begin_else_clause (tree if_stmt)
671 {
672   ELSE_CLAUSE (if_stmt) = push_stmt_list ();
673 }
674
675 /* Finish the else-clause of an if-statement, which may be given by
676    IF_STMT.  */
677
678 void
679 finish_else_clause (tree if_stmt)
680 {
681   ELSE_CLAUSE (if_stmt) = pop_stmt_list (ELSE_CLAUSE (if_stmt));
682 }
683
684 /* Finish an if-statement.  */
685
686 void
687 finish_if_stmt (tree if_stmt)
688 {
689   tree scope = TREE_CHAIN (if_stmt);
690   TREE_CHAIN (if_stmt) = NULL;
691   add_stmt (do_poplevel (scope));
692   finish_stmt ();
693 }
694
695 /* Begin a while-statement.  Returns a newly created WHILE_STMT if
696    appropriate.  */
697
698 tree
699 begin_while_stmt (void)
700 {
701   tree r;
702   r = build_stmt (input_location, WHILE_STMT, NULL_TREE, NULL_TREE);
703   add_stmt (r);
704   WHILE_BODY (r) = do_pushlevel (sk_block);
705   begin_cond (&WHILE_COND (r));
706   return r;
707 }
708
709 /* Process the COND of a while-statement, which may be given by
710    WHILE_STMT.  */
711
712 void
713 finish_while_stmt_cond (tree cond, tree while_stmt)
714 {
715   finish_cond (&WHILE_COND (while_stmt), maybe_convert_cond (cond));
716   simplify_loop_decl_cond (&WHILE_COND (while_stmt), WHILE_BODY (while_stmt));
717 }
718
719 /* Finish a while-statement, which may be given by WHILE_STMT.  */
720
721 void
722 finish_while_stmt (tree while_stmt)
723 {
724   WHILE_BODY (while_stmt) = do_poplevel (WHILE_BODY (while_stmt));
725   finish_stmt ();
726 }
727
728 /* Begin a do-statement.  Returns a newly created DO_STMT if
729    appropriate.  */
730
731 tree
732 begin_do_stmt (void)
733 {
734   tree r = build_stmt (input_location, DO_STMT, NULL_TREE, NULL_TREE);
735   add_stmt (r);
736   DO_BODY (r) = push_stmt_list ();
737   return r;
738 }
739
740 /* Finish the body of a do-statement, which may be given by DO_STMT.  */
741
742 void
743 finish_do_body (tree do_stmt)
744 {
745   tree body = DO_BODY (do_stmt) = pop_stmt_list (DO_BODY (do_stmt));
746
747   if (TREE_CODE (body) == STATEMENT_LIST && STATEMENT_LIST_TAIL (body))
748     body = STATEMENT_LIST_TAIL (body)->stmt;
749
750   if (IS_EMPTY_STMT (body))
751     warning (OPT_Wempty_body,
752             "suggest explicit braces around empty body in %<do%> statement");
753 }
754
755 /* Finish a do-statement, which may be given by DO_STMT, and whose
756    COND is as indicated.  */
757
758 void
759 finish_do_stmt (tree cond, tree do_stmt)
760 {
761   cond = maybe_convert_cond (cond);
762   DO_COND (do_stmt) = cond;
763   finish_stmt ();
764 }
765
766 /* Finish a return-statement.  The EXPRESSION returned, if any, is as
767    indicated.  */
768
769 tree
770 finish_return_stmt (tree expr)
771 {
772   tree r;
773   bool no_warning;
774
775   expr = check_return_expr (expr, &no_warning);
776
777   if (flag_openmp && !check_omp_return ())
778     return error_mark_node;
779   if (!processing_template_decl)
780     {
781       if (warn_sequence_point)
782         verify_sequence_points (expr);
783       
784       if (DECL_DESTRUCTOR_P (current_function_decl)
785           || (DECL_CONSTRUCTOR_P (current_function_decl)
786               && targetm.cxx.cdtor_returns_this ()))
787         {
788           /* Similarly, all destructors must run destructors for
789              base-classes before returning.  So, all returns in a
790              destructor get sent to the DTOR_LABEL; finish_function emits
791              code to return a value there.  */
792           return finish_goto_stmt (cdtor_label);
793         }
794     }
795
796   r = build_stmt (input_location, RETURN_EXPR, expr);
797   TREE_NO_WARNING (r) |= no_warning;
798   r = maybe_cleanup_point_expr_void (r);
799   r = add_stmt (r);
800   finish_stmt ();
801
802   return r;
803 }
804
805 /* Begin a for-statement.  Returns a new FOR_STMT if appropriate.  */
806
807 tree
808 begin_for_stmt (void)
809 {
810   tree r;
811
812   r = build_stmt (input_location, FOR_STMT, NULL_TREE, NULL_TREE,
813                   NULL_TREE, NULL_TREE);
814
815   if (flag_new_for_scope > 0)
816     TREE_CHAIN (r) = do_pushlevel (sk_for);
817
818   if (processing_template_decl)
819     FOR_INIT_STMT (r) = push_stmt_list ();
820
821   return r;
822 }
823
824 /* Finish the for-init-statement of a for-statement, which may be
825    given by FOR_STMT.  */
826
827 void
828 finish_for_init_stmt (tree for_stmt)
829 {
830   if (processing_template_decl)
831     FOR_INIT_STMT (for_stmt) = pop_stmt_list (FOR_INIT_STMT (for_stmt));
832   add_stmt (for_stmt);
833   FOR_BODY (for_stmt) = do_pushlevel (sk_block);
834   begin_cond (&FOR_COND (for_stmt));
835 }
836
837 /* Finish the COND of a for-statement, which may be given by
838    FOR_STMT.  */
839
840 void
841 finish_for_cond (tree cond, tree for_stmt)
842 {
843   finish_cond (&FOR_COND (for_stmt), maybe_convert_cond (cond));
844   simplify_loop_decl_cond (&FOR_COND (for_stmt), FOR_BODY (for_stmt));
845 }
846
847 /* Finish the increment-EXPRESSION in a for-statement, which may be
848    given by FOR_STMT.  */
849
850 void
851 finish_for_expr (tree expr, tree for_stmt)
852 {
853   if (!expr)
854     return;
855   /* If EXPR is an overloaded function, issue an error; there is no
856      context available to use to perform overload resolution.  */
857   if (type_unknown_p (expr))
858     {
859       cxx_incomplete_type_error (expr, TREE_TYPE (expr));
860       expr = error_mark_node;
861     }
862   if (!processing_template_decl)
863     {
864       if (warn_sequence_point)
865         verify_sequence_points (expr);
866       expr = convert_to_void (expr, ICV_THIRD_IN_FOR,
867                               tf_warning_or_error);
868     }
869   else if (!type_dependent_expression_p (expr))
870     convert_to_void (build_non_dependent_expr (expr), ICV_THIRD_IN_FOR,
871                      tf_warning_or_error);
872   expr = maybe_cleanup_point_expr_void (expr);
873   if (check_for_bare_parameter_packs (expr))
874     expr = error_mark_node;
875   FOR_EXPR (for_stmt) = expr;
876 }
877
878 /* Finish the body of a for-statement, which may be given by
879    FOR_STMT.  The increment-EXPR for the loop must be
880    provided.
881    It can also finish RANGE_FOR_STMT. */
882
883 void
884 finish_for_stmt (tree for_stmt)
885 {
886   if (TREE_CODE (for_stmt) == RANGE_FOR_STMT)
887     RANGE_FOR_BODY (for_stmt) = do_poplevel (RANGE_FOR_BODY (for_stmt));
888   else
889     FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt));
890
891   /* Pop the scope for the body of the loop.  */
892   if (flag_new_for_scope > 0)
893     {
894       tree scope = TREE_CHAIN (for_stmt);
895       TREE_CHAIN (for_stmt) = NULL;
896       add_stmt (do_poplevel (scope));
897     }
898
899   finish_stmt ();
900 }
901
902 /* Begin a range-for-statement.  Returns a new RANGE_FOR_STMT.
903    To finish it call finish_for_stmt(). */
904
905 tree
906 begin_range_for_stmt (void)
907 {
908   tree r;
909
910   r = build_stmt (input_location, RANGE_FOR_STMT,
911                   NULL_TREE, NULL_TREE, NULL_TREE);
912
913   if (flag_new_for_scope > 0)
914     TREE_CHAIN (r) = do_pushlevel (sk_for);
915
916   return r;
917 }
918
919 /* Finish the head of a range-based for statement, which may
920    be given by RANGE_FOR_STMT. DECL must be the declaration
921    and EXPR must be the loop expression. */
922
923 void
924 finish_range_for_decl (tree range_for_stmt, tree decl, tree expr)
925 {
926   RANGE_FOR_DECL (range_for_stmt) = decl;
927   RANGE_FOR_EXPR (range_for_stmt) = expr;
928   add_stmt (range_for_stmt);
929   RANGE_FOR_BODY (range_for_stmt) = do_pushlevel (sk_block);
930 }
931
932 /* Finish a break-statement.  */
933
934 tree
935 finish_break_stmt (void)
936 {
937   return add_stmt (build_stmt (input_location, BREAK_STMT));
938 }
939
940 /* Finish a continue-statement.  */
941
942 tree
943 finish_continue_stmt (void)
944 {
945   return add_stmt (build_stmt (input_location, CONTINUE_STMT));
946 }
947
948 /* Begin a switch-statement.  Returns a new SWITCH_STMT if
949    appropriate.  */
950
951 tree
952 begin_switch_stmt (void)
953 {
954   tree r, scope;
955
956   r = build_stmt (input_location, SWITCH_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
957
958   scope = do_pushlevel (sk_block);
959   TREE_CHAIN (r) = scope;
960   begin_cond (&SWITCH_STMT_COND (r));
961
962   return r;
963 }
964
965 /* Finish the cond of a switch-statement.  */
966
967 void
968 finish_switch_cond (tree cond, tree switch_stmt)
969 {
970   tree orig_type = NULL;
971   if (!processing_template_decl)
972     {
973       /* Convert the condition to an integer or enumeration type.  */
974       cond = build_expr_type_conversion (WANT_INT | WANT_ENUM, cond, true);
975       if (cond == NULL_TREE)
976         {
977           error ("switch quantity not an integer");
978           cond = error_mark_node;
979         }
980       orig_type = TREE_TYPE (cond);
981       if (cond != error_mark_node)
982         {
983           /* [stmt.switch]
984
985              Integral promotions are performed.  */
986           cond = perform_integral_promotions (cond);
987           cond = maybe_cleanup_point_expr (cond);
988         }
989     }
990   if (check_for_bare_parameter_packs (cond))
991     cond = error_mark_node;
992   else if (!processing_template_decl && warn_sequence_point)
993     verify_sequence_points (cond);
994
995   finish_cond (&SWITCH_STMT_COND (switch_stmt), cond);
996   SWITCH_STMT_TYPE (switch_stmt) = orig_type;
997   add_stmt (switch_stmt);
998   push_switch (switch_stmt);
999   SWITCH_STMT_BODY (switch_stmt) = push_stmt_list ();
1000 }
1001
1002 /* Finish the body of a switch-statement, which may be given by
1003    SWITCH_STMT.  The COND to switch on is indicated.  */
1004
1005 void
1006 finish_switch_stmt (tree switch_stmt)
1007 {
1008   tree scope;
1009
1010   SWITCH_STMT_BODY (switch_stmt) =
1011     pop_stmt_list (SWITCH_STMT_BODY (switch_stmt));
1012   pop_switch ();
1013   finish_stmt ();
1014
1015   scope = TREE_CHAIN (switch_stmt);
1016   TREE_CHAIN (switch_stmt) = NULL;
1017   add_stmt (do_poplevel (scope));
1018 }
1019
1020 /* Begin a try-block.  Returns a newly-created TRY_BLOCK if
1021    appropriate.  */
1022
1023 tree
1024 begin_try_block (void)
1025 {
1026   tree r = build_stmt (input_location, TRY_BLOCK, NULL_TREE, NULL_TREE);
1027   add_stmt (r);
1028   TRY_STMTS (r) = push_stmt_list ();
1029   return r;
1030 }
1031
1032 /* Likewise, for a function-try-block.  The block returned in
1033    *COMPOUND_STMT is an artificial outer scope, containing the
1034    function-try-block.  */
1035
1036 tree
1037 begin_function_try_block (tree *compound_stmt)
1038 {
1039   tree r;
1040   /* This outer scope does not exist in the C++ standard, but we need
1041      a place to put __FUNCTION__ and similar variables.  */
1042   *compound_stmt = begin_compound_stmt (0);
1043   r = begin_try_block ();
1044   FN_TRY_BLOCK_P (r) = 1;
1045   return r;
1046 }
1047
1048 /* Finish a try-block, which may be given by TRY_BLOCK.  */
1049
1050 void
1051 finish_try_block (tree try_block)
1052 {
1053   TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1054   TRY_HANDLERS (try_block) = push_stmt_list ();
1055 }
1056
1057 /* Finish the body of a cleanup try-block, which may be given by
1058    TRY_BLOCK.  */
1059
1060 void
1061 finish_cleanup_try_block (tree try_block)
1062 {
1063   TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1064 }
1065
1066 /* Finish an implicitly generated try-block, with a cleanup is given
1067    by CLEANUP.  */
1068
1069 void
1070 finish_cleanup (tree cleanup, tree try_block)
1071 {
1072   TRY_HANDLERS (try_block) = cleanup;
1073   CLEANUP_P (try_block) = 1;
1074 }
1075
1076 /* Likewise, for a function-try-block.  */
1077
1078 void
1079 finish_function_try_block (tree try_block)
1080 {
1081   finish_try_block (try_block);
1082   /* FIXME : something queer about CTOR_INITIALIZER somehow following
1083      the try block, but moving it inside.  */
1084   in_function_try_handler = 1;
1085 }
1086
1087 /* Finish a handler-sequence for a try-block, which may be given by
1088    TRY_BLOCK.  */
1089
1090 void
1091 finish_handler_sequence (tree try_block)
1092 {
1093   TRY_HANDLERS (try_block) = pop_stmt_list (TRY_HANDLERS (try_block));
1094   check_handlers (TRY_HANDLERS (try_block));
1095 }
1096
1097 /* Finish the handler-seq for a function-try-block, given by
1098    TRY_BLOCK.  COMPOUND_STMT is the outer block created by
1099    begin_function_try_block.  */
1100
1101 void
1102 finish_function_handler_sequence (tree try_block, tree compound_stmt)
1103 {
1104   in_function_try_handler = 0;
1105   finish_handler_sequence (try_block);
1106   finish_compound_stmt (compound_stmt);
1107 }
1108
1109 /* Begin a handler.  Returns a HANDLER if appropriate.  */
1110
1111 tree
1112 begin_handler (void)
1113 {
1114   tree r;
1115
1116   r = build_stmt (input_location, HANDLER, NULL_TREE, NULL_TREE);
1117   add_stmt (r);
1118
1119   /* Create a binding level for the eh_info and the exception object
1120      cleanup.  */
1121   HANDLER_BODY (r) = do_pushlevel (sk_catch);
1122
1123   return r;
1124 }
1125
1126 /* Finish the handler-parameters for a handler, which may be given by
1127    HANDLER.  DECL is the declaration for the catch parameter, or NULL
1128    if this is a `catch (...)' clause.  */
1129
1130 void
1131 finish_handler_parms (tree decl, tree handler)
1132 {
1133   tree type = NULL_TREE;
1134   if (processing_template_decl)
1135     {
1136       if (decl)
1137         {
1138           decl = pushdecl (decl);
1139           decl = push_template_decl (decl);
1140           HANDLER_PARMS (handler) = decl;
1141           type = TREE_TYPE (decl);
1142         }
1143     }
1144   else
1145     type = expand_start_catch_block (decl);
1146   HANDLER_TYPE (handler) = type;
1147   if (!processing_template_decl && type)
1148     mark_used (eh_type_info (type));
1149 }
1150
1151 /* Finish a handler, which may be given by HANDLER.  The BLOCKs are
1152    the return value from the matching call to finish_handler_parms.  */
1153
1154 void
1155 finish_handler (tree handler)
1156 {
1157   if (!processing_template_decl)
1158     expand_end_catch_block ();
1159   HANDLER_BODY (handler) = do_poplevel (HANDLER_BODY (handler));
1160 }
1161
1162 /* Begin a compound statement.  FLAGS contains some bits that control the
1163    behavior and context.  If BCS_NO_SCOPE is set, the compound statement
1164    does not define a scope.  If BCS_FN_BODY is set, this is the outermost
1165    block of a function.  If BCS_TRY_BLOCK is set, this is the block
1166    created on behalf of a TRY statement.  Returns a token to be passed to
1167    finish_compound_stmt.  */
1168
1169 tree
1170 begin_compound_stmt (unsigned int flags)
1171 {
1172   tree r;
1173
1174   if (flags & BCS_NO_SCOPE)
1175     {
1176       r = push_stmt_list ();
1177       STATEMENT_LIST_NO_SCOPE (r) = 1;
1178
1179       /* Normally, we try hard to keep the BLOCK for a statement-expression.
1180          But, if it's a statement-expression with a scopeless block, there's
1181          nothing to keep, and we don't want to accidentally keep a block
1182          *inside* the scopeless block.  */
1183       keep_next_level (false);
1184     }
1185   else
1186     r = do_pushlevel (flags & BCS_TRY_BLOCK ? sk_try : sk_block);
1187
1188   /* When processing a template, we need to remember where the braces were,
1189      so that we can set up identical scopes when instantiating the template
1190      later.  BIND_EXPR is a handy candidate for this.
1191      Note that do_poplevel won't create a BIND_EXPR itself here (and thus
1192      result in nested BIND_EXPRs), since we don't build BLOCK nodes when
1193      processing templates.  */
1194   if (processing_template_decl)
1195     {
1196       r = build3 (BIND_EXPR, NULL, NULL, r, NULL);
1197       BIND_EXPR_TRY_BLOCK (r) = (flags & BCS_TRY_BLOCK) != 0;
1198       BIND_EXPR_BODY_BLOCK (r) = (flags & BCS_FN_BODY) != 0;
1199       TREE_SIDE_EFFECTS (r) = 1;
1200     }
1201
1202   return r;
1203 }
1204
1205 /* Finish a compound-statement, which is given by STMT.  */
1206
1207 void
1208 finish_compound_stmt (tree stmt)
1209 {
1210   if (TREE_CODE (stmt) == BIND_EXPR)
1211     {
1212       tree body = do_poplevel (BIND_EXPR_BODY (stmt));
1213       /* If the STATEMENT_LIST is empty and this BIND_EXPR isn't special,
1214          discard the BIND_EXPR so it can be merged with the containing
1215          STATEMENT_LIST.  */
1216       if (TREE_CODE (body) == STATEMENT_LIST
1217           && STATEMENT_LIST_HEAD (body) == NULL
1218           && !BIND_EXPR_BODY_BLOCK (stmt)
1219           && !BIND_EXPR_TRY_BLOCK (stmt))
1220         stmt = body;
1221       else
1222         BIND_EXPR_BODY (stmt) = body;
1223     }
1224   else if (STATEMENT_LIST_NO_SCOPE (stmt))
1225     stmt = pop_stmt_list (stmt);
1226   else
1227     {
1228       /* Destroy any ObjC "super" receivers that may have been
1229          created.  */
1230       objc_clear_super_receiver ();
1231
1232       stmt = do_poplevel (stmt);
1233     }
1234
1235   /* ??? See c_end_compound_stmt wrt statement expressions.  */
1236   add_stmt (stmt);
1237   finish_stmt ();
1238 }
1239
1240 /* Finish an asm-statement, whose components are a STRING, some
1241    OUTPUT_OPERANDS, some INPUT_OPERANDS, some CLOBBERS and some
1242    LABELS.  Also note whether the asm-statement should be
1243    considered volatile.  */
1244
1245 tree
1246 finish_asm_stmt (int volatile_p, tree string, tree output_operands,
1247                  tree input_operands, tree clobbers, tree labels)
1248 {
1249   tree r;
1250   tree t;
1251   int ninputs = list_length (input_operands);
1252   int noutputs = list_length (output_operands);
1253
1254   if (!processing_template_decl)
1255     {
1256       const char *constraint;
1257       const char **oconstraints;
1258       bool allows_mem, allows_reg, is_inout;
1259       tree operand;
1260       int i;
1261
1262       oconstraints = XALLOCAVEC (const char *, noutputs);
1263
1264       string = resolve_asm_operand_names (string, output_operands,
1265                                           input_operands, labels);
1266
1267       for (i = 0, t = output_operands; t; t = TREE_CHAIN (t), ++i)
1268         {
1269           operand = TREE_VALUE (t);
1270
1271           /* ??? Really, this should not be here.  Users should be using a
1272              proper lvalue, dammit.  But there's a long history of using
1273              casts in the output operands.  In cases like longlong.h, this
1274              becomes a primitive form of typechecking -- if the cast can be
1275              removed, then the output operand had a type of the proper width;
1276              otherwise we'll get an error.  Gross, but ...  */
1277           STRIP_NOPS (operand);
1278
1279           operand = mark_lvalue_use (operand);
1280
1281           if (!lvalue_or_else (operand, lv_asm, tf_warning_or_error))
1282             operand = error_mark_node;
1283
1284           if (operand != error_mark_node
1285               && (TREE_READONLY (operand)
1286                   || CP_TYPE_CONST_P (TREE_TYPE (operand))
1287                   /* Functions are not modifiable, even though they are
1288                      lvalues.  */
1289                   || TREE_CODE (TREE_TYPE (operand)) == FUNCTION_TYPE
1290                   || TREE_CODE (TREE_TYPE (operand)) == METHOD_TYPE
1291                   /* If it's an aggregate and any field is const, then it is
1292                      effectively const.  */
1293                   || (CLASS_TYPE_P (TREE_TYPE (operand))
1294                       && C_TYPE_FIELDS_READONLY (TREE_TYPE (operand)))))
1295             readonly_error (operand, REK_ASSIGNMENT_ASM);
1296
1297           constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1298           oconstraints[i] = constraint;
1299
1300           if (parse_output_constraint (&constraint, i, ninputs, noutputs,
1301                                        &allows_mem, &allows_reg, &is_inout))
1302             {
1303               /* If the operand is going to end up in memory,
1304                  mark it addressable.  */
1305               if (!allows_reg && !cxx_mark_addressable (operand))
1306                 operand = error_mark_node;
1307             }
1308           else
1309             operand = error_mark_node;
1310
1311           TREE_VALUE (t) = operand;
1312         }
1313
1314       for (i = 0, t = input_operands; t; ++i, t = TREE_CHAIN (t))
1315         {
1316           constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1317           operand = decay_conversion (TREE_VALUE (t));
1318
1319           /* If the type of the operand hasn't been determined (e.g.,
1320              because it involves an overloaded function), then issue
1321              an error message.  There's no context available to
1322              resolve the overloading.  */
1323           if (TREE_TYPE (operand) == unknown_type_node)
1324             {
1325               error ("type of asm operand %qE could not be determined",
1326                      TREE_VALUE (t));
1327               operand = error_mark_node;
1328             }
1329
1330           if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
1331                                       oconstraints, &allows_mem, &allows_reg))
1332             {
1333               /* If the operand is going to end up in memory,
1334                  mark it addressable.  */
1335               if (!allows_reg && allows_mem)
1336                 {
1337                   /* Strip the nops as we allow this case.  FIXME, this really
1338                      should be rejected or made deprecated.  */
1339                   STRIP_NOPS (operand);
1340                   if (!cxx_mark_addressable (operand))
1341                     operand = error_mark_node;
1342                 }
1343             }
1344           else
1345             operand = error_mark_node;
1346
1347           TREE_VALUE (t) = operand;
1348         }
1349     }
1350
1351   r = build_stmt (input_location, ASM_EXPR, string,
1352                   output_operands, input_operands,
1353                   clobbers, labels);
1354   ASM_VOLATILE_P (r) = volatile_p || noutputs == 0;
1355   r = maybe_cleanup_point_expr_void (r);
1356   return add_stmt (r);
1357 }
1358
1359 /* Finish a label with the indicated NAME.  Returns the new label.  */
1360
1361 tree
1362 finish_label_stmt (tree name)
1363 {
1364   tree decl = define_label (input_location, name);
1365
1366   if (decl == error_mark_node)
1367     return error_mark_node;
1368
1369   add_stmt (build_stmt (input_location, LABEL_EXPR, decl));
1370
1371   return decl;
1372 }
1373
1374 /* Finish a series of declarations for local labels.  G++ allows users
1375    to declare "local" labels, i.e., labels with scope.  This extension
1376    is useful when writing code involving statement-expressions.  */
1377
1378 void
1379 finish_label_decl (tree name)
1380 {
1381   if (!at_function_scope_p ())
1382     {
1383       error ("__label__ declarations are only allowed in function scopes");
1384       return;
1385     }
1386
1387   add_decl_expr (declare_local_label (name));
1388 }
1389
1390 /* When DECL goes out of scope, make sure that CLEANUP is executed.  */
1391
1392 void
1393 finish_decl_cleanup (tree decl, tree cleanup)
1394 {
1395   push_cleanup (decl, cleanup, false);
1396 }
1397
1398 /* If the current scope exits with an exception, run CLEANUP.  */
1399
1400 void
1401 finish_eh_cleanup (tree cleanup)
1402 {
1403   push_cleanup (NULL, cleanup, true);
1404 }
1405
1406 /* The MEM_INITS is a list of mem-initializers, in reverse of the
1407    order they were written by the user.  Each node is as for
1408    emit_mem_initializers.  */
1409
1410 void
1411 finish_mem_initializers (tree mem_inits)
1412 {
1413   /* Reorder the MEM_INITS so that they are in the order they appeared
1414      in the source program.  */
1415   mem_inits = nreverse (mem_inits);
1416
1417   if (processing_template_decl)
1418     {
1419       tree mem;
1420
1421       for (mem = mem_inits; mem; mem = TREE_CHAIN (mem))
1422         {
1423           /* If the TREE_PURPOSE is a TYPE_PACK_EXPANSION, skip the
1424              check for bare parameter packs in the TREE_VALUE, because
1425              any parameter packs in the TREE_VALUE have already been
1426              bound as part of the TREE_PURPOSE.  See
1427              make_pack_expansion for more information.  */
1428           if (TREE_CODE (TREE_PURPOSE (mem)) != TYPE_PACK_EXPANSION
1429               && check_for_bare_parameter_packs (TREE_VALUE (mem)))
1430             TREE_VALUE (mem) = error_mark_node;
1431         }
1432
1433       add_stmt (build_min_nt (CTOR_INITIALIZER, mem_inits));
1434     }
1435   else
1436     emit_mem_initializers (mem_inits);
1437 }
1438
1439 /* Finish a parenthesized expression EXPR.  */
1440
1441 tree
1442 finish_parenthesized_expr (tree expr)
1443 {
1444   if (EXPR_P (expr))
1445     /* This inhibits warnings in c_common_truthvalue_conversion.  */
1446     TREE_NO_WARNING (expr) = 1;
1447
1448   if (TREE_CODE (expr) == OFFSET_REF)
1449     /* [expr.unary.op]/3 The qualified id of a pointer-to-member must not be
1450        enclosed in parentheses.  */
1451     PTRMEM_OK_P (expr) = 0;
1452
1453   if (TREE_CODE (expr) == STRING_CST)
1454     PAREN_STRING_LITERAL_P (expr) = 1;
1455
1456   return expr;
1457 }
1458
1459 /* Finish a reference to a non-static data member (DECL) that is not
1460    preceded by `.' or `->'.  */
1461
1462 tree
1463 finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
1464 {
1465   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
1466
1467   if (!object)
1468     {
1469       tree scope = qualifying_scope;
1470       if (scope == NULL_TREE)
1471         scope = context_for_name_lookup (decl);
1472       object = maybe_dummy_object (scope, NULL);
1473     }
1474
1475   /* DR 613: Can use non-static data members without an associated
1476      object in sizeof/decltype/alignof.  */
1477   if (is_dummy_object (object) && cp_unevaluated_operand == 0
1478       && (!processing_template_decl || !current_class_ref))
1479     {
1480       if (current_function_decl
1481           && DECL_STATIC_FUNCTION_P (current_function_decl))
1482         error ("invalid use of member %q+D in static member function", decl);
1483       else
1484         error ("invalid use of non-static data member %q+D", decl);
1485       error ("from this location");
1486
1487       return error_mark_node;
1488     }
1489
1490   if (current_class_ptr)
1491     TREE_USED (current_class_ptr) = 1;
1492   if (processing_template_decl && !qualifying_scope)
1493     {
1494       tree type = TREE_TYPE (decl);
1495
1496       if (TREE_CODE (type) == REFERENCE_TYPE)
1497         type = TREE_TYPE (type);
1498       else
1499         {
1500           /* Set the cv qualifiers.  */
1501           int quals = (current_class_ref
1502                        ? cp_type_quals (TREE_TYPE (current_class_ref))
1503                        : TYPE_UNQUALIFIED);
1504
1505           if (DECL_MUTABLE_P (decl))
1506             quals &= ~TYPE_QUAL_CONST;
1507
1508           quals |= cp_type_quals (TREE_TYPE (decl));
1509           type = cp_build_qualified_type (type, quals);
1510         }
1511
1512       return build_min (COMPONENT_REF, type, object, decl, NULL_TREE);
1513     }
1514   /* If PROCESSING_TEMPLATE_DECL is nonzero here, then
1515      QUALIFYING_SCOPE is also non-null.  Wrap this in a SCOPE_REF
1516      for now.  */
1517   else if (processing_template_decl)
1518     return build_qualified_name (TREE_TYPE (decl),
1519                                  qualifying_scope,
1520                                  DECL_NAME (decl),
1521                                  /*template_p=*/false);
1522   else
1523     {
1524       tree access_type = TREE_TYPE (object);
1525
1526       perform_or_defer_access_check (TYPE_BINFO (access_type), decl,
1527                                      decl);
1528
1529       /* If the data member was named `C::M', convert `*this' to `C'
1530          first.  */
1531       if (qualifying_scope)
1532         {
1533           tree binfo = NULL_TREE;
1534           object = build_scoped_ref (object, qualifying_scope,
1535                                      &binfo);
1536         }
1537
1538       return build_class_member_access_expr (object, decl,
1539                                              /*access_path=*/NULL_TREE,
1540                                              /*preserve_reference=*/false,
1541                                              tf_warning_or_error);
1542     }
1543 }
1544
1545 /* If we are currently parsing a template and we encountered a typedef
1546    TYPEDEF_DECL that is being accessed though CONTEXT, this function
1547    adds the typedef to a list tied to the current template.
1548    At tempate instantiatin time, that list is walked and access check
1549    performed for each typedef.
1550    LOCATION is the location of the usage point of TYPEDEF_DECL.  */
1551
1552 void
1553 add_typedef_to_current_template_for_access_check (tree typedef_decl,
1554                                                   tree context,
1555                                                   location_t location)
1556 {
1557     tree template_info = NULL;
1558     tree cs = current_scope ();
1559
1560     if (!is_typedef_decl (typedef_decl)
1561         || !context
1562         || !CLASS_TYPE_P (context)
1563         || !cs)
1564       return;
1565
1566     if (CLASS_TYPE_P (cs) || TREE_CODE (cs) == FUNCTION_DECL)
1567       template_info = get_template_info (cs);
1568
1569     if (template_info
1570         && TI_TEMPLATE (template_info)
1571         && !currently_open_class (context))
1572       append_type_to_template_for_access_check (cs, typedef_decl,
1573                                                 context, location);
1574 }
1575
1576 /* DECL was the declaration to which a qualified-id resolved.  Issue
1577    an error message if it is not accessible.  If OBJECT_TYPE is
1578    non-NULL, we have just seen `x->' or `x.' and OBJECT_TYPE is the
1579    type of `*x', or `x', respectively.  If the DECL was named as
1580    `A::B' then NESTED_NAME_SPECIFIER is `A'.  */
1581
1582 void
1583 check_accessibility_of_qualified_id (tree decl,
1584                                      tree object_type,
1585                                      tree nested_name_specifier)
1586 {
1587   tree scope;
1588   tree qualifying_type = NULL_TREE;
1589
1590   /* If we are parsing a template declaration and if decl is a typedef,
1591      add it to a list tied to the template.
1592      At template instantiation time, that list will be walked and
1593      access check performed.  */
1594   add_typedef_to_current_template_for_access_check (decl,
1595                                                     nested_name_specifier
1596                                                     ? nested_name_specifier
1597                                                     : DECL_CONTEXT (decl),
1598                                                     input_location);
1599
1600   /* If we're not checking, return immediately.  */
1601   if (deferred_access_no_check)
1602     return;
1603
1604   /* Determine the SCOPE of DECL.  */
1605   scope = context_for_name_lookup (decl);
1606   /* If the SCOPE is not a type, then DECL is not a member.  */
1607   if (!TYPE_P (scope))
1608     return;
1609   /* Compute the scope through which DECL is being accessed.  */
1610   if (object_type
1611       /* OBJECT_TYPE might not be a class type; consider:
1612
1613            class A { typedef int I; };
1614            I *p;
1615            p->A::I::~I();
1616
1617          In this case, we will have "A::I" as the DECL, but "I" as the
1618          OBJECT_TYPE.  */
1619       && CLASS_TYPE_P (object_type)
1620       && DERIVED_FROM_P (scope, object_type))
1621     /* If we are processing a `->' or `.' expression, use the type of the
1622        left-hand side.  */
1623     qualifying_type = object_type;
1624   else if (nested_name_specifier)
1625     {
1626       /* If the reference is to a non-static member of the
1627          current class, treat it as if it were referenced through
1628          `this'.  */
1629       if (DECL_NONSTATIC_MEMBER_P (decl)
1630           && current_class_ptr
1631           && DERIVED_FROM_P (scope, current_class_type))
1632         qualifying_type = current_class_type;
1633       /* Otherwise, use the type indicated by the
1634          nested-name-specifier.  */
1635       else
1636         qualifying_type = nested_name_specifier;
1637     }
1638   else
1639     /* Otherwise, the name must be from the current class or one of
1640        its bases.  */
1641     qualifying_type = currently_open_derived_class (scope);
1642
1643   if (qualifying_type 
1644       /* It is possible for qualifying type to be a TEMPLATE_TYPE_PARM
1645          or similar in a default argument value.  */
1646       && CLASS_TYPE_P (qualifying_type)
1647       && !dependent_type_p (qualifying_type))
1648     perform_or_defer_access_check (TYPE_BINFO (qualifying_type), decl,
1649                                    decl);
1650 }
1651
1652 /* EXPR is the result of a qualified-id.  The QUALIFYING_CLASS was the
1653    class named to the left of the "::" operator.  DONE is true if this
1654    expression is a complete postfix-expression; it is false if this
1655    expression is followed by '->', '[', '(', etc.  ADDRESS_P is true
1656    iff this expression is the operand of '&'.  TEMPLATE_P is true iff
1657    the qualified-id was of the form "A::template B".  TEMPLATE_ARG_P
1658    is true iff this qualified name appears as a template argument.  */
1659
1660 tree
1661 finish_qualified_id_expr (tree qualifying_class,
1662                           tree expr,
1663                           bool done,
1664                           bool address_p,
1665                           bool template_p,
1666                           bool template_arg_p)
1667 {
1668   gcc_assert (TYPE_P (qualifying_class));
1669
1670   if (error_operand_p (expr))
1671     return error_mark_node;
1672
1673   if (DECL_P (expr) || BASELINK_P (expr))
1674     mark_used (expr);
1675
1676   if (template_p)
1677     check_template_keyword (expr);
1678
1679   /* If EXPR occurs as the operand of '&', use special handling that
1680      permits a pointer-to-member.  */
1681   if (address_p && done)
1682     {
1683       if (TREE_CODE (expr) == SCOPE_REF)
1684         expr = TREE_OPERAND (expr, 1);
1685       expr = build_offset_ref (qualifying_class, expr,
1686                                /*address_p=*/true);
1687       return expr;
1688     }
1689
1690   /* Within the scope of a class, turn references to non-static
1691      members into expression of the form "this->...".  */
1692   if (template_arg_p)
1693     /* But, within a template argument, we do not want make the
1694        transformation, as there is no "this" pointer.  */
1695     ;
1696   else if (TREE_CODE (expr) == FIELD_DECL)
1697     {
1698       push_deferring_access_checks (dk_no_check);
1699       expr = finish_non_static_data_member (expr, NULL_TREE,
1700                                             qualifying_class);
1701       pop_deferring_access_checks ();
1702     }
1703   else if (BASELINK_P (expr) && !processing_template_decl)
1704     {
1705       tree ob;
1706
1707       /* See if any of the functions are non-static members.  */
1708       /* If so, the expression may be relative to 'this'.  */
1709       if (!shared_member_p (expr)
1710           && (ob = maybe_dummy_object (qualifying_class, NULL),
1711               !is_dummy_object (ob)))
1712         expr = (build_class_member_access_expr
1713                 (ob,
1714                  expr,
1715                  BASELINK_ACCESS_BINFO (expr),
1716                  /*preserve_reference=*/false,
1717                  tf_warning_or_error));
1718       else if (done)
1719         /* The expression is a qualified name whose address is not
1720            being taken.  */
1721         expr = build_offset_ref (qualifying_class, expr, /*address_p=*/false);
1722     }
1723
1724   return expr;
1725 }
1726
1727 /* Begin a statement-expression.  The value returned must be passed to
1728    finish_stmt_expr.  */
1729
1730 tree
1731 begin_stmt_expr (void)
1732 {
1733   return push_stmt_list ();
1734 }
1735
1736 /* Process the final expression of a statement expression. EXPR can be
1737    NULL, if the final expression is empty.  Return a STATEMENT_LIST
1738    containing all the statements in the statement-expression, or
1739    ERROR_MARK_NODE if there was an error.  */
1740
1741 tree
1742 finish_stmt_expr_expr (tree expr, tree stmt_expr)
1743 {
1744   if (error_operand_p (expr))
1745     {
1746       /* The type of the statement-expression is the type of the last
1747          expression.  */
1748       TREE_TYPE (stmt_expr) = error_mark_node;
1749       return error_mark_node;
1750     }
1751
1752   /* If the last statement does not have "void" type, then the value
1753      of the last statement is the value of the entire expression.  */
1754   if (expr)
1755     {
1756       tree type = TREE_TYPE (expr);
1757
1758       if (processing_template_decl)
1759         {
1760           expr = build_stmt (input_location, EXPR_STMT, expr);
1761           expr = add_stmt (expr);
1762           /* Mark the last statement so that we can recognize it as such at
1763              template-instantiation time.  */
1764           EXPR_STMT_STMT_EXPR_RESULT (expr) = 1;
1765         }
1766       else if (VOID_TYPE_P (type))
1767         {
1768           /* Just treat this like an ordinary statement.  */
1769           expr = finish_expr_stmt (expr);
1770         }
1771       else
1772         {
1773           /* It actually has a value we need to deal with.  First, force it
1774              to be an rvalue so that we won't need to build up a copy
1775              constructor call later when we try to assign it to something.  */
1776           expr = force_rvalue (expr);
1777           if (error_operand_p (expr))
1778             return error_mark_node;
1779
1780           /* Update for array-to-pointer decay.  */
1781           type = TREE_TYPE (expr);
1782
1783           /* Wrap it in a CLEANUP_POINT_EXPR and add it to the list like a
1784              normal statement, but don't convert to void or actually add
1785              the EXPR_STMT.  */
1786           if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
1787             expr = maybe_cleanup_point_expr (expr);
1788           add_stmt (expr);
1789         }
1790
1791       /* The type of the statement-expression is the type of the last
1792          expression.  */
1793       TREE_TYPE (stmt_expr) = type;
1794     }
1795
1796   return stmt_expr;
1797 }
1798
1799 /* Finish a statement-expression.  EXPR should be the value returned
1800    by the previous begin_stmt_expr.  Returns an expression
1801    representing the statement-expression.  */
1802
1803 tree
1804 finish_stmt_expr (tree stmt_expr, bool has_no_scope)
1805 {
1806   tree type;
1807   tree result;
1808
1809   if (error_operand_p (stmt_expr))
1810     {
1811       pop_stmt_list (stmt_expr);
1812       return error_mark_node;
1813     }
1814
1815   gcc_assert (TREE_CODE (stmt_expr) == STATEMENT_LIST);
1816
1817   type = TREE_TYPE (stmt_expr);
1818   result = pop_stmt_list (stmt_expr);
1819   TREE_TYPE (result) = type;
1820
1821   if (processing_template_decl)
1822     {
1823       result = build_min (STMT_EXPR, type, result);
1824       TREE_SIDE_EFFECTS (result) = 1;
1825       STMT_EXPR_NO_SCOPE (result) = has_no_scope;
1826     }
1827   else if (CLASS_TYPE_P (type))
1828     {
1829       /* Wrap the statement-expression in a TARGET_EXPR so that the
1830          temporary object created by the final expression is destroyed at
1831          the end of the full-expression containing the
1832          statement-expression.  */
1833       result = force_target_expr (type, result);
1834     }
1835
1836   return result;
1837 }
1838
1839 /* Returns the expression which provides the value of STMT_EXPR.  */
1840
1841 tree
1842 stmt_expr_value_expr (tree stmt_expr)
1843 {
1844   tree t = STMT_EXPR_STMT (stmt_expr);
1845
1846   if (TREE_CODE (t) == BIND_EXPR)
1847     t = BIND_EXPR_BODY (t);
1848
1849   if (TREE_CODE (t) == STATEMENT_LIST && STATEMENT_LIST_TAIL (t))
1850     t = STATEMENT_LIST_TAIL (t)->stmt;
1851
1852   if (TREE_CODE (t) == EXPR_STMT)
1853     t = EXPR_STMT_EXPR (t);
1854
1855   return t;
1856 }
1857
1858 /* Return TRUE iff EXPR_STMT is an empty list of
1859    expression statements.  */
1860
1861 bool
1862 empty_expr_stmt_p (tree expr_stmt)
1863 {
1864   tree body = NULL_TREE;
1865
1866   if (expr_stmt == void_zero_node)
1867     return true;
1868
1869   if (expr_stmt)
1870     {
1871       if (TREE_CODE (expr_stmt) == EXPR_STMT)
1872         body = EXPR_STMT_EXPR (expr_stmt);
1873       else if (TREE_CODE (expr_stmt) == STATEMENT_LIST)
1874         body = expr_stmt;
1875     }
1876
1877   if (body)
1878     {
1879       if (TREE_CODE (body) == STATEMENT_LIST)
1880         return tsi_end_p (tsi_start (body));
1881       else
1882         return empty_expr_stmt_p (body);
1883     }
1884   return false;
1885 }
1886
1887 /* Perform Koenig lookup.  FN is the postfix-expression representing
1888    the function (or functions) to call; ARGS are the arguments to the
1889    call; if INCLUDE_STD then the `std' namespace is automatically
1890    considered an associated namespace (used in range-based for loops).
1891    Returns the functions to be considered by overload resolution.  */
1892
1893 tree
1894 perform_koenig_lookup (tree fn, VEC(tree,gc) *args, bool include_std)
1895 {
1896   tree identifier = NULL_TREE;
1897   tree functions = NULL_TREE;
1898   tree tmpl_args = NULL_TREE;
1899   bool template_id = false;
1900
1901   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
1902     {
1903       /* Use a separate flag to handle null args.  */
1904       template_id = true;
1905       tmpl_args = TREE_OPERAND (fn, 1);
1906       fn = TREE_OPERAND (fn, 0);
1907     }
1908
1909   /* Find the name of the overloaded function.  */
1910   if (TREE_CODE (fn) == IDENTIFIER_NODE)
1911     identifier = fn;
1912   else if (is_overloaded_fn (fn))
1913     {
1914       functions = fn;
1915       identifier = DECL_NAME (get_first_fn (functions));
1916     }
1917   else if (DECL_P (fn))
1918     {
1919       functions = fn;
1920       identifier = DECL_NAME (fn);
1921     }
1922
1923   /* A call to a namespace-scope function using an unqualified name.
1924
1925      Do Koenig lookup -- unless any of the arguments are
1926      type-dependent.  */
1927   if (!any_type_dependent_arguments_p (args)
1928       && !any_dependent_template_arguments_p (tmpl_args))
1929     {
1930       fn = lookup_arg_dependent (identifier, functions, args, include_std);
1931       if (!fn)
1932         /* The unqualified name could not be resolved.  */
1933         fn = unqualified_fn_lookup_error (identifier);
1934     }
1935
1936   if (fn && template_id)
1937     fn = build2 (TEMPLATE_ID_EXPR, unknown_type_node, fn, tmpl_args);
1938   
1939   return fn;
1940 }
1941
1942 /* Generate an expression for `FN (ARGS)'.  This may change the
1943    contents of ARGS.
1944
1945    If DISALLOW_VIRTUAL is true, the call to FN will be not generated
1946    as a virtual call, even if FN is virtual.  (This flag is set when
1947    encountering an expression where the function name is explicitly
1948    qualified.  For example a call to `X::f' never generates a virtual
1949    call.)
1950
1951    Returns code for the call.  */
1952
1953 tree
1954 finish_call_expr (tree fn, VEC(tree,gc) **args, bool disallow_virtual,
1955                   bool koenig_p, tsubst_flags_t complain)
1956 {
1957   tree result;
1958   tree orig_fn;
1959   VEC(tree,gc) *orig_args = NULL;
1960
1961   if (fn == error_mark_node)
1962     return error_mark_node;
1963
1964   gcc_assert (!TYPE_P (fn));
1965
1966   orig_fn = fn;
1967
1968   if (processing_template_decl)
1969     {
1970       if (type_dependent_expression_p (fn)
1971           || any_type_dependent_arguments_p (*args))
1972         {
1973           result = build_nt_call_vec (fn, *args);
1974           KOENIG_LOOKUP_P (result) = koenig_p;
1975           if (cfun)
1976             {
1977               do
1978                 {
1979                   tree fndecl = OVL_CURRENT (fn);
1980                   if (TREE_CODE (fndecl) != FUNCTION_DECL
1981                       || !TREE_THIS_VOLATILE (fndecl))
1982                     break;
1983                   fn = OVL_NEXT (fn);
1984                 }
1985               while (fn);
1986               if (!fn)
1987                 current_function_returns_abnormally = 1;
1988             }
1989           return result;
1990         }
1991       orig_args = make_tree_vector_copy (*args);
1992       if (!BASELINK_P (fn)
1993           && TREE_CODE (fn) != PSEUDO_DTOR_EXPR
1994           && TREE_TYPE (fn) != unknown_type_node)
1995         fn = build_non_dependent_expr (fn);
1996       make_args_non_dependent (*args);
1997     }
1998
1999   if (is_overloaded_fn (fn))
2000     fn = baselink_for_fns (fn);
2001
2002   result = NULL_TREE;
2003   if (BASELINK_P (fn))
2004     {
2005       tree object;
2006
2007       /* A call to a member function.  From [over.call.func]:
2008
2009            If the keyword this is in scope and refers to the class of
2010            that member function, or a derived class thereof, then the
2011            function call is transformed into a qualified function call
2012            using (*this) as the postfix-expression to the left of the
2013            . operator.... [Otherwise] a contrived object of type T
2014            becomes the implied object argument.
2015
2016         In this situation:
2017
2018           struct A { void f(); };
2019           struct B : public A {};
2020           struct C : public A { void g() { B::f(); }};
2021
2022         "the class of that member function" refers to `A'.  But 11.2
2023         [class.access.base] says that we need to convert 'this' to B* as
2024         part of the access, so we pass 'B' to maybe_dummy_object.  */
2025
2026       object = maybe_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
2027                                    NULL);
2028
2029       if (processing_template_decl)
2030         {
2031           if (type_dependent_expression_p (object))
2032             {
2033               tree ret = build_nt_call_vec (orig_fn, orig_args);
2034               release_tree_vector (orig_args);
2035               return ret;
2036             }
2037           object = build_non_dependent_expr (object);
2038         }
2039
2040       result = build_new_method_call (object, fn, args, NULL_TREE,
2041                                       (disallow_virtual
2042                                        ? LOOKUP_NONVIRTUAL : 0),
2043                                       /*fn_p=*/NULL,
2044                                       complain);
2045     }
2046   else if (is_overloaded_fn (fn))
2047     {
2048       /* If the function is an overloaded builtin, resolve it.  */
2049       if (TREE_CODE (fn) == FUNCTION_DECL
2050           && (DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL
2051               || DECL_BUILT_IN_CLASS (fn) == BUILT_IN_MD))
2052         result = resolve_overloaded_builtin (input_location, fn, *args);
2053
2054       if (!result)
2055         /* A call to a namespace-scope function.  */
2056         result = build_new_function_call (fn, args, koenig_p, complain);
2057     }
2058   else if (TREE_CODE (fn) == PSEUDO_DTOR_EXPR)
2059     {
2060       if (!VEC_empty (tree, *args))
2061         error ("arguments to destructor are not allowed");
2062       /* Mark the pseudo-destructor call as having side-effects so
2063          that we do not issue warnings about its use.  */
2064       result = build1 (NOP_EXPR,
2065                        void_type_node,
2066                        TREE_OPERAND (fn, 0));
2067       TREE_SIDE_EFFECTS (result) = 1;
2068     }
2069   else if (CLASS_TYPE_P (TREE_TYPE (fn)))
2070     /* If the "function" is really an object of class type, it might
2071        have an overloaded `operator ()'.  */
2072     result = build_op_call (fn, args, complain);
2073
2074   if (!result)
2075     /* A call where the function is unknown.  */
2076     result = cp_build_function_call_vec (fn, args, complain);
2077
2078   if (processing_template_decl)
2079     {
2080       result = build_call_vec (TREE_TYPE (result), orig_fn, orig_args);
2081       KOENIG_LOOKUP_P (result) = koenig_p;
2082       release_tree_vector (orig_args);
2083     }
2084
2085   return result;
2086 }
2087
2088 /* Finish a call to a postfix increment or decrement or EXPR.  (Which
2089    is indicated by CODE, which should be POSTINCREMENT_EXPR or
2090    POSTDECREMENT_EXPR.)  */
2091
2092 tree
2093 finish_increment_expr (tree expr, enum tree_code code)
2094 {
2095   return build_x_unary_op (code, expr, tf_warning_or_error);
2096 }
2097
2098 /* Finish a use of `this'.  Returns an expression for `this'.  */
2099
2100 tree
2101 finish_this_expr (void)
2102 {
2103   tree result;
2104
2105   if (current_class_ptr)
2106     {
2107       tree type = TREE_TYPE (current_class_ref);
2108
2109       /* In a lambda expression, 'this' refers to the captured 'this'.  */
2110       if (LAMBDA_TYPE_P (type))
2111         result = lambda_expr_this_capture (CLASSTYPE_LAMBDA_EXPR (type));
2112       else
2113         result = current_class_ptr;
2114
2115     }
2116   else if (current_function_decl
2117            && DECL_STATIC_FUNCTION_P (current_function_decl))
2118     {
2119       error ("%<this%> is unavailable for static member functions");
2120       result = error_mark_node;
2121     }
2122   else
2123     {
2124       if (current_function_decl)
2125         error ("invalid use of %<this%> in non-member function");
2126       else
2127         error ("invalid use of %<this%> at top level");
2128       result = error_mark_node;
2129     }
2130
2131   return result;
2132 }
2133
2134 /* Finish a pseudo-destructor expression.  If SCOPE is NULL, the
2135    expression was of the form `OBJECT.~DESTRUCTOR' where DESTRUCTOR is
2136    the TYPE for the type given.  If SCOPE is non-NULL, the expression
2137    was of the form `OBJECT.SCOPE::~DESTRUCTOR'.  */
2138
2139 tree
2140 finish_pseudo_destructor_expr (tree object, tree scope, tree destructor)
2141 {
2142   if (object == error_mark_node || destructor == error_mark_node)
2143     return error_mark_node;
2144
2145   gcc_assert (TYPE_P (destructor));
2146
2147   if (!processing_template_decl)
2148     {
2149       if (scope == error_mark_node)
2150         {
2151           error ("invalid qualifying scope in pseudo-destructor name");
2152           return error_mark_node;
2153         }
2154       if (scope && TYPE_P (scope) && !check_dtor_name (scope, destructor))
2155         {
2156           error ("qualified type %qT does not match destructor name ~%qT",
2157                  scope, destructor);
2158           return error_mark_node;
2159         }
2160
2161
2162       /* [expr.pseudo] says both:
2163
2164            The type designated by the pseudo-destructor-name shall be
2165            the same as the object type.
2166
2167          and:
2168
2169            The cv-unqualified versions of the object type and of the
2170            type designated by the pseudo-destructor-name shall be the
2171            same type.
2172
2173          We implement the more generous second sentence, since that is
2174          what most other compilers do.  */
2175       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (object),
2176                                                       destructor))
2177         {
2178           error ("%qE is not of type %qT", object, destructor);
2179           return error_mark_node;
2180         }
2181     }
2182
2183   return build3 (PSEUDO_DTOR_EXPR, void_type_node, object, scope, destructor);
2184 }
2185
2186 /* Finish an expression of the form CODE EXPR.  */
2187
2188 tree
2189 finish_unary_op_expr (enum tree_code code, tree expr)
2190 {
2191   tree result = build_x_unary_op (code, expr, tf_warning_or_error);
2192   /* Inside a template, build_x_unary_op does not fold the
2193      expression. So check whether the result is folded before
2194      setting TREE_NEGATED_INT.  */
2195   if (code == NEGATE_EXPR && TREE_CODE (expr) == INTEGER_CST
2196       && TREE_CODE (result) == INTEGER_CST
2197       && !TYPE_UNSIGNED (TREE_TYPE (result))
2198       && INT_CST_LT (result, integer_zero_node))
2199     {
2200       /* RESULT may be a cached INTEGER_CST, so we must copy it before
2201          setting TREE_NEGATED_INT.  */
2202       result = copy_node (result);
2203       TREE_NEGATED_INT (result) = 1;
2204     }
2205   if (TREE_OVERFLOW_P (result) && !TREE_OVERFLOW_P (expr))
2206     overflow_warning (input_location, result);
2207
2208   return result;
2209 }
2210
2211 /* Finish a compound-literal expression.  TYPE is the type to which
2212    the CONSTRUCTOR in COMPOUND_LITERAL is being cast.  */
2213
2214 tree
2215 finish_compound_literal (tree type, tree compound_literal)
2216 {
2217   if (type == error_mark_node)
2218     return error_mark_node;
2219
2220   if (!TYPE_OBJ_P (type))
2221     {
2222       error ("compound literal of non-object type %qT", type);
2223       return error_mark_node;
2224     }
2225
2226   if (processing_template_decl)
2227     {
2228       TREE_TYPE (compound_literal) = type;
2229       /* Mark the expression as a compound literal.  */
2230       TREE_HAS_CONSTRUCTOR (compound_literal) = 1;
2231       return compound_literal;
2232     }
2233
2234   type = complete_type (type);
2235
2236   if (TYPE_NON_AGGREGATE_CLASS (type))
2237     {
2238       /* Trying to deal with a CONSTRUCTOR instead of a TREE_LIST
2239          everywhere that deals with function arguments would be a pain, so
2240          just wrap it in a TREE_LIST.  The parser set a flag so we know
2241          that it came from T{} rather than T({}).  */
2242       CONSTRUCTOR_IS_DIRECT_INIT (compound_literal) = 1;
2243       compound_literal = build_tree_list (NULL_TREE, compound_literal);
2244       return build_functional_cast (type, compound_literal, tf_error);
2245     }
2246
2247   if (TREE_CODE (type) == ARRAY_TYPE
2248       && check_array_initializer (NULL_TREE, type, compound_literal))
2249     return error_mark_node;
2250   compound_literal = reshape_init (type, compound_literal);
2251   if (TREE_CODE (type) == ARRAY_TYPE)
2252     cp_complete_array_type (&type, compound_literal, false);
2253   compound_literal = digest_init (type, compound_literal);
2254   return get_target_expr (compound_literal);
2255 }
2256
2257 /* Return the declaration for the function-name variable indicated by
2258    ID.  */
2259
2260 tree
2261 finish_fname (tree id)
2262 {
2263   tree decl;
2264
2265   decl = fname_decl (input_location, C_RID_CODE (id), id);
2266   if (processing_template_decl)
2267     decl = DECL_NAME (decl);
2268   return decl;
2269 }
2270
2271 /* Finish a translation unit.  */
2272
2273 void
2274 finish_translation_unit (void)
2275 {
2276   /* In case there were missing closebraces,
2277      get us back to the global binding level.  */
2278   pop_everything ();
2279   while (current_namespace != global_namespace)
2280     pop_namespace ();
2281
2282   /* Do file scope __FUNCTION__ et al.  */
2283   finish_fname_decls ();
2284 }
2285
2286 /* Finish a template type parameter, specified as AGGR IDENTIFIER.
2287    Returns the parameter.  */
2288
2289 tree
2290 finish_template_type_parm (tree aggr, tree identifier)
2291 {
2292   if (aggr != class_type_node)
2293     {
2294       permerror (input_location, "template type parameters must use the keyword %<class%> or %<typename%>");
2295       aggr = class_type_node;
2296     }
2297
2298   return build_tree_list (aggr, identifier);
2299 }
2300
2301 /* Finish a template template parameter, specified as AGGR IDENTIFIER.
2302    Returns the parameter.  */
2303
2304 tree
2305 finish_template_template_parm (tree aggr, tree identifier)
2306 {
2307   tree decl = build_decl (input_location,
2308                           TYPE_DECL, identifier, NULL_TREE);
2309   tree tmpl = build_lang_decl (TEMPLATE_DECL, identifier, NULL_TREE);
2310   DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
2311   DECL_TEMPLATE_RESULT (tmpl) = decl;
2312   DECL_ARTIFICIAL (decl) = 1;
2313   end_template_decl ();
2314
2315   gcc_assert (DECL_TEMPLATE_PARMS (tmpl));
2316
2317   check_default_tmpl_args (decl, DECL_TEMPLATE_PARMS (tmpl), 
2318                            /*is_primary=*/true, /*is_partial=*/false,
2319                            /*is_friend=*/0);
2320
2321   return finish_template_type_parm (aggr, tmpl);
2322 }
2323
2324 /* ARGUMENT is the default-argument value for a template template
2325    parameter.  If ARGUMENT is invalid, issue error messages and return
2326    the ERROR_MARK_NODE.  Otherwise, ARGUMENT itself is returned.  */
2327
2328 tree
2329 check_template_template_default_arg (tree argument)
2330 {
2331   if (TREE_CODE (argument) != TEMPLATE_DECL
2332       && TREE_CODE (argument) != TEMPLATE_TEMPLATE_PARM
2333       && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
2334     {
2335       if (TREE_CODE (argument) == TYPE_DECL)
2336         error ("invalid use of type %qT as a default value for a template "
2337                "template-parameter", TREE_TYPE (argument));
2338       else
2339         error ("invalid default argument for a template template parameter");
2340       return error_mark_node;
2341     }
2342
2343   return argument;
2344 }
2345
2346 /* Begin a class definition, as indicated by T.  */
2347
2348 tree
2349 begin_class_definition (tree t, tree attributes)
2350 {
2351   if (error_operand_p (t) || error_operand_p (TYPE_MAIN_DECL (t)))
2352     return error_mark_node;
2353
2354   if (processing_template_parmlist)
2355     {
2356       error ("definition of %q#T inside template parameter list", t);
2357       return error_mark_node;
2358     }
2359
2360   /* According to the C++ ABI, decimal classes defined in ISO/IEC TR 24733
2361      are passed the same as decimal scalar types.  */
2362   if (TREE_CODE (t) == RECORD_TYPE
2363       && !processing_template_decl)
2364     {
2365       tree ns = TYPE_CONTEXT (t);
2366       if (ns && TREE_CODE (ns) == NAMESPACE_DECL
2367           && DECL_CONTEXT (ns) == std_node
2368           && DECL_NAME (ns)
2369           && !strcmp (IDENTIFIER_POINTER (DECL_NAME (ns)), "decimal"))
2370         {
2371           const char *n = TYPE_NAME_STRING (t);
2372           if ((strcmp (n, "decimal32") == 0)
2373               || (strcmp (n, "decimal64") == 0)
2374               || (strcmp (n, "decimal128") == 0))
2375             TYPE_TRANSPARENT_AGGR (t) = 1;
2376         }
2377     }
2378
2379   /* A non-implicit typename comes from code like:
2380
2381        template <typename T> struct A {
2382          template <typename U> struct A<T>::B ...
2383
2384      This is erroneous.  */
2385   else if (TREE_CODE (t) == TYPENAME_TYPE)
2386     {
2387       error ("invalid definition of qualified type %qT", t);
2388       t = error_mark_node;
2389     }
2390
2391   if (t == error_mark_node || ! MAYBE_CLASS_TYPE_P (t))
2392     {
2393       t = make_class_type (RECORD_TYPE);
2394       pushtag (make_anon_name (), t, /*tag_scope=*/ts_current);
2395     }
2396
2397   if (TYPE_BEING_DEFINED (t))
2398     {
2399       t = make_class_type (TREE_CODE (t));
2400       pushtag (TYPE_IDENTIFIER (t), t, /*tag_scope=*/ts_current);
2401     }
2402   maybe_process_partial_specialization (t);
2403   pushclass (t);
2404   TYPE_BEING_DEFINED (t) = 1;
2405
2406   cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
2407   fixup_attribute_variants (t);
2408
2409   if (flag_pack_struct)
2410     {
2411       tree v;
2412       TYPE_PACKED (t) = 1;
2413       /* Even though the type is being defined for the first time
2414          here, there might have been a forward declaration, so there
2415          might be cv-qualified variants of T.  */
2416       for (v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
2417         TYPE_PACKED (v) = 1;
2418     }
2419   /* Reset the interface data, at the earliest possible
2420      moment, as it might have been set via a class foo;
2421      before.  */
2422   if (! TYPE_ANONYMOUS_P (t))
2423     {
2424       struct c_fileinfo *finfo = get_fileinfo (input_filename);
2425       CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
2426       SET_CLASSTYPE_INTERFACE_UNKNOWN_X
2427         (t, finfo->interface_unknown);
2428     }
2429   reset_specialization();
2430
2431   /* Make a declaration for this class in its own scope.  */
2432   build_self_reference ();
2433
2434   return t;
2435 }
2436
2437 /* Finish the member declaration given by DECL.  */
2438
2439 void
2440 finish_member_declaration (tree decl)
2441 {
2442   if (decl == error_mark_node || decl == NULL_TREE)
2443     return;
2444
2445   if (decl == void_type_node)
2446     /* The COMPONENT was a friend, not a member, and so there's
2447        nothing for us to do.  */
2448     return;
2449
2450   /* We should see only one DECL at a time.  */
2451   gcc_assert (DECL_CHAIN (decl) == NULL_TREE);
2452
2453   /* Set up access control for DECL.  */
2454   TREE_PRIVATE (decl)
2455     = (current_access_specifier == access_private_node);
2456   TREE_PROTECTED (decl)
2457     = (current_access_specifier == access_protected_node);
2458   if (TREE_CODE (decl) == TEMPLATE_DECL)
2459     {
2460       TREE_PRIVATE (DECL_TEMPLATE_RESULT (decl)) = TREE_PRIVATE (decl);
2461       TREE_PROTECTED (DECL_TEMPLATE_RESULT (decl)) = TREE_PROTECTED (decl);
2462     }
2463
2464   /* Mark the DECL as a member of the current class.  */
2465   DECL_CONTEXT (decl) = current_class_type;
2466
2467   /* Check for bare parameter packs in the member variable declaration.  */
2468   if (TREE_CODE (decl) == FIELD_DECL)
2469     {
2470       if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
2471         TREE_TYPE (decl) = error_mark_node;
2472       if (check_for_bare_parameter_packs (DECL_ATTRIBUTES (decl)))
2473         DECL_ATTRIBUTES (decl) = NULL_TREE;
2474     }
2475
2476   /* [dcl.link]
2477
2478      A C language linkage is ignored for the names of class members
2479      and the member function type of class member functions.  */
2480   if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
2481     SET_DECL_LANGUAGE (decl, lang_cplusplus);
2482
2483   /* Put functions on the TYPE_METHODS list and everything else on the
2484      TYPE_FIELDS list.  Note that these are built up in reverse order.
2485      We reverse them (to obtain declaration order) in finish_struct.  */
2486   if (TREE_CODE (decl) == FUNCTION_DECL
2487       || DECL_FUNCTION_TEMPLATE_P (decl))
2488     {
2489       /* We also need to add this function to the
2490          CLASSTYPE_METHOD_VEC.  */
2491       if (add_method (current_class_type, decl, NULL_TREE))
2492         {
2493           DECL_CHAIN (decl) = TYPE_METHODS (current_class_type);
2494           TYPE_METHODS (current_class_type) = decl;
2495
2496           maybe_add_class_template_decl_list (current_class_type, decl,
2497                                               /*friend_p=*/0);
2498         }
2499     }
2500   /* Enter the DECL into the scope of the class.  */
2501   else if ((TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
2502            || pushdecl_class_level (decl))
2503     {
2504       /* All TYPE_DECLs go at the end of TYPE_FIELDS.  Ordinary fields
2505          go at the beginning.  The reason is that lookup_field_1
2506          searches the list in order, and we want a field name to
2507          override a type name so that the "struct stat hack" will
2508          work.  In particular:
2509
2510            struct S { enum E { }; int E } s;
2511            s.E = 3;
2512
2513          is valid.  In addition, the FIELD_DECLs must be maintained in
2514          declaration order so that class layout works as expected.
2515          However, we don't need that order until class layout, so we
2516          save a little time by putting FIELD_DECLs on in reverse order
2517          here, and then reversing them in finish_struct_1.  (We could
2518          also keep a pointer to the correct insertion points in the
2519          list.)  */
2520
2521       if (TREE_CODE (decl) == TYPE_DECL)
2522         TYPE_FIELDS (current_class_type)
2523           = chainon (TYPE_FIELDS (current_class_type), decl);
2524       else
2525         {
2526           DECL_CHAIN (decl) = TYPE_FIELDS (current_class_type);
2527           TYPE_FIELDS (current_class_type) = decl;
2528         }
2529
2530       maybe_add_class_template_decl_list (current_class_type, decl,
2531                                           /*friend_p=*/0);
2532     }
2533
2534   if (pch_file)
2535     note_decl_for_pch (decl);
2536 }
2537
2538 /* DECL has been declared while we are building a PCH file.  Perform
2539    actions that we might normally undertake lazily, but which can be
2540    performed now so that they do not have to be performed in
2541    translation units which include the PCH file.  */
2542
2543 void
2544 note_decl_for_pch (tree decl)
2545 {
2546   gcc_assert (pch_file);
2547
2548   /* There's a good chance that we'll have to mangle names at some
2549      point, even if only for emission in debugging information.  */
2550   if ((TREE_CODE (decl) == VAR_DECL
2551        || TREE_CODE (decl) == FUNCTION_DECL)
2552       && !processing_template_decl)
2553     mangle_decl (decl);
2554 }
2555
2556 /* Finish processing a complete template declaration.  The PARMS are
2557    the template parameters.  */
2558
2559 void
2560 finish_template_decl (tree parms)
2561 {
2562   if (parms)
2563     end_template_decl ();
2564   else
2565     end_specialization ();
2566 }
2567
2568 /* Finish processing a template-id (which names a type) of the form
2569    NAME < ARGS >.  Return the TYPE_DECL for the type named by the
2570    template-id.  If ENTERING_SCOPE is nonzero we are about to enter
2571    the scope of template-id indicated.  */
2572
2573 tree
2574 finish_template_type (tree name, tree args, int entering_scope)
2575 {
2576   tree decl;
2577
2578   decl = lookup_template_class (name, args,
2579                                 NULL_TREE, NULL_TREE, entering_scope,
2580                                 tf_warning_or_error | tf_user);
2581   if (decl != error_mark_node)
2582     decl = TYPE_STUB_DECL (decl);
2583
2584   return decl;
2585 }
2586
2587 /* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2588    Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2589    BASE_CLASS, or NULL_TREE if an error occurred.  The
2590    ACCESS_SPECIFIER is one of
2591    access_{default,public,protected_private}_node.  For a virtual base
2592    we set TREE_TYPE.  */
2593
2594 tree
2595 finish_base_specifier (tree base, tree access, bool virtual_p)
2596 {
2597   tree result;
2598
2599   if (base == error_mark_node)
2600     {
2601       error ("invalid base-class specification");
2602       result = NULL_TREE;
2603     }
2604   else if (! MAYBE_CLASS_TYPE_P (base))
2605     {
2606       error ("%qT is not a class type", base);
2607       result = NULL_TREE;
2608     }
2609   else
2610     {
2611       if (cp_type_quals (base) != 0)
2612         {
2613           error ("base class %qT has cv qualifiers", base);
2614           base = TYPE_MAIN_VARIANT (base);
2615         }
2616       result = build_tree_list (access, base);
2617       if (virtual_p)
2618         TREE_TYPE (result) = integer_type_node;
2619     }
2620
2621   return result;
2622 }
2623
2624 /* Issue a diagnostic that NAME cannot be found in SCOPE.  DECL is
2625    what we found when we tried to do the lookup.
2626    LOCATION is the location of the NAME identifier;
2627    The location is used in the error message*/
2628
2629 void
2630 qualified_name_lookup_error (tree scope, tree name,
2631                              tree decl, location_t location)
2632 {
2633   if (scope == error_mark_node)
2634     ; /* We already complained.  */
2635   else if (TYPE_P (scope))
2636     {
2637       if (!COMPLETE_TYPE_P (scope))
2638         error_at (location, "incomplete type %qT used in nested name specifier",
2639                   scope);
2640       else if (TREE_CODE (decl) == TREE_LIST)
2641         {
2642           error_at (location, "reference to %<%T::%D%> is ambiguous",
2643                     scope, name);
2644           print_candidates (decl);
2645         }
2646       else
2647         error_at (location, "%qD is not a member of %qT", name, scope);
2648     }
2649   else if (scope != global_namespace)
2650     error_at (location, "%qD is not a member of %qD", name, scope);
2651   else
2652     error_at (location, "%<::%D%> has not been declared", name);
2653 }
2654
2655 /* If FNS is a member function, a set of member functions, or a
2656    template-id referring to one or more member functions, return a
2657    BASELINK for FNS, incorporating the current access context.
2658    Otherwise, return FNS unchanged.  */
2659
2660 tree
2661 baselink_for_fns (tree fns)
2662 {
2663   tree fn;
2664   tree cl;
2665
2666   if (BASELINK_P (fns) 
2667       || error_operand_p (fns))
2668     return fns;
2669   
2670   fn = fns;
2671   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2672     fn = TREE_OPERAND (fn, 0);
2673   fn = get_first_fn (fn);
2674   if (!DECL_FUNCTION_MEMBER_P (fn))
2675     return fns;
2676
2677   cl = currently_open_derived_class (DECL_CONTEXT (fn));
2678   if (!cl)
2679     cl = DECL_CONTEXT (fn);
2680   cl = TYPE_BINFO (cl);
2681   return build_baselink (cl, cl, fns, /*optype=*/NULL_TREE);
2682 }
2683
2684 /* Returns true iff DECL is an automatic variable from a function outside
2685    the current one.  */
2686
2687 static bool
2688 outer_automatic_var_p (tree decl)
2689 {
2690   return ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
2691           && DECL_FUNCTION_SCOPE_P (decl)
2692           && !TREE_STATIC (decl)
2693           && DECL_CONTEXT (decl) != current_function_decl);
2694 }
2695
2696 /* Returns true iff DECL is a capture field from a lambda that is not our
2697    immediate context.  */
2698
2699 static bool
2700 outer_lambda_capture_p (tree decl)
2701 {
2702   return (TREE_CODE (decl) == FIELD_DECL
2703           && LAMBDA_TYPE_P (DECL_CONTEXT (decl))
2704           && (!current_class_type
2705               || !DERIVED_FROM_P (DECL_CONTEXT (decl), current_class_type)));
2706 }
2707
2708 /* ID_EXPRESSION is a representation of parsed, but unprocessed,
2709    id-expression.  (See cp_parser_id_expression for details.)  SCOPE,
2710    if non-NULL, is the type or namespace used to explicitly qualify
2711    ID_EXPRESSION.  DECL is the entity to which that name has been
2712    resolved.
2713
2714    *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2715    constant-expression.  In that case, *NON_CONSTANT_EXPRESSION_P will
2716    be set to true if this expression isn't permitted in a
2717    constant-expression, but it is otherwise not set by this function.
2718    *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2719    constant-expression, but a non-constant expression is also
2720    permissible.
2721
2722    DONE is true if this expression is a complete postfix-expression;
2723    it is false if this expression is followed by '->', '[', '(', etc.
2724    ADDRESS_P is true iff this expression is the operand of '&'.
2725    TEMPLATE_P is true iff the qualified-id was of the form
2726    "A::template B".  TEMPLATE_ARG_P is true iff this qualified name
2727    appears as a template argument.
2728
2729    If an error occurs, and it is the kind of error that might cause
2730    the parser to abort a tentative parse, *ERROR_MSG is filled in.  It
2731    is the caller's responsibility to issue the message.  *ERROR_MSG
2732    will be a string with static storage duration, so the caller need
2733    not "free" it.
2734
2735    Return an expression for the entity, after issuing appropriate
2736    diagnostics.  This function is also responsible for transforming a
2737    reference to a non-static member into a COMPONENT_REF that makes
2738    the use of "this" explicit.
2739
2740    Upon return, *IDK will be filled in appropriately.  */
2741 tree
2742 finish_id_expression (tree id_expression,
2743                       tree decl,
2744                       tree scope,
2745                       cp_id_kind *idk,
2746                       bool integral_constant_expression_p,
2747                       bool allow_non_integral_constant_expression_p,
2748                       bool *non_integral_constant_expression_p,
2749                       bool template_p,
2750                       bool done,
2751                       bool address_p,
2752                       bool template_arg_p,
2753                       const char **error_msg,
2754                       location_t location)
2755 {
2756   /* Initialize the output parameters.  */
2757   *idk = CP_ID_KIND_NONE;
2758   *error_msg = NULL;
2759
2760   if (id_expression == error_mark_node)
2761     return error_mark_node;
2762   /* If we have a template-id, then no further lookup is
2763      required.  If the template-id was for a template-class, we
2764      will sometimes have a TYPE_DECL at this point.  */
2765   else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2766            || TREE_CODE (decl) == TYPE_DECL)
2767     ;
2768   /* Look up the name.  */
2769   else
2770     {
2771       if (decl == error_mark_node)
2772         {
2773           /* Name lookup failed.  */
2774           if (scope
2775               && (!TYPE_P (scope)
2776                   || (!dependent_type_p (scope)
2777                       && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
2778                            && IDENTIFIER_TYPENAME_P (id_expression)
2779                            && dependent_type_p (TREE_TYPE (id_expression))))))
2780             {
2781               /* If the qualifying type is non-dependent (and the name
2782                  does not name a conversion operator to a dependent
2783                  type), issue an error.  */
2784               qualified_name_lookup_error (scope, id_expression, decl, location);
2785               return error_mark_node;
2786             }
2787           else if (!scope)
2788             {
2789               /* It may be resolved via Koenig lookup.  */
2790               *idk = CP_ID_KIND_UNQUALIFIED;
2791               return id_expression;
2792             }
2793           else
2794             decl = id_expression;
2795         }
2796       /* If DECL is a variable that would be out of scope under
2797          ANSI/ISO rules, but in scope in the ARM, name lookup
2798          will succeed.  Issue a diagnostic here.  */
2799       else
2800         decl = check_for_out_of_scope_variable (decl);
2801
2802       /* Remember that the name was used in the definition of
2803          the current class so that we can check later to see if
2804          the meaning would have been different after the class
2805          was entirely defined.  */
2806       if (!scope && decl != error_mark_node)
2807         maybe_note_name_used_in_class (id_expression, decl);
2808
2809       /* Disallow uses of local variables from containing functions, except
2810          within lambda-expressions.  */
2811       if ((outer_automatic_var_p (decl)
2812            || outer_lambda_capture_p (decl))
2813           /* It's not a use (3.2) if we're in an unevaluated context.  */
2814           && !cp_unevaluated_operand)
2815         {
2816           tree context = DECL_CONTEXT (decl);
2817           tree containing_function = current_function_decl;
2818           tree lambda_stack = NULL_TREE;
2819           tree lambda_expr = NULL_TREE;
2820           tree initializer = decl;
2821
2822           /* Core issue 696: "[At the July 2009 meeting] the CWG expressed
2823              support for an approach in which a reference to a local
2824              [constant] automatic variable in a nested class or lambda body
2825              would enter the expression as an rvalue, which would reduce
2826              the complexity of the problem"
2827
2828              FIXME update for final resolution of core issue 696.  */
2829           if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
2830             return integral_constant_value (decl);
2831
2832           if (TYPE_P (context))
2833             {
2834               /* Implicit capture of an explicit capture.  */
2835               context = lambda_function (context);
2836               initializer = thisify_lambda_field (decl);
2837             }
2838
2839           /* If we are in a lambda function, we can move out until we hit
2840              1. the context,
2841              2. a non-lambda function, or
2842              3. a non-default capturing lambda function.  */
2843           while (context != containing_function
2844                  && LAMBDA_FUNCTION_P (containing_function))
2845             {
2846               lambda_expr = CLASSTYPE_LAMBDA_EXPR
2847                 (DECL_CONTEXT (containing_function));
2848
2849               if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr)
2850                   == CPLD_NONE)
2851                 break;
2852
2853               lambda_stack = tree_cons (NULL_TREE,
2854                                         lambda_expr,
2855                                         lambda_stack);
2856
2857               containing_function
2858                 = decl_function_context (containing_function);
2859             }
2860
2861           if (context == containing_function)
2862             {
2863               decl = add_default_capture (lambda_stack,
2864                                           /*id=*/DECL_NAME (decl),
2865                                           initializer);
2866             }
2867           else if (lambda_expr)
2868             {
2869               error ("%qD is not captured", decl);
2870               return error_mark_node;
2871             }
2872           else
2873             {
2874               error (TREE_CODE (decl) == VAR_DECL
2875                      ? "use of %<auto%> variable from containing function"
2876                      : "use of parameter from containing function");
2877               error ("  %q+#D declared here", decl);
2878               return error_mark_node;
2879             }
2880         }
2881
2882       /* Also disallow uses of function parameters outside the function
2883          body, except inside an unevaluated context (i.e. decltype).  */
2884       if (TREE_CODE (decl) == PARM_DECL
2885           && DECL_CONTEXT (decl) == NULL_TREE
2886           && !cp_unevaluated_operand)
2887         {
2888           error ("use of parameter %qD outside function body", decl);
2889           return error_mark_node;
2890         }
2891     }
2892
2893   /* If we didn't find anything, or what we found was a type,
2894      then this wasn't really an id-expression.  */
2895   if (TREE_CODE (decl) == TEMPLATE_DECL
2896       && !DECL_FUNCTION_TEMPLATE_P (decl))
2897     {
2898       *error_msg = "missing template arguments";
2899       return error_mark_node;
2900     }
2901   else if (TREE_CODE (decl) == TYPE_DECL
2902            || TREE_CODE (decl) == NAMESPACE_DECL)
2903     {
2904       *error_msg = "expected primary-expression";
2905       return error_mark_node;
2906     }
2907
2908   /* If the name resolved to a template parameter, there is no
2909      need to look it up again later.  */
2910   if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
2911       || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2912     {
2913       tree r;
2914
2915       *idk = CP_ID_KIND_NONE;
2916       if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2917         decl = TEMPLATE_PARM_DECL (decl);
2918       r = convert_from_reference (DECL_INITIAL (decl));
2919
2920       if (integral_constant_expression_p
2921           && !dependent_type_p (TREE_TYPE (decl))
2922           && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
2923         {
2924           if (!allow_non_integral_constant_expression_p)
2925             error ("template parameter %qD of type %qT is not allowed in "
2926                    "an integral constant expression because it is not of "
2927                    "integral or enumeration type", decl, TREE_TYPE (decl));
2928           *non_integral_constant_expression_p = true;
2929         }
2930       return r;
2931     }
2932   /* Similarly, we resolve enumeration constants to their
2933      underlying values.  */
2934   else if (TREE_CODE (decl) == CONST_DECL)
2935     {
2936       *idk = CP_ID_KIND_NONE;
2937       if (!processing_template_decl)
2938         {
2939           used_types_insert (TREE_TYPE (decl));
2940           return DECL_INITIAL (decl);
2941         }
2942       return decl;
2943     }
2944   else
2945     {
2946       bool dependent_p;
2947
2948       /* If the declaration was explicitly qualified indicate
2949          that.  The semantics of `A::f(3)' are different than
2950          `f(3)' if `f' is virtual.  */
2951       *idk = (scope
2952               ? CP_ID_KIND_QUALIFIED
2953               : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2954                  ? CP_ID_KIND_TEMPLATE_ID
2955                  : CP_ID_KIND_UNQUALIFIED));
2956
2957
2958       /* [temp.dep.expr]
2959
2960          An id-expression is type-dependent if it contains an
2961          identifier that was declared with a dependent type.
2962
2963          The standard is not very specific about an id-expression that
2964          names a set of overloaded functions.  What if some of them
2965          have dependent types and some of them do not?  Presumably,
2966          such a name should be treated as a dependent name.  */
2967       /* Assume the name is not dependent.  */
2968       dependent_p = false;
2969       if (!processing_template_decl)
2970         /* No names are dependent outside a template.  */
2971         ;
2972       /* A template-id where the name of the template was not resolved
2973          is definitely dependent.  */
2974       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2975                && (TREE_CODE (TREE_OPERAND (decl, 0))
2976                    == IDENTIFIER_NODE))
2977         dependent_p = true;
2978       /* For anything except an overloaded function, just check its
2979          type.  */
2980       else if (!is_overloaded_fn (decl))
2981         dependent_p
2982           = dependent_type_p (TREE_TYPE (decl));
2983       /* For a set of overloaded functions, check each of the
2984          functions.  */
2985       else
2986         {
2987           tree fns = decl;
2988
2989           if (BASELINK_P (fns))
2990             fns = BASELINK_FUNCTIONS (fns);
2991
2992           /* For a template-id, check to see if the template
2993              arguments are dependent.  */
2994           if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
2995             {
2996               tree args = TREE_OPERAND (fns, 1);
2997               dependent_p = any_dependent_template_arguments_p (args);
2998               /* The functions are those referred to by the
2999                  template-id.  */
3000               fns = TREE_OPERAND (fns, 0);
3001             }
3002
3003           /* If there are no dependent template arguments, go through
3004              the overloaded functions.  */
3005           while (fns && !dependent_p)
3006             {
3007               tree fn = OVL_CURRENT (fns);
3008
3009               /* Member functions of dependent classes are
3010                  dependent.  */
3011               if (TREE_CODE (fn) == FUNCTION_DECL
3012                   && type_dependent_expression_p (fn))
3013                 dependent_p = true;
3014               else if (TREE_CODE (fn) == TEMPLATE_DECL
3015                        && dependent_template_p (fn))
3016                 dependent_p = true;
3017
3018               fns = OVL_NEXT (fns);
3019             }
3020         }
3021
3022       /* If the name was dependent on a template parameter, we will
3023          resolve the name at instantiation time.  */
3024       if (dependent_p)
3025         {
3026           /* Create a SCOPE_REF for qualified names, if the scope is
3027              dependent.  */
3028           if (scope)
3029             {
3030               if (TYPE_P (scope))
3031                 {
3032                   if (address_p && done)
3033                     decl = finish_qualified_id_expr (scope, decl,
3034                                                      done, address_p,
3035                                                      template_p,
3036                                                      template_arg_p);
3037                   else
3038                     {
3039                       tree type = NULL_TREE;
3040                       if (DECL_P (decl) && !dependent_scope_p (scope))
3041                         type = TREE_TYPE (decl);
3042                       decl = build_qualified_name (type,
3043                                                    scope,
3044                                                    id_expression,
3045                                                    template_p);
3046                     }
3047                 }
3048               if (TREE_TYPE (decl))
3049                 decl = convert_from_reference (decl);
3050               return decl;
3051             }
3052           /* A TEMPLATE_ID already contains all the information we
3053              need.  */
3054           if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
3055             return id_expression;
3056           *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
3057           /* If we found a variable, then name lookup during the
3058              instantiation will always resolve to the same VAR_DECL
3059              (or an instantiation thereof).  */
3060           if (TREE_CODE (decl) == VAR_DECL
3061               || TREE_CODE (decl) == PARM_DECL)
3062             return convert_from_reference (decl);
3063           /* The same is true for FIELD_DECL, but we also need to
3064              make sure that the syntax is correct.  */
3065           else if (TREE_CODE (decl) == FIELD_DECL)
3066             {
3067               /* Since SCOPE is NULL here, this is an unqualified name.
3068                  Access checking has been performed during name lookup
3069                  already.  Turn off checking to avoid duplicate errors.  */
3070               push_deferring_access_checks (dk_no_check);
3071               decl = finish_non_static_data_member
3072                        (decl, NULL_TREE,
3073                         /*qualifying_scope=*/NULL_TREE);
3074               pop_deferring_access_checks ();
3075               return decl;
3076             }
3077           return id_expression;
3078         }
3079
3080       /* Only certain kinds of names are allowed in constant
3081          expression.  Enumerators and template parameters have already
3082          been handled above.  */
3083       if (integral_constant_expression_p
3084           && ! DECL_INTEGRAL_CONSTANT_VAR_P (decl)
3085           && ! builtin_valid_in_constant_expr_p (decl))
3086         {
3087           if (!allow_non_integral_constant_expression_p)
3088             {
3089               error ("%qD cannot appear in a constant-expression", decl);
3090               return error_mark_node;
3091             }
3092           *non_integral_constant_expression_p = true;
3093         }
3094
3095       if (TREE_CODE (decl) == NAMESPACE_DECL)
3096         {
3097           error ("use of namespace %qD as expression", decl);
3098           return error_mark_node;
3099         }
3100       else if (DECL_CLASS_TEMPLATE_P (decl))
3101         {
3102           error ("use of class template %qT as expression", decl);
3103           return error_mark_node;
3104         }
3105       else if (TREE_CODE (decl) == TREE_LIST)
3106         {
3107           /* Ambiguous reference to base members.  */
3108           error ("request for member %qD is ambiguous in "
3109                  "multiple inheritance lattice", id_expression);
3110           print_candidates (decl);
3111           return error_mark_node;
3112         }
3113
3114       /* Mark variable-like entities as used.  Functions are similarly
3115          marked either below or after overload resolution.  */
3116       if (TREE_CODE (decl) == VAR_DECL
3117           || TREE_CODE (decl) == PARM_DECL
3118           || TREE_CODE (decl) == RESULT_DECL)
3119         mark_used (decl);
3120
3121       if (scope)
3122         {
3123           decl = (adjust_result_of_qualified_name_lookup
3124                   (decl, scope, current_class_type));
3125
3126           if (TREE_CODE (decl) == FUNCTION_DECL)
3127             mark_used (decl);
3128
3129           if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl))
3130             decl = finish_qualified_id_expr (scope,
3131                                              decl,
3132                                              done,
3133                                              address_p,
3134                                              template_p,
3135                                              template_arg_p);
3136           else
3137             {
3138               tree r = convert_from_reference (decl);
3139
3140               /* In a template, return a SCOPE_REF for most qualified-ids
3141                  so that we can check access at instantiation time.  But if
3142                  we're looking at a member of the current instantiation, we
3143                  know we have access and building up the SCOPE_REF confuses
3144                  non-type template argument handling.  */
3145               if (processing_template_decl && TYPE_P (scope)
3146                   && !currently_open_class (scope))
3147                 r = build_qualified_name (TREE_TYPE (r),
3148                                           scope, decl,
3149                                           template_p);
3150               decl = r;
3151             }
3152         }
3153       else if (TREE_CODE (decl) == FIELD_DECL)
3154         {
3155           /* Since SCOPE is NULL here, this is an unqualified name.
3156              Access checking has been performed during name lookup
3157              already.  Turn off checking to avoid duplicate errors.  */
3158           push_deferring_access_checks (dk_no_check);
3159           decl = finish_non_static_data_member (decl, NULL_TREE,
3160                                                 /*qualifying_scope=*/NULL_TREE);
3161           pop_deferring_access_checks ();
3162         }
3163       else if (is_overloaded_fn (decl))
3164         {
3165           tree first_fn;
3166
3167           first_fn = get_first_fn (decl);
3168           if (TREE_CODE (first_fn) == TEMPLATE_DECL)
3169             first_fn = DECL_TEMPLATE_RESULT (first_fn);
3170
3171           if (!really_overloaded_fn (decl))
3172             mark_used (first_fn);
3173
3174           if (!template_arg_p
3175               && TREE_CODE (first_fn) == FUNCTION_DECL
3176               && DECL_FUNCTION_MEMBER_P (first_fn)
3177               && !shared_member_p (decl))
3178             {
3179               /* A set of member functions.  */
3180               decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
3181               return finish_class_member_access_expr (decl, id_expression,
3182                                                       /*template_p=*/false,
3183                                                       tf_warning_or_error);
3184             }
3185
3186           decl = baselink_for_fns (decl);
3187         }
3188       else
3189         {
3190           if (DECL_P (decl) && DECL_NONLOCAL (decl)
3191               && DECL_CLASS_SCOPE_P (decl))
3192             {
3193               tree context = context_for_name_lookup (decl); 
3194               if (context != current_class_type)
3195                 {
3196                   tree path = currently_open_derived_class (context);
3197                   perform_or_defer_access_check (TYPE_BINFO (path),
3198                                                  decl, decl);
3199                 }
3200             }
3201
3202           decl = convert_from_reference (decl);
3203         }
3204     }
3205
3206   if (TREE_DEPRECATED (decl))
3207     warn_deprecated_use (decl, NULL_TREE);
3208
3209   return decl;
3210 }
3211
3212 /* Implement the __typeof keyword: Return the type of EXPR, suitable for
3213    use as a type-specifier.  */
3214
3215 tree
3216 finish_typeof (tree expr)
3217 {
3218   tree type;
3219
3220   if (type_dependent_expression_p (expr))
3221     {
3222       type = cxx_make_type (TYPEOF_TYPE);
3223       TYPEOF_TYPE_EXPR (type) = expr;
3224       SET_TYPE_STRUCTURAL_EQUALITY (type);
3225
3226       return type;
3227     }
3228
3229   expr = mark_type_use (expr);
3230
3231   type = unlowered_expr_type (expr);
3232
3233   if (!type || type == unknown_type_node)
3234     {
3235       error ("type of %qE is unknown", expr);
3236       return error_mark_node;
3237     }
3238
3239   return type;
3240 }
3241
3242 /* Perform C++-specific checks for __builtin_offsetof before calling
3243    fold_offsetof.  */
3244
3245 tree
3246 finish_offsetof (tree expr)
3247 {
3248   if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
3249     {
3250       error ("cannot apply %<offsetof%> to destructor %<~%T%>",
3251               TREE_OPERAND (expr, 2));
3252       return error_mark_node;
3253     }
3254   if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
3255       || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
3256       || TREE_TYPE (expr) == unknown_type_node)
3257     {
3258       if (TREE_CODE (expr) == COMPONENT_REF
3259           || TREE_CODE (expr) == COMPOUND_EXPR)
3260         expr = TREE_OPERAND (expr, 1);
3261       error ("cannot apply %<offsetof%> to member function %qD", expr);
3262       return error_mark_node;
3263     }
3264   if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
3265     expr = TREE_OPERAND (expr, 0);
3266   return fold_offsetof (expr, NULL_TREE);
3267 }
3268
3269 /* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR.  This
3270    function is broken out from the above for the benefit of the tree-ssa
3271    project.  */
3272
3273 void
3274 simplify_aggr_init_expr (tree *tp)
3275 {
3276   tree aggr_init_expr = *tp;
3277
3278   /* Form an appropriate CALL_EXPR.  */
3279   tree fn = AGGR_INIT_EXPR_FN (aggr_init_expr);
3280   tree slot = AGGR_INIT_EXPR_SLOT (aggr_init_expr);
3281   tree type = TREE_TYPE (slot);
3282
3283   tree call_expr;
3284   enum style_t { ctor, arg, pcc } style;
3285
3286   if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
3287     style = ctor;
3288 #ifdef PCC_STATIC_STRUCT_RETURN
3289   else if (1)
3290     style = pcc;
3291 #endif
3292   else
3293     {
3294       gcc_assert (TREE_ADDRESSABLE (type));
3295       style = arg;
3296     }
3297
3298   call_expr = build_call_array_loc (input_location,
3299                                     TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
3300                                     fn,
3301                                     aggr_init_expr_nargs (aggr_init_expr),
3302                                     AGGR_INIT_EXPR_ARGP (aggr_init_expr));
3303   TREE_NOTHROW (call_expr) = TREE_NOTHROW (aggr_init_expr);
3304
3305   if (style == ctor)
3306     {
3307       /* Replace the first argument to the ctor with the address of the
3308          slot.  */
3309       cxx_mark_addressable (slot);
3310       CALL_EXPR_ARG (call_expr, 0) =
3311         build1 (ADDR_EXPR, build_pointer_type (type), slot);
3312     }
3313   else if (style == arg)
3314     {
3315       /* Just mark it addressable here, and leave the rest to
3316          expand_call{,_inline}.  */
3317       cxx_mark_addressable (slot);
3318       CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
3319       call_expr = build2 (INIT_EXPR, TREE_TYPE (call_expr), slot, call_expr);
3320     }
3321   else if (style == pcc)
3322     {
3323       /* If we're using the non-reentrant PCC calling convention, then we
3324          need to copy the returned value out of the static buffer into the
3325          SLOT.  */
3326       push_deferring_access_checks (dk_no_check);
3327       call_expr = build_aggr_init (slot, call_expr,
3328                                    DIRECT_BIND | LOOKUP_ONLYCONVERTING,
3329                                    tf_warning_or_error);
3330       pop_deferring_access_checks ();
3331       call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
3332     }
3333
3334   if (AGGR_INIT_ZERO_FIRST (aggr_init_expr))
3335     {
3336       tree init = build_zero_init (type, NULL_TREE,
3337                                    /*static_storage_p=*/false);
3338       init = build2 (INIT_EXPR, void_type_node, slot, init);
3339       call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (call_expr),
3340                           init, call_expr);
3341     }
3342
3343   *tp = call_expr;
3344 }
3345
3346 /* Emit all thunks to FN that should be emitted when FN is emitted.  */
3347
3348 void
3349 emit_associated_thunks (tree fn)
3350 {
3351   /* When we use vcall offsets, we emit thunks with the virtual
3352      functions to which they thunk. The whole point of vcall offsets
3353      is so that you can know statically the entire set of thunks that
3354      will ever be needed for a given virtual function, thereby
3355      enabling you to output all the thunks with the function itself.  */
3356   if (DECL_VIRTUAL_P (fn)
3357       /* Do not emit thunks for extern template instantiations.  */
3358       && ! DECL_REALLY_EXTERN (fn))
3359     {
3360       tree thunk;
3361
3362       for (thunk = DECL_THUNKS (fn); thunk; thunk = DECL_CHAIN (thunk))
3363         {
3364           if (!THUNK_ALIAS (thunk))
3365             {
3366               use_thunk (thunk, /*emit_p=*/1);
3367               if (DECL_RESULT_THUNK_P (thunk))
3368                 {
3369                   tree probe;
3370
3371                   for (probe = DECL_THUNKS (thunk);
3372                        probe; probe = DECL_CHAIN (probe))
3373                     use_thunk (probe, /*emit_p=*/1);
3374                 }
3375             }
3376           else
3377             gcc_assert (!DECL_THUNKS (thunk));
3378         }
3379     }
3380 }
3381
3382 /* Generate RTL for FN.  */
3383
3384 bool
3385 expand_or_defer_fn_1 (tree fn)
3386 {
3387   /* When the parser calls us after finishing the body of a template
3388      function, we don't really want to expand the body.  */
3389   if (processing_template_decl)
3390     {
3391       /* Normally, collection only occurs in rest_of_compilation.  So,
3392          if we don't collect here, we never collect junk generated
3393          during the processing of templates until we hit a
3394          non-template function.  It's not safe to do this inside a
3395          nested class, though, as the parser may have local state that
3396          is not a GC root.  */
3397       if (!function_depth)
3398         ggc_collect ();
3399       return false;
3400     }
3401
3402   gcc_assert (DECL_SAVED_TREE (fn));
3403
3404   /* If this is a constructor or destructor body, we have to clone
3405      it.  */
3406   if (maybe_clone_body (fn))
3407     {
3408       /* We don't want to process FN again, so pretend we've written
3409          it out, even though we haven't.  */
3410       TREE_ASM_WRITTEN (fn) = 1;
3411       DECL_SAVED_TREE (fn) = NULL_TREE;
3412       return false;
3413     }
3414
3415   /* We make a decision about linkage for these functions at the end
3416      of the compilation.  Until that point, we do not want the back
3417      end to output them -- but we do want it to see the bodies of
3418      these functions so that it can inline them as appropriate.  */
3419   if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3420     {
3421       if (DECL_INTERFACE_KNOWN (fn))
3422         /* We've already made a decision as to how this function will
3423            be handled.  */;
3424       else if (!at_eof)
3425         {
3426           DECL_EXTERNAL (fn) = 1;
3427           DECL_NOT_REALLY_EXTERN (fn) = 1;
3428           note_vague_linkage_fn (fn);
3429           /* A non-template inline function with external linkage will
3430              always be COMDAT.  As we must eventually determine the
3431              linkage of all functions, and as that causes writes to
3432              the data mapped in from the PCH file, it's advantageous
3433              to mark the functions at this point.  */
3434           if (!DECL_IMPLICIT_INSTANTIATION (fn))
3435             {
3436               /* This function must have external linkage, as
3437                  otherwise DECL_INTERFACE_KNOWN would have been
3438                  set.  */
3439               gcc_assert (TREE_PUBLIC (fn));
3440               comdat_linkage (fn);
3441               DECL_INTERFACE_KNOWN (fn) = 1;
3442             }
3443         }
3444       else
3445         import_export_decl (fn);
3446
3447       /* If the user wants us to keep all inline functions, then mark
3448          this function as needed so that finish_file will make sure to
3449          output it later.  Similarly, all dllexport'd functions must
3450          be emitted; there may be callers in other DLLs.  */
3451       if ((flag_keep_inline_functions
3452            && DECL_DECLARED_INLINE_P (fn)
3453            && !DECL_REALLY_EXTERN (fn))
3454           || lookup_attribute ("dllexport", DECL_ATTRIBUTES (fn)))
3455         mark_needed (fn);
3456     }
3457
3458   /* There's no reason to do any of the work here if we're only doing
3459      semantic analysis; this code just generates RTL.  */
3460   if (flag_syntax_only)
3461     return false;
3462
3463   return true;
3464 }
3465
3466 void
3467 expand_or_defer_fn (tree fn)
3468 {
3469   if (expand_or_defer_fn_1 (fn))
3470     {
3471       function_depth++;
3472
3473       /* Expand or defer, at the whim of the compilation unit manager.  */
3474       cgraph_finalize_function (fn, function_depth > 1);
3475       emit_associated_thunks (fn);
3476
3477       function_depth--;
3478     }
3479 }
3480
3481 struct nrv_data
3482 {
3483   tree var;
3484   tree result;
3485   htab_t visited;
3486 };
3487
3488 /* Helper function for walk_tree, used by finalize_nrv below.  */
3489
3490 static tree
3491 finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
3492 {
3493   struct nrv_data *dp = (struct nrv_data *)data;
3494   void **slot;
3495
3496   /* No need to walk into types.  There wouldn't be any need to walk into
3497      non-statements, except that we have to consider STMT_EXPRs.  */
3498   if (TYPE_P (*tp))
3499     *walk_subtrees = 0;
3500   /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3501      but differs from using NULL_TREE in that it indicates that we care
3502      about the value of the RESULT_DECL.  */
3503   else if (TREE_CODE (*tp) == RETURN_EXPR)
3504     TREE_OPERAND (*tp, 0) = dp->result;
3505   /* Change all cleanups for the NRV to only run when an exception is
3506      thrown.  */
3507   else if (TREE_CODE (*tp) == CLEANUP_STMT
3508            && CLEANUP_DECL (*tp) == dp->var)
3509     CLEANUP_EH_ONLY (*tp) = 1;
3510   /* Replace the DECL_EXPR for the NRV with an initialization of the
3511      RESULT_DECL, if needed.  */
3512   else if (TREE_CODE (*tp) == DECL_EXPR
3513            && DECL_EXPR_DECL (*tp) == dp->var)
3514     {
3515       tree init;
3516       if (DECL_INITIAL (dp->var)
3517           && DECL_INITIAL (dp->var) != error_mark_node)
3518         init = build2 (INIT_EXPR, void_type_node, dp->result,
3519                        DECL_INITIAL (dp->var));
3520       else
3521         init = build_empty_stmt (EXPR_LOCATION (*tp));
3522       DECL_INITIAL (dp->var) = NULL_TREE;
3523       SET_EXPR_LOCATION (init, EXPR_LOCATION (*tp));
3524       *tp = init;
3525     }
3526   /* And replace all uses of the NRV with the RESULT_DECL.  */
3527   else if (*tp == dp->var)
3528     *tp = dp->result;
3529
3530   /* Avoid walking into the same tree more than once.  Unfortunately, we
3531      can't just use walk_tree_without duplicates because it would only call
3532      us for the first occurrence of dp->var in the function body.  */
3533   slot = htab_find_slot (dp->visited, *tp, INSERT);
3534   if (*slot)
3535     *walk_subtrees = 0;
3536   else
3537     *slot = *tp;
3538
3539   /* Keep iterating.  */
3540   return NULL_TREE;
3541 }
3542
3543 /* Called from finish_function to implement the named return value
3544    optimization by overriding all the RETURN_EXPRs and pertinent
3545    CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
3546    RESULT_DECL for the function.  */
3547
3548 void
3549 finalize_nrv (tree *tp, tree var, tree result)
3550 {
3551   struct nrv_data data;
3552
3553   /* Copy name from VAR to RESULT.  */
3554   DECL_NAME (result) = DECL_NAME (var);
3555   /* Don't forget that we take its address.  */
3556   TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
3557   /* Finally set DECL_VALUE_EXPR to avoid assigning
3558      a stack slot at -O0 for the original var and debug info
3559      uses RESULT location for VAR.  */
3560   SET_DECL_VALUE_EXPR (var, result);
3561   DECL_HAS_VALUE_EXPR_P (var) = 1;
3562
3563   data.var = var;
3564   data.result = result;
3565   data.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
3566   cp_walk_tree (tp, finalize_nrv_r, &data, 0);
3567   htab_delete (data.visited);
3568 }
3569 \f
3570 /* Create CP_OMP_CLAUSE_INFO for clause C.  Returns true if it is invalid.  */
3571
3572 bool
3573 cxx_omp_create_clause_info (tree c, tree type, bool need_default_ctor,
3574                             bool need_copy_ctor, bool need_copy_assignment)
3575 {
3576   int save_errorcount = errorcount;
3577   tree info, t;
3578
3579   /* Always allocate 3 elements for simplicity.  These are the
3580      function decls for the ctor, dtor, and assignment op.
3581      This layout is known to the three lang hooks,
3582      cxx_omp_clause_default_init, cxx_omp_clause_copy_init,
3583      and cxx_omp_clause_assign_op.  */
3584   info = make_tree_vec (3);
3585   CP_OMP_CLAUSE_INFO (c) = info;
3586
3587   if (need_default_ctor || need_copy_ctor)
3588     {
3589       if (need_default_ctor)
3590         t = get_default_ctor (type);
3591       else
3592         t = get_copy_ctor (type);
3593
3594       if (t && !trivial_fn_p (t))
3595         TREE_VEC_ELT (info, 0) = t;
3596     }
3597
3598   if ((need_default_ctor || need_copy_ctor)
3599       && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3600     TREE_VEC_ELT (info, 1) = get_dtor (type);
3601
3602   if (need_copy_assignment)
3603     {
3604       t = get_copy_assign (type);
3605
3606       if (t && !trivial_fn_p (t))
3607         TREE_VEC_ELT (info, 2) = t;
3608     }
3609
3610   return errorcount != save_errorcount;
3611 }
3612
3613 /* For all elements of CLAUSES, validate them vs OpenMP constraints.
3614    Remove any elements from the list that are invalid.  */
3615
3616 tree
3617 finish_omp_clauses (tree clauses)
3618 {
3619   bitmap_head generic_head, firstprivate_head, lastprivate_head;
3620   tree c, t, *pc = &clauses;
3621   const char *name;
3622
3623   bitmap_obstack_initialize (NULL);
3624   bitmap_initialize (&generic_head, &bitmap_default_obstack);
3625   bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
3626   bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
3627
3628   for (pc = &clauses, c = clauses; c ; c = *pc)
3629     {
3630       bool remove = false;
3631
3632       switch (OMP_CLAUSE_CODE (c))
3633         {
3634         case OMP_CLAUSE_SHARED:
3635           name = "shared";
3636           goto check_dup_generic;
3637         case OMP_CLAUSE_PRIVATE:
3638           name = "private";
3639           goto check_dup_generic;
3640         case OMP_CLAUSE_REDUCTION:
3641           name = "reduction";
3642           goto check_dup_generic;
3643         case OMP_CLAUSE_COPYPRIVATE:
3644           name = "copyprivate";
3645           goto check_dup_generic;
3646         case OMP_CLAUSE_COPYIN:
3647           name = "copyin";
3648           goto check_dup_generic;
3649         check_dup_generic:
3650           t = OMP_CLAUSE_DECL (c);
3651           if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3652             {
3653               if (processing_template_decl)
3654                 break;
3655               if (DECL_P (t))
3656                 error ("%qD is not a variable in clause %qs", t, name);
3657               else
3658                 error ("%qE is not a variable in clause %qs", t, name);
3659               remove = true;
3660             }
3661           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3662                    || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
3663                    || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3664             {
3665               error ("%qD appears more than once in data clauses", t);
3666               remove = true;
3667             }
3668           else
3669             bitmap_set_bit (&generic_head, DECL_UID (t));
3670           break;
3671
3672         case OMP_CLAUSE_FIRSTPRIVATE:
3673           t = OMP_CLAUSE_DECL (c);
3674           if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3675             {
3676               if (processing_template_decl)
3677                 break;
3678               if (DECL_P (t))
3679                 error ("%qD is not a variable in clause %<firstprivate%>", t);
3680               else
3681                 error ("%qE is not a variable in clause %<firstprivate%>", t);
3682               remove = true;
3683             }
3684           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3685                    || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3686             {
3687               error ("%qD appears more than once in data clauses", t);
3688               remove = true;
3689             }
3690           else
3691             bitmap_set_bit (&firstprivate_head, DECL_UID (t));
3692           break;
3693
3694         case OMP_CLAUSE_LASTPRIVATE:
3695           t = OMP_CLAUSE_DECL (c);
3696           if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3697             {
3698               if (processing_template_decl)
3699                 break;
3700               if (DECL_P (t))
3701                 error ("%qD is not a variable in clause %<lastprivate%>", t);
3702               else
3703                 error ("%qE is not a variable in clause %<lastprivate%>", t);
3704               remove = true;
3705             }
3706           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3707                    || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3708             {
3709               error ("%qD appears more than once in data clauses", t);
3710               remove = true;
3711             }
3712           else
3713             bitmap_set_bit (&lastprivate_head, DECL_UID (t));
3714           break;
3715
3716         case OMP_CLAUSE_IF:
3717           t = OMP_CLAUSE_IF_EXPR (c);
3718           t = maybe_convert_cond (t);
3719           if (t == error_mark_node)
3720             remove = true;
3721           OMP_CLAUSE_IF_EXPR (c) = t;
3722           break;
3723
3724         case OMP_CLAUSE_NUM_THREADS:
3725           t = OMP_CLAUSE_NUM_THREADS_EXPR (c);
3726           if (t == error_mark_node)
3727             remove = true;
3728           else if (!type_dependent_expression_p (t)
3729                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
3730             {
3731               error ("num_threads expression must be integral");
3732               remove = true;
3733             }
3734           break;
3735
3736         case OMP_CLAUSE_SCHEDULE:
3737           t = OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c);
3738           if (t == NULL)
3739             ;
3740           else if (t == error_mark_node)
3741             remove = true;
3742           else if (!type_dependent_expression_p (t)
3743                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
3744             {
3745               error ("schedule chunk size expression must be integral");
3746               remove = true;
3747             }
3748           break;
3749
3750         case OMP_CLAUSE_NOWAIT:
3751         case OMP_CLAUSE_ORDERED:
3752         case OMP_CLAUSE_DEFAULT:
3753         case OMP_CLAUSE_UNTIED:
3754         case OMP_CLAUSE_COLLAPSE:
3755           break;
3756
3757         default:
3758           gcc_unreachable ();
3759         }
3760
3761       if (remove)
3762         *pc = OMP_CLAUSE_CHAIN (c);
3763       else
3764         pc = &OMP_CLAUSE_CHAIN (c);
3765     }
3766
3767   for (pc = &clauses, c = clauses; c ; c = *pc)
3768     {
3769       enum omp_clause_code c_kind = OMP_CLAUSE_CODE (c);
3770       bool remove = false;
3771       bool need_complete_non_reference = false;
3772       bool need_default_ctor = false;
3773       bool need_copy_ctor = false;
3774       bool need_copy_assignment = false;
3775       bool need_implicitly_determined = false;
3776       tree type, inner_type;
3777
3778       switch (c_kind)
3779         {
3780         case OMP_CLAUSE_SHARED:
3781           name = "shared";
3782           need_implicitly_determined = true;
3783           break;
3784         case OMP_CLAUSE_PRIVATE:
3785           name = "private";
3786           need_complete_non_reference = true;
3787           need_default_ctor = true;
3788           need_implicitly_determined = true;
3789           break;
3790         case OMP_CLAUSE_FIRSTPRIVATE:
3791           name = "firstprivate";
3792           need_complete_non_reference = true;
3793           need_copy_ctor = true;
3794           need_implicitly_determined = true;
3795           break;
3796         case OMP_CLAUSE_LASTPRIVATE:
3797           name = "lastprivate";
3798           need_complete_non_reference = true;
3799           need_copy_assignment = true;
3800           need_implicitly_determined = true;
3801           break;
3802         case OMP_CLAUSE_REDUCTION:
3803           name = "reduction";
3804           need_implicitly_determined = true;
3805           break;
3806         case OMP_CLAUSE_COPYPRIVATE:
3807           name = "copyprivate";
3808           need_copy_assignment = true;
3809           break;
3810         case OMP_CLAUSE_COPYIN:
3811           name = "copyin";
3812           need_copy_assignment = true;
3813           break;
3814         default:
3815           pc = &OMP_CLAUSE_CHAIN (c);
3816           continue;
3817         }
3818
3819       t = OMP_CLAUSE_DECL (c);
3820       if (processing_template_decl
3821           && TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3822         {
3823           pc = &OMP_CLAUSE_CHAIN (c);
3824           continue;
3825         }
3826
3827       switch (c_kind)
3828         {
3829         case OMP_CLAUSE_LASTPRIVATE:
3830           if (!bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3831             need_default_ctor = true;
3832           break;
3833
3834         case OMP_CLAUSE_REDUCTION:
3835           if (AGGREGATE_TYPE_P (TREE_TYPE (t))
3836               || POINTER_TYPE_P (TREE_TYPE (t)))
3837             {
3838               error ("%qE has invalid type for %<reduction%>", t);
3839               remove = true;
3840             }
3841           else if (FLOAT_TYPE_P (TREE_TYPE (t)))
3842             {
3843               enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
3844               switch (r_code)
3845                 {
3846                 case PLUS_EXPR:
3847                 case MULT_EXPR:
3848                 case MINUS_EXPR:
3849                   break;
3850                 default:
3851                   error ("%qE has invalid type for %<reduction(%s)%>",
3852                          t, operator_name_info[r_code].name);
3853                   remove = true;
3854                 }
3855             }
3856           break;
3857
3858         case OMP_CLAUSE_COPYIN:
3859           if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
3860             {
3861               error ("%qE must be %<threadprivate%> for %<copyin%>", t);
3862               remove = true;
3863             }
3864           break;
3865
3866         default:
3867           break;
3868         }
3869
3870       if (need_complete_non_reference)
3871         {
3872           t = require_complete_type (t);
3873           if (t == error_mark_node)
3874             remove = true;
3875           else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
3876             {
3877               error ("%qE has reference type for %qs", t, name);
3878               remove = true;
3879             }
3880         }
3881       if (need_implicitly_determined)
3882         {
3883           const char *share_name = NULL;
3884
3885           if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
3886             share_name = "threadprivate";
3887           else switch (cxx_omp_predetermined_sharing (t))
3888             {
3889             case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
3890               break;
3891             case OMP_CLAUSE_DEFAULT_SHARED:
3892               share_name = "shared";
3893               break;
3894             case OMP_CLAUSE_DEFAULT_PRIVATE:
3895               share_name = "private";
3896               break;
3897             default:
3898               gcc_unreachable ();
3899             }
3900           if (share_name)
3901             {
3902               error ("%qE is predetermined %qs for %qs",
3903                      t, share_name, name);
3904               remove = true;
3905             }
3906         }
3907
3908       /* We're interested in the base element, not arrays.  */
3909       inner_type = type = TREE_TYPE (t);
3910       while (TREE_CODE (inner_type) == ARRAY_TYPE)
3911         inner_type = TREE_TYPE (inner_type);
3912
3913       /* Check for special function availability by building a call to one.
3914          Save the results, because later we won't be in the right context
3915          for making these queries.  */
3916       if (CLASS_TYPE_P (inner_type)
3917           && (need_default_ctor || need_copy_ctor || need_copy_assignment)
3918           && !type_dependent_expression_p (t)
3919           && cxx_omp_create_clause_info (c, inner_type, need_default_ctor,
3920                                          need_copy_ctor, need_copy_assignment))
3921         remove = true;
3922
3923       if (remove)
3924         *pc = OMP_CLAUSE_CHAIN (c);
3925       else
3926         pc = &OMP_CLAUSE_CHAIN (c);
3927     }
3928
3929   bitmap_obstack_release (NULL);
3930   return clauses;
3931 }
3932
3933 /* For all variables in the tree_list VARS, mark them as thread local.  */
3934
3935 void
3936 finish_omp_threadprivate (tree vars)
3937 {
3938   tree t;
3939
3940   /* Mark every variable in VARS to be assigned thread local storage.  */
3941   for (t = vars; t; t = TREE_CHAIN (t))
3942     {
3943       tree v = TREE_PURPOSE (t);
3944
3945       if (error_operand_p (v))
3946         ;
3947       else if (TREE_CODE (v) != VAR_DECL)
3948         error ("%<threadprivate%> %qD is not file, namespace "
3949                "or block scope variable", v);
3950       /* If V had already been marked threadprivate, it doesn't matter
3951          whether it had been used prior to this point.  */
3952       else if (TREE_USED (v)
3953           && (DECL_LANG_SPECIFIC (v) == NULL
3954               || !CP_DECL_THREADPRIVATE_P (v)))
3955         error ("%qE declared %<threadprivate%> after first use", v);
3956       else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
3957         error ("automatic variable %qE cannot be %<threadprivate%>", v);
3958       else if (! COMPLETE_TYPE_P (TREE_TYPE (v)))
3959         error ("%<threadprivate%> %qE has incomplete type", v);
3960       else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v))
3961                && CP_DECL_CONTEXT (v) != current_class_type)
3962         error ("%<threadprivate%> %qE directive not "
3963                "in %qT definition", v, CP_DECL_CONTEXT (v));
3964       else
3965         {
3966           /* Allocate a LANG_SPECIFIC structure for V, if needed.  */
3967           if (DECL_LANG_SPECIFIC (v) == NULL)
3968             {
3969               retrofit_lang_decl (v);
3970
3971               /* Make sure that DECL_DISCRIMINATOR_P continues to be true
3972                  after the allocation of the lang_decl structure.  */
3973               if (DECL_DISCRIMINATOR_P (v))
3974                 DECL_LANG_SPECIFIC (v)->u.base.u2sel = 1;
3975             }
3976
3977           if (! DECL_THREAD_LOCAL_P (v))
3978             {
3979               DECL_TLS_MODEL (v) = decl_default_tls_model (v);
3980               /* If rtl has been already set for this var, call
3981                  make_decl_rtl once again, so that encode_section_info
3982                  has a chance to look at the new decl flags.  */
3983               if (DECL_RTL_SET_P (v))
3984                 make_decl_rtl (v);
3985             }
3986           CP_DECL_THREADPRIVATE_P (v) = 1;
3987         }
3988     }
3989 }
3990
3991 /* Build an OpenMP structured block.  */
3992
3993 tree
3994 begin_omp_structured_block (void)
3995 {
3996   return do_pushlevel (sk_omp);
3997 }
3998
3999 tree
4000 finish_omp_structured_block (tree block)
4001 {
4002   return do_poplevel (block);
4003 }
4004
4005 /* Similarly, except force the retention of the BLOCK.  */
4006
4007 tree
4008 begin_omp_parallel (void)
4009 {
4010   keep_next_level (true);
4011   return begin_omp_structured_block ();
4012 }
4013
4014 tree
4015 finish_omp_parallel (tree clauses, tree body)
4016 {
4017   tree stmt;
4018
4019   body = finish_omp_structured_block (body);
4020
4021   stmt = make_node (OMP_PARALLEL);
4022   TREE_TYPE (stmt) = void_type_node;
4023   OMP_PARALLEL_CLAUSES (stmt) = clauses;
4024   OMP_PARALLEL_BODY (stmt) = body;
4025
4026   return add_stmt (stmt);
4027 }
4028
4029 tree
4030 begin_omp_task (void)
4031 {
4032   keep_next_level (true);
4033   return begin_omp_structured_block ();
4034 }
4035
4036 tree
4037 finish_omp_task (tree clauses, tree body)
4038 {
4039   tree stmt;
4040
4041   body = finish_omp_structured_block (body);
4042
4043   stmt = make_node (OMP_TASK);
4044   TREE_TYPE (stmt) = void_type_node;
4045   OMP_TASK_CLAUSES (stmt) = clauses;
4046   OMP_TASK_BODY (stmt) = body;
4047
4048   return add_stmt (stmt);
4049 }
4050
4051 /* Helper function for finish_omp_for.  Convert Ith random access iterator
4052    into integral iterator.  Return FALSE if successful.  */
4053
4054 static bool
4055 handle_omp_for_class_iterator (int i, location_t locus, tree declv, tree initv,
4056                                tree condv, tree incrv, tree *body,
4057                                tree *pre_body, tree clauses)
4058 {
4059   tree diff, iter_init, iter_incr = NULL, last;
4060   tree incr_var = NULL, orig_pre_body, orig_body, c;
4061   tree decl = TREE_VEC_ELT (declv, i);
4062   tree init = TREE_VEC_ELT (initv, i);
4063   tree cond = TREE_VEC_ELT (condv, i);
4064   tree incr = TREE_VEC_ELT (incrv, i);
4065   tree iter = decl;
4066   location_t elocus = locus;
4067
4068   if (init && EXPR_HAS_LOCATION (init))
4069     elocus = EXPR_LOCATION (init);
4070
4071   switch (TREE_CODE (cond))
4072     {
4073     case GT_EXPR:
4074     case GE_EXPR:
4075     case LT_EXPR:
4076     case LE_EXPR:
4077       if (TREE_OPERAND (cond, 1) == iter)
4078         cond = build2 (swap_tree_comparison (TREE_CODE (cond)),
4079                        TREE_TYPE (cond), iter, TREE_OPERAND (cond, 0));
4080       if (TREE_OPERAND (cond, 0) != iter)
4081         cond = error_mark_node;
4082       else
4083         {
4084           tree tem = build_x_binary_op (TREE_CODE (cond), iter, ERROR_MARK,
4085                                         TREE_OPERAND (cond, 1), ERROR_MARK,
4086                                         NULL, tf_warning_or_error);
4087           if (error_operand_p (tem))
4088             return true;
4089         }
4090       break;
4091     default:
4092       cond = error_mark_node;
4093       break;
4094     }
4095   if (cond == error_mark_node)
4096     {
4097       error_at (elocus, "invalid controlling predicate");
4098       return true;
4099     }
4100   diff = build_x_binary_op (MINUS_EXPR, TREE_OPERAND (cond, 1),
4101                             ERROR_MARK, iter, ERROR_MARK, NULL,
4102                             tf_warning_or_error);
4103   if (error_operand_p (diff))
4104     return true;
4105   if (TREE_CODE (TREE_TYPE (diff)) != INTEGER_TYPE)
4106     {
4107       error_at (elocus, "difference between %qE and %qD does not have integer type",
4108                 TREE_OPERAND (cond, 1), iter);
4109       return true;
4110     }
4111
4112   switch (TREE_CODE (incr))
4113     {
4114     case PREINCREMENT_EXPR:
4115     case PREDECREMENT_EXPR:
4116     case POSTINCREMENT_EXPR:
4117     case POSTDECREMENT_EXPR:
4118       if (TREE_OPERAND (incr, 0) != iter)
4119         {
4120           incr = error_mark_node;
4121           break;
4122         }
4123       iter_incr = build_x_unary_op (TREE_CODE (incr), iter,
4124                                     tf_warning_or_error);
4125       if (error_operand_p (iter_incr))
4126         return true;
4127       else if (TREE_CODE (incr) == PREINCREMENT_EXPR
4128                || TREE_CODE (incr) == POSTINCREMENT_EXPR)
4129         incr = integer_one_node;
4130       else
4131         incr = integer_minus_one_node;
4132       break;
4133     case MODIFY_EXPR:
4134       if (TREE_OPERAND (incr, 0) != iter)
4135         incr = error_mark_node;
4136       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
4137                || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
4138         {
4139           tree rhs = TREE_OPERAND (incr, 1);
4140           if (TREE_OPERAND (rhs, 0) == iter)
4141             {
4142               if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 1)))
4143                   != INTEGER_TYPE)
4144                 incr = error_mark_node;
4145               else
4146                 {
4147                   iter_incr = build_x_modify_expr (iter, TREE_CODE (rhs),
4148                                                    TREE_OPERAND (rhs, 1),
4149                                                    tf_warning_or_error);
4150                   if (error_operand_p (iter_incr))
4151                     return true;
4152                   incr = TREE_OPERAND (rhs, 1);
4153                   incr = cp_convert (TREE_TYPE (diff), incr);
4154                   if (TREE_CODE (rhs) == MINUS_EXPR)
4155                     {
4156                       incr = build1 (NEGATE_EXPR, TREE_TYPE (diff), incr);
4157                       incr = fold_if_not_in_template (incr);
4158                     }
4159                   if (TREE_CODE (incr) != INTEGER_CST
4160                       && (TREE_CODE (incr) != NOP_EXPR
4161                           || (TREE_CODE (TREE_OPERAND (incr, 0))
4162                               != INTEGER_CST)))
4163                     iter_incr = NULL;
4164                 }
4165             }
4166           else if (TREE_OPERAND (rhs, 1) == iter)
4167             {
4168               if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 0))) != INTEGER_TYPE
4169                   || TREE_CODE (rhs) != PLUS_EXPR)
4170                 incr = error_mark_node;
4171               else
4172                 {
4173                   iter_incr = build_x_binary_op (PLUS_EXPR,
4174                                                  TREE_OPERAND (rhs, 0),
4175                                                  ERROR_MARK, iter,
4176                                                  ERROR_MARK, NULL,
4177                                                  tf_warning_or_error);
4178                   if (error_operand_p (iter_incr))
4179                     return true;
4180                   iter_incr = build_x_modify_expr (iter, NOP_EXPR,
4181                                                    iter_incr,
4182                                                    tf_warning_or_error);
4183                   if (error_operand_p (iter_incr))
4184                     return true;
4185                   incr = TREE_OPERAND (rhs, 0);
4186                   iter_incr = NULL;
4187                 }
4188             }
4189           else
4190             incr = error_mark_node;
4191         }
4192       else
4193         incr = error_mark_node;
4194       break;
4195     default:
4196       incr = error_mark_node;
4197       break;
4198     }
4199
4200   if (incr == error_mark_node)
4201     {
4202       error_at (elocus, "invalid increment expression");
4203       return true;
4204     }
4205
4206   incr = cp_convert (TREE_TYPE (diff), incr);
4207   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
4208     if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
4209         && OMP_CLAUSE_DECL (c) == iter)
4210       break;
4211
4212   decl = create_temporary_var (TREE_TYPE (diff));
4213   pushdecl (decl);
4214   add_decl_expr (decl);
4215   last = create_temporary_var (TREE_TYPE (diff));
4216   pushdecl (last);
4217   add_decl_expr (last);
4218   if (c && iter_incr == NULL)
4219     {
4220       incr_var = create_temporary_var (TREE_TYPE (diff));
4221       pushdecl (incr_var);
4222       add_decl_expr (incr_var);
4223     }
4224   gcc_assert (stmts_are_full_exprs_p ());
4225
4226   orig_pre_body = *pre_body;
4227   *pre_body = push_stmt_list ();
4228   if (orig_pre_body)
4229     add_stmt (orig_pre_body);
4230   if (init != NULL)
4231     finish_expr_stmt (build_x_modify_expr (iter, NOP_EXPR, init,
4232                                            tf_warning_or_error));
4233   init = build_int_cst (TREE_TYPE (diff), 0);
4234   if (c && iter_incr == NULL)
4235     {
4236       finish_expr_stmt (build_x_modify_expr (incr_var, NOP_EXPR,
4237                                              incr, tf_warning_or_error));
4238       incr = incr_var;
4239       iter_incr = build_x_modify_expr (iter, PLUS_EXPR, incr,
4240                                        tf_warning_or_error);
4241     }
4242   finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, init,
4243                                          tf_warning_or_error));
4244   *pre_body = pop_stmt_list (*pre_body);
4245
4246   cond = cp_build_binary_op (elocus,
4247                              TREE_CODE (cond), decl, diff,
4248                              tf_warning_or_error);
4249   incr = build_modify_expr (elocus, decl, NULL_TREE, PLUS_EXPR,
4250                             elocus, incr, NULL_TREE);
4251
4252   orig_body = *body;
4253   *body = push_stmt_list ();
4254   iter_init = build2 (MINUS_EXPR, TREE_TYPE (diff), decl, last);
4255   iter_init = build_x_modify_expr (iter, PLUS_EXPR, iter_init,
4256                                    tf_warning_or_error);
4257   iter_init = build1 (NOP_EXPR, void_type_node, iter_init);
4258   finish_expr_stmt (iter_init);
4259   finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, decl,
4260                                          tf_warning_or_error));
4261   add_stmt (orig_body);
4262   *body = pop_stmt_list (*body);
4263
4264   if (c)
4265     {
4266       OMP_CLAUSE_LASTPRIVATE_STMT (c) = push_stmt_list ();
4267       finish_expr_stmt (iter_incr);
4268       OMP_CLAUSE_LASTPRIVATE_STMT (c)
4269         = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (c));
4270     }
4271
4272   TREE_VEC_ELT (declv, i) = decl;
4273   TREE_VEC_ELT (initv, i) = init;
4274   TREE_VEC_ELT (condv, i) = cond;
4275   TREE_VEC_ELT (incrv, i) = incr;
4276
4277   return false;
4278 }
4279
4280 /* Build and validate an OMP_FOR statement.  CLAUSES, BODY, COND, INCR
4281    are directly for their associated operands in the statement.  DECL
4282    and INIT are a combo; if DECL is NULL then INIT ought to be a
4283    MODIFY_EXPR, and the DECL should be extracted.  PRE_BODY are
4284    optional statements that need to go before the loop into its
4285    sk_omp scope.  */
4286
4287 tree
4288 finish_omp_for (location_t locus, tree declv, tree initv, tree condv,
4289                 tree incrv, tree body, tree pre_body, tree clauses)
4290 {
4291   tree omp_for = NULL, orig_incr = NULL;
4292   tree decl, init, cond, incr;
4293   location_t elocus;
4294   int i;
4295
4296   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (initv));
4297   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (condv));
4298   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (incrv));
4299   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4300     {
4301       decl = TREE_VEC_ELT (declv, i);
4302       init = TREE_VEC_ELT (initv, i);
4303       cond = TREE_VEC_ELT (condv, i);
4304       incr = TREE_VEC_ELT (incrv, i);
4305       elocus = locus;
4306
4307       if (decl == NULL)
4308         {
4309           if (init != NULL)
4310             switch (TREE_CODE (init))
4311               {
4312               case MODIFY_EXPR:
4313                 decl = TREE_OPERAND (init, 0);
4314                 init = TREE_OPERAND (init, 1);
4315                 break;
4316               case MODOP_EXPR:
4317                 if (TREE_CODE (TREE_OPERAND (init, 1)) == NOP_EXPR)
4318                   {
4319                     decl = TREE_OPERAND (init, 0);
4320                     init = TREE_OPERAND (init, 2);
4321                   }
4322                 break;
4323               default:
4324                 break;
4325               }
4326
4327           if (decl == NULL)
4328             {
4329               error_at (locus,
4330                         "expected iteration declaration or initialization");
4331               return NULL;
4332             }
4333         }
4334
4335       if (init && EXPR_HAS_LOCATION (init))
4336         elocus = EXPR_LOCATION (init);
4337
4338       if (cond == NULL)
4339         {
4340           error_at (elocus, "missing controlling predicate");
4341           return NULL;
4342         }
4343
4344       if (incr == NULL)
4345         {
4346           error_at (elocus, "missing increment expression");
4347           return NULL;
4348         }
4349
4350       TREE_VEC_ELT (declv, i) = decl;
4351       TREE_VEC_ELT (initv, i) = init;
4352     }
4353
4354   if (dependent_omp_for_p (declv, initv, condv, incrv))
4355     {
4356       tree stmt;
4357
4358       stmt = make_node (OMP_FOR);
4359
4360       for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4361         {
4362           /* This is really just a place-holder.  We'll be decomposing this
4363              again and going through the cp_build_modify_expr path below when
4364              we instantiate the thing.  */
4365           TREE_VEC_ELT (initv, i)
4366             = build2 (MODIFY_EXPR, void_type_node, TREE_VEC_ELT (declv, i),
4367                       TREE_VEC_ELT (initv, i));
4368         }
4369
4370       TREE_TYPE (stmt) = void_type_node;
4371       OMP_FOR_INIT (stmt) = initv;
4372       OMP_FOR_COND (stmt) = condv;
4373       OMP_FOR_INCR (stmt) = incrv;
4374       OMP_FOR_BODY (stmt) = body;
4375       OMP_FOR_PRE_BODY (stmt) = pre_body;
4376       OMP_FOR_CLAUSES (stmt) = clauses;
4377
4378       SET_EXPR_LOCATION (stmt, locus);
4379       return add_stmt (stmt);
4380     }
4381
4382   if (processing_template_decl)
4383     orig_incr = make_tree_vec (TREE_VEC_LENGTH (incrv));
4384
4385   for (i = 0; i < TREE_VEC_LENGTH (declv); )
4386     {
4387       decl = TREE_VEC_ELT (declv, i);
4388       init = TREE_VEC_ELT (initv, i);
4389       cond = TREE_VEC_ELT (condv, i);
4390       incr = TREE_VEC_ELT (incrv, i);
4391       if (orig_incr)
4392         TREE_VEC_ELT (orig_incr, i) = incr;
4393       elocus = locus;
4394
4395       if (init && EXPR_HAS_LOCATION (init))
4396         elocus = EXPR_LOCATION (init);
4397
4398       if (!DECL_P (decl))
4399         {
4400           error_at (elocus, "expected iteration declaration or initialization");
4401           return NULL;
4402         }
4403
4404       if (incr && TREE_CODE (incr) == MODOP_EXPR)
4405         {
4406           if (orig_incr)
4407             TREE_VEC_ELT (orig_incr, i) = incr;
4408           incr = cp_build_modify_expr (TREE_OPERAND (incr, 0),
4409                                        TREE_CODE (TREE_OPERAND (incr, 1)),
4410                                        TREE_OPERAND (incr, 2),
4411                                        tf_warning_or_error);
4412         }
4413
4414       if (CLASS_TYPE_P (TREE_TYPE (decl)))
4415         {
4416           if (handle_omp_for_class_iterator (i, locus, declv, initv, condv,
4417                                              incrv, &body, &pre_body, clauses))
4418             return NULL;
4419           continue;
4420         }
4421
4422       if (!INTEGRAL_TYPE_P (TREE_TYPE (decl))
4423           && TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
4424         {
4425           error_at (elocus, "invalid type for iteration variable %qE", decl);
4426           return NULL;
4427         }
4428
4429       if (!processing_template_decl)
4430         {
4431           init = fold_build_cleanup_point_expr (TREE_TYPE (init), init);
4432           init = cp_build_modify_expr (decl, NOP_EXPR, init, tf_warning_or_error);
4433         }
4434       else
4435         init = build2 (MODIFY_EXPR, void_type_node, decl, init);
4436       if (cond
4437           && TREE_SIDE_EFFECTS (cond)
4438           && COMPARISON_CLASS_P (cond)
4439           && !processing_template_decl)
4440         {
4441           tree t = TREE_OPERAND (cond, 0);
4442           if (TREE_SIDE_EFFECTS (t)
4443               && t != decl
4444               && (TREE_CODE (t) != NOP_EXPR
4445                   || TREE_OPERAND (t, 0) != decl))
4446             TREE_OPERAND (cond, 0)
4447               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4448
4449           t = TREE_OPERAND (cond, 1);
4450           if (TREE_SIDE_EFFECTS (t)
4451               && t != decl
4452               && (TREE_CODE (t) != NOP_EXPR
4453                   || TREE_OPERAND (t, 0) != decl))
4454             TREE_OPERAND (cond, 1)
4455               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4456         }
4457       if (decl == error_mark_node || init == error_mark_node)
4458         return NULL;
4459
4460       TREE_VEC_ELT (declv, i) = decl;
4461       TREE_VEC_ELT (initv, i) = init;
4462       TREE_VEC_ELT (condv, i) = cond;
4463       TREE_VEC_ELT (incrv, i) = incr;
4464       i++;
4465     }
4466
4467   if (IS_EMPTY_STMT (pre_body))
4468     pre_body = NULL;
4469
4470   omp_for = c_finish_omp_for (locus, declv, initv, condv, incrv,
4471                               body, pre_body);
4472
4473   if (omp_for == NULL)
4474     return NULL;
4475
4476   for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INCR (omp_for)); i++)
4477     {
4478       decl = TREE_OPERAND (TREE_VEC_ELT (OMP_FOR_INIT (omp_for), i), 0);
4479       incr = TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i);
4480
4481       if (TREE_CODE (incr) != MODIFY_EXPR)
4482         continue;
4483
4484       if (TREE_SIDE_EFFECTS (TREE_OPERAND (incr, 1))
4485           && BINARY_CLASS_P (TREE_OPERAND (incr, 1))
4486           && !processing_template_decl)
4487         {
4488           tree t = TREE_OPERAND (TREE_OPERAND (incr, 1), 0);
4489           if (TREE_SIDE_EFFECTS (t)
4490               && t != decl
4491               && (TREE_CODE (t) != NOP_EXPR
4492                   || TREE_OPERAND (t, 0) != decl))
4493             TREE_OPERAND (TREE_OPERAND (incr, 1), 0)
4494               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4495
4496           t = TREE_OPERAND (TREE_OPERAND (incr, 1), 1);
4497           if (TREE_SIDE_EFFECTS (t)
4498               && t != decl
4499               && (TREE_CODE (t) != NOP_EXPR
4500                   || TREE_OPERAND (t, 0) != decl))
4501             TREE_OPERAND (TREE_OPERAND (incr, 1), 1)
4502               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4503         }
4504
4505       if (orig_incr)
4506         TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i) = TREE_VEC_ELT (orig_incr, i);
4507     }
4508   if (omp_for != NULL)
4509     OMP_FOR_CLAUSES (omp_for) = clauses;
4510   return omp_for;
4511 }
4512
4513 void
4514 finish_omp_atomic (enum tree_code code, tree lhs, tree rhs)
4515 {
4516   tree orig_lhs;
4517   tree orig_rhs;
4518   bool dependent_p;
4519   tree stmt;
4520
4521   orig_lhs = lhs;
4522   orig_rhs = rhs;
4523   dependent_p = false;
4524   stmt = NULL_TREE;
4525
4526   /* Even in a template, we can detect invalid uses of the atomic
4527      pragma if neither LHS nor RHS is type-dependent.  */
4528   if (processing_template_decl)
4529     {
4530       dependent_p = (type_dependent_expression_p (lhs)
4531                      || type_dependent_expression_p (rhs));
4532       if (!dependent_p)
4533         {
4534           lhs = build_non_dependent_expr (lhs);
4535           rhs = build_non_dependent_expr (rhs);
4536         }
4537     }
4538   if (!dependent_p)
4539     {
4540       stmt = c_finish_omp_atomic (input_location, code, lhs, rhs);
4541       if (stmt == error_mark_node)
4542         return;
4543     }
4544   if (processing_template_decl)
4545     stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node,
4546                    build2 (code, void_type_node, orig_lhs, orig_rhs));
4547   add_stmt (stmt);
4548 }
4549
4550 void
4551 finish_omp_barrier (void)
4552 {
4553   tree fn = built_in_decls[BUILT_IN_GOMP_BARRIER];
4554   VEC(tree,gc) *vec = make_tree_vector ();
4555   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4556   release_tree_vector (vec);
4557   finish_expr_stmt (stmt);
4558 }
4559
4560 void
4561 finish_omp_flush (void)
4562 {
4563   tree fn = built_in_decls[BUILT_IN_SYNCHRONIZE];
4564   VEC(tree,gc) *vec = make_tree_vector ();
4565   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4566   release_tree_vector (vec);
4567   finish_expr_stmt (stmt);
4568 }
4569
4570 void
4571 finish_omp_taskwait (void)
4572 {
4573   tree fn = built_in_decls[BUILT_IN_GOMP_TASKWAIT];
4574   VEC(tree,gc) *vec = make_tree_vector ();
4575   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4576   release_tree_vector (vec);
4577   finish_expr_stmt (stmt);
4578 }
4579 \f
4580 void
4581 init_cp_semantics (void)
4582 {
4583 }
4584 \f
4585 /* Build a STATIC_ASSERT for a static assertion with the condition
4586    CONDITION and the message text MESSAGE.  LOCATION is the location
4587    of the static assertion in the source code.  When MEMBER_P, this
4588    static assertion is a member of a class.  */
4589 void 
4590 finish_static_assert (tree condition, tree message, location_t location, 
4591                       bool member_p)
4592 {
4593   if (check_for_bare_parameter_packs (condition))
4594     condition = error_mark_node;
4595
4596   if (type_dependent_expression_p (condition) 
4597       || value_dependent_expression_p (condition))
4598     {
4599       /* We're in a template; build a STATIC_ASSERT and put it in
4600          the right place. */
4601       tree assertion;
4602
4603       assertion = make_node (STATIC_ASSERT);
4604       STATIC_ASSERT_CONDITION (assertion) = condition;
4605       STATIC_ASSERT_MESSAGE (assertion) = message;
4606       STATIC_ASSERT_SOURCE_LOCATION (assertion) = location;
4607
4608       if (member_p)
4609         maybe_add_class_template_decl_list (current_class_type, 
4610                                             assertion,
4611                                             /*friend_p=*/0);
4612       else
4613         add_stmt (assertion);
4614
4615       return;
4616     }
4617
4618   /* Fold the expression and convert it to a boolean value. */
4619   condition = fold_non_dependent_expr (condition);
4620   condition = cp_convert (boolean_type_node, condition);
4621
4622   if (TREE_CODE (condition) == INTEGER_CST && !integer_zerop (condition))
4623     /* Do nothing; the condition is satisfied. */
4624     ;
4625   else 
4626     {
4627       location_t saved_loc = input_location;
4628
4629       input_location = location;
4630       if (TREE_CODE (condition) == INTEGER_CST 
4631           && integer_zerop (condition))
4632         /* Report the error. */
4633         error ("static assertion failed: %E", message);
4634       else if (condition && condition != error_mark_node)
4635         error ("non-constant condition for static assertion");
4636       input_location = saved_loc;
4637     }
4638 }
4639 \f
4640 /* Returns the type of EXPR for cases where we can determine it even though
4641    EXPR is a type-dependent expression.  */
4642
4643 tree
4644 describable_type (tree expr)
4645 {
4646   tree type = NULL_TREE;
4647
4648   if (! type_dependent_expression_p (expr)
4649       && ! type_unknown_p (expr))
4650     {
4651       type = unlowered_expr_type (expr);
4652       if (real_lvalue_p (expr))
4653         type = build_reference_type (type);
4654     }
4655
4656   if (type)
4657     return type;
4658
4659   switch (TREE_CODE (expr))
4660     {
4661     case VAR_DECL:
4662     case PARM_DECL:
4663     case RESULT_DECL:
4664     case FUNCTION_DECL:
4665       return TREE_TYPE (expr);
4666       break;
4667
4668     case NEW_EXPR:
4669     case CONST_DECL:
4670     case TEMPLATE_PARM_INDEX:
4671     case CAST_EXPR:
4672     case STATIC_CAST_EXPR:
4673     case REINTERPRET_CAST_EXPR:
4674     case CONST_CAST_EXPR:
4675     case DYNAMIC_CAST_EXPR:
4676       type = TREE_TYPE (expr);
4677       break;
4678
4679     case INDIRECT_REF:
4680       {
4681         tree ptrtype = describable_type (TREE_OPERAND (expr, 0));
4682         if (ptrtype && POINTER_TYPE_P (ptrtype))
4683           type = build_reference_type (TREE_TYPE (ptrtype));
4684       }
4685       break;
4686
4687     default:
4688       if (TREE_CODE_CLASS (TREE_CODE (expr)) == tcc_constant)
4689         type = TREE_TYPE (expr);
4690       break;
4691     }
4692
4693   if (type && type_uses_auto (type))
4694     return NULL_TREE;
4695   else
4696     return type;
4697 }
4698
4699 /* Implements the C++0x decltype keyword. Returns the type of EXPR,
4700    suitable for use as a type-specifier.
4701
4702    ID_EXPRESSION_OR_MEMBER_ACCESS_P is true when EXPR was parsed as an
4703    id-expression or a class member access, FALSE when it was parsed as
4704    a full expression.  */
4705
4706 tree
4707 finish_decltype_type (tree expr, bool id_expression_or_member_access_p)
4708 {
4709   tree orig_expr = expr;
4710   tree type = NULL_TREE;
4711
4712   if (!expr || error_operand_p (expr))
4713     return error_mark_node;
4714
4715   if (TYPE_P (expr)
4716       || TREE_CODE (expr) == TYPE_DECL
4717       || (TREE_CODE (expr) == BIT_NOT_EXPR
4718           && TYPE_P (TREE_OPERAND (expr, 0))))
4719     {
4720       error ("argument to decltype must be an expression");
4721       return error_mark_node;
4722     }
4723
4724   if (type_dependent_expression_p (expr)
4725       /* In a template, a COMPONENT_REF has an IDENTIFIER_NODE for op1 even
4726          if it isn't dependent, so that we can check access control at
4727          instantiation time, so defer the decltype as well (PR 42277).  */
4728       || (id_expression_or_member_access_p
4729           && processing_template_decl
4730           && TREE_CODE (expr) == COMPONENT_REF))
4731     {
4732       if (id_expression_or_member_access_p)
4733         {
4734           switch (TREE_CODE (expr))
4735             {
4736             case VAR_DECL:
4737             case PARM_DECL:
4738             case RESULT_DECL:
4739             case FUNCTION_DECL:
4740             case CONST_DECL:
4741             case TEMPLATE_PARM_INDEX:
4742               type = TREE_TYPE (expr);
4743               break;
4744
4745             default:
4746               break;
4747             }
4748         }
4749
4750       if (type && !type_uses_auto (type))
4751         return type;
4752
4753     treat_as_dependent:
4754       type = cxx_make_type (DECLTYPE_TYPE);
4755       DECLTYPE_TYPE_EXPR (type) = expr;
4756       DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type)
4757         = id_expression_or_member_access_p;
4758       SET_TYPE_STRUCTURAL_EQUALITY (type);
4759
4760       return type;
4761     }
4762
4763   /* The type denoted by decltype(e) is defined as follows:  */
4764
4765   expr = resolve_nondeduced_context (expr);
4766
4767   /* To get the size of a static data member declared as an array of
4768      unknown bound, we need to instantiate it.  */
4769   if (TREE_CODE (expr) == VAR_DECL
4770       && VAR_HAD_UNKNOWN_BOUND (expr)
4771       && DECL_TEMPLATE_INSTANTIATION (expr))
4772     instantiate_decl (expr, /*defer_ok*/true, /*expl_inst_mem*/false);
4773
4774   if (id_expression_or_member_access_p)
4775     {
4776       /* If e is an id-expression or a class member access (5.2.5
4777          [expr.ref]), decltype(e) is defined as the type of the entity
4778          named by e. If there is no such entity, or e names a set of
4779          overloaded functions, the program is ill-formed.  */
4780       if (TREE_CODE (expr) == IDENTIFIER_NODE)
4781         expr = lookup_name (expr);
4782
4783       if (TREE_CODE (expr) == INDIRECT_REF)
4784         /* This can happen when the expression is, e.g., "a.b". Just
4785            look at the underlying operand.  */
4786         expr = TREE_OPERAND (expr, 0);
4787
4788       if (TREE_CODE (expr) == OFFSET_REF
4789           || TREE_CODE (expr) == MEMBER_REF)
4790         /* We're only interested in the field itself. If it is a
4791            BASELINK, we will need to see through it in the next
4792            step.  */
4793         expr = TREE_OPERAND (expr, 1);
4794
4795       if (TREE_CODE (expr) == BASELINK)
4796         /* See through BASELINK nodes to the underlying functions.  */
4797         expr = BASELINK_FUNCTIONS (expr);
4798
4799       if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
4800         expr = TREE_OPERAND (expr, 0);
4801
4802       if (TREE_CODE (expr) == OVERLOAD)
4803         {
4804           if (OVL_CHAIN (expr)
4805               || TREE_CODE (OVL_FUNCTION (expr)) == TEMPLATE_DECL)
4806             {
4807               error ("%qE refers to a set of overloaded functions", orig_expr);
4808               return error_mark_node;
4809             }
4810           else
4811             /* An overload set containing only one function: just look
4812                at that function.  */
4813             expr = OVL_FUNCTION (expr);
4814         }
4815
4816       switch (TREE_CODE (expr))
4817         {
4818         case FIELD_DECL:
4819           if (DECL_BIT_FIELD_TYPE (expr))
4820             {
4821               type = DECL_BIT_FIELD_TYPE (expr);
4822               break;
4823             }
4824           /* Fall through for fields that aren't bitfields.  */
4825
4826         case FUNCTION_DECL:
4827         case VAR_DECL:
4828         case CONST_DECL:
4829         case PARM_DECL:
4830         case RESULT_DECL:
4831         case TEMPLATE_PARM_INDEX:
4832           expr = mark_type_use (expr);
4833           type = TREE_TYPE (expr);
4834           break;
4835
4836         case ERROR_MARK:
4837           type = error_mark_node;
4838           break;
4839
4840         case COMPONENT_REF:
4841           mark_type_use (expr);
4842           type = is_bitfield_expr_with_lowered_type (expr);
4843           if (!type)
4844             type = TREE_TYPE (TREE_OPERAND (expr, 1));
4845           break;
4846
4847         case BIT_FIELD_REF:
4848           gcc_unreachable ();
4849
4850         case INTEGER_CST:
4851           /* We can get here when the id-expression refers to an
4852              enumerator.  */
4853           type = TREE_TYPE (expr);
4854           break;
4855
4856         default:
4857           gcc_assert (TYPE_P (expr) || DECL_P (expr)
4858                       || TREE_CODE (expr) == SCOPE_REF);
4859           error ("argument to decltype must be an expression");
4860           return error_mark_node;
4861         }
4862     }
4863   else
4864     {
4865       /* Expressions of reference type are sometimes wrapped in
4866          INDIRECT_REFs.  INDIRECT_REFs are just internal compiler
4867          representation, not part of the language, so we have to look
4868          through them.  */
4869       if (TREE_CODE (expr) == INDIRECT_REF
4870           && TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0)))
4871           == REFERENCE_TYPE)
4872         expr = TREE_OPERAND (expr, 0);
4873
4874       if (TREE_CODE (expr) == CALL_EXPR)
4875         {
4876           /* If e is a function call (5.2.2 [expr.call]) or an
4877            invocation of an overloaded operator (parentheses around e
4878            are ignored), decltype(e) is defined as the return type of
4879            that function.  */
4880           tree fndecl = get_callee_fndecl (expr);
4881           if (fndecl && fndecl != error_mark_node)
4882             type = TREE_TYPE (TREE_TYPE (fndecl));
4883           else 
4884             {
4885               tree target_type = TREE_TYPE (CALL_EXPR_FN (expr));
4886               if ((TREE_CODE (target_type) == REFERENCE_TYPE
4887                    || TREE_CODE (target_type) == POINTER_TYPE)
4888                   && (TREE_CODE (TREE_TYPE (target_type)) == FUNCTION_TYPE
4889                       || TREE_CODE (TREE_TYPE (target_type)) == METHOD_TYPE))
4890                 type = TREE_TYPE (TREE_TYPE (target_type));
4891               else if (processing_template_decl)
4892                 /* Within a template finish_call_expr doesn't resolve
4893                    CALL_EXPR_FN, so even though this decltype isn't really
4894                    dependent let's defer resolving it.  */
4895                 goto treat_as_dependent;
4896               else
4897                 sorry ("unable to determine the declared type of expression %<%E%>",
4898                        expr);
4899             }
4900         }
4901       else 
4902         {
4903           type = is_bitfield_expr_with_lowered_type (expr);
4904           if (type)
4905             {
4906               /* Bitfields are special, because their type encodes the
4907                  number of bits they store.  If the expression referenced a
4908                  bitfield, TYPE now has the declared type of that
4909                  bitfield.  */
4910               type = cp_build_qualified_type (type, 
4911                                               cp_type_quals (TREE_TYPE (expr)));
4912               
4913               if (real_lvalue_p (expr))
4914                 type = build_reference_type (type);
4915             }
4916           /* Within a lambda-expression:
4917
4918              Every occurrence of decltype((x)) where x is a possibly
4919              parenthesized id-expression that names an entity of
4920              automatic storage duration is treated as if x were
4921              transformed into an access to a corresponding data member
4922              of the closure type that would have been declared if x
4923              were a use of the denoted entity.  */
4924           else if (outer_automatic_var_p (expr)
4925                    && current_function_decl
4926                    && LAMBDA_FUNCTION_P (current_function_decl))
4927             type = capture_decltype (expr);
4928           else
4929             {
4930               /* Otherwise, where T is the type of e, if e is an lvalue,
4931                  decltype(e) is defined as T&, otherwise decltype(e) is
4932                  defined as T.  */
4933               type = TREE_TYPE (expr);
4934               if (type == error_mark_node)
4935                 return error_mark_node;
4936               else if (expr == current_class_ptr)
4937                 /* If the expression is just "this", we want the
4938                    cv-unqualified pointer for the "this" type.  */
4939                 type = TYPE_MAIN_VARIANT (type);
4940               else if (real_lvalue_p (expr))
4941                 {
4942                   if (TREE_CODE (type) != REFERENCE_TYPE
4943                       || TYPE_REF_IS_RVALUE (type))
4944                     type = build_reference_type (non_reference (type));
4945                 }
4946               else
4947                 type = non_reference (type);
4948             }
4949         }
4950     }
4951
4952   if (!type || type == unknown_type_node)
4953     {
4954       error ("type of %qE is unknown", expr);
4955       return error_mark_node;
4956     }
4957
4958   return type;
4959 }
4960
4961 /* Called from trait_expr_value to evaluate either __has_nothrow_assign or 
4962    __has_nothrow_copy, depending on assign_p.  */
4963
4964 static bool
4965 classtype_has_nothrow_assign_or_copy_p (tree type, bool assign_p)
4966 {
4967   tree fns;
4968
4969   if (assign_p)
4970     {
4971       int ix;
4972       ix = lookup_fnfields_1 (type, ansi_assopname (NOP_EXPR));
4973       if (ix < 0)
4974         return false;
4975       fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), ix);
4976     } 
4977   else if (TYPE_HAS_COPY_CTOR (type))
4978     {
4979       /* If construction of the copy constructor was postponed, create
4980          it now.  */
4981       if (CLASSTYPE_LAZY_COPY_CTOR (type))
4982         lazily_declare_fn (sfk_copy_constructor, type);
4983       if (CLASSTYPE_LAZY_MOVE_CTOR (type))
4984         lazily_declare_fn (sfk_move_constructor, type);
4985       fns = CLASSTYPE_CONSTRUCTORS (type);
4986     }
4987   else
4988     return false;
4989
4990   for (; fns; fns = OVL_NEXT (fns))
4991     {
4992       tree fn = OVL_CURRENT (fns);
4993  
4994       if (assign_p)
4995         {
4996           if (copy_fn_p (fn) == 0)
4997             continue;
4998         }
4999       else if (copy_fn_p (fn) <= 0)
5000         continue;
5001
5002       if (!TYPE_NOTHROW_P (TREE_TYPE (fn)))
5003         return false;
5004     }
5005
5006   return true;
5007 }
5008
5009 /* Actually evaluates the trait.  */
5010
5011 static bool
5012 trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
5013 {
5014   enum tree_code type_code1;
5015   tree t;
5016
5017   type_code1 = TREE_CODE (type1);
5018
5019   switch (kind)
5020     {
5021     case CPTK_HAS_NOTHROW_ASSIGN:
5022       type1 = strip_array_types (type1);
5023       return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5024               && (trait_expr_value (CPTK_HAS_TRIVIAL_ASSIGN, type1, type2)
5025                   || (CLASS_TYPE_P (type1)
5026                       && classtype_has_nothrow_assign_or_copy_p (type1,
5027                                                                  true))));
5028
5029     case CPTK_HAS_TRIVIAL_ASSIGN:
5030       /* ??? The standard seems to be missing the "or array of such a class
5031          type" wording for this trait.  */
5032       type1 = strip_array_types (type1);
5033       return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5034               && (trivial_type_p (type1)
5035                     || (CLASS_TYPE_P (type1)
5036                         && TYPE_HAS_TRIVIAL_COPY_ASSIGN (type1))));
5037
5038     case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5039       type1 = strip_array_types (type1);
5040       return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2) 
5041               || (CLASS_TYPE_P (type1)
5042                   && (t = locate_ctor (type1))
5043                   && TYPE_NOTHROW_P (TREE_TYPE (t))));
5044
5045     case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5046       type1 = strip_array_types (type1);
5047       return (trivial_type_p (type1)
5048               || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_DFLT (type1)));
5049
5050     case CPTK_HAS_NOTHROW_COPY:
5051       type1 = strip_array_types (type1);
5052       return (trait_expr_value (CPTK_HAS_TRIVIAL_COPY, type1, type2)
5053               || (CLASS_TYPE_P (type1)
5054                   && classtype_has_nothrow_assign_or_copy_p (type1, false)));
5055
5056     case CPTK_HAS_TRIVIAL_COPY:
5057       /* ??? The standard seems to be missing the "or array of such a class
5058          type" wording for this trait.  */
5059       type1 = strip_array_types (type1);
5060       return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5061               || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_COPY_CTOR (type1)));
5062
5063     case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5064       type1 = strip_array_types (type1);
5065       return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5066               || (CLASS_TYPE_P (type1)
5067                   && TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
5068
5069     case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5070       return type_has_virtual_destructor (type1);
5071
5072     case CPTK_IS_ABSTRACT:
5073       return (CLASS_TYPE_P (type1) && CLASSTYPE_PURE_VIRTUALS (type1));
5074
5075     case CPTK_IS_BASE_OF:
5076       return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5077               && DERIVED_FROM_P (type1, type2));
5078
5079     case CPTK_IS_CLASS:
5080       return (NON_UNION_CLASS_TYPE_P (type1));
5081
5082     case CPTK_IS_CONVERTIBLE_TO:
5083       /* TODO  */
5084       return false;
5085
5086     case CPTK_IS_EMPTY:
5087       return (NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1));
5088
5089     case CPTK_IS_ENUM:
5090       return (type_code1 == ENUMERAL_TYPE);
5091
5092     case CPTK_IS_POD:
5093       return (pod_type_p (type1));
5094
5095     case CPTK_IS_POLYMORPHIC:
5096       return (CLASS_TYPE_P (type1) && TYPE_POLYMORPHIC_P (type1));
5097
5098     case CPTK_IS_STD_LAYOUT:
5099       return (std_layout_type_p (type1));
5100
5101     case CPTK_IS_TRIVIAL:
5102       return (trivial_type_p (type1));
5103
5104     case CPTK_IS_UNION:
5105       return (type_code1 == UNION_TYPE);
5106
5107     case CPTK_IS_LITERAL_TYPE:
5108       return (literal_type_p (type1));
5109
5110     default:
5111       gcc_unreachable ();
5112       return false;
5113     }
5114 }
5115
5116 /* Returns true if TYPE is a complete type, an array of unknown bound,
5117    or (possibly cv-qualified) void, returns false otherwise.  */
5118
5119 static bool
5120 check_trait_type (tree type)
5121 {
5122   if (COMPLETE_TYPE_P (type))
5123     return true;
5124
5125   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
5126       && COMPLETE_TYPE_P (TREE_TYPE (type)))
5127     return true;
5128
5129   if (VOID_TYPE_P (type))
5130     return true;
5131
5132   return false;
5133 }
5134
5135 /* Process a trait expression.  */
5136
5137 tree
5138 finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
5139 {
5140   gcc_assert (kind == CPTK_HAS_NOTHROW_ASSIGN
5141               || kind == CPTK_HAS_NOTHROW_CONSTRUCTOR
5142               || kind == CPTK_HAS_NOTHROW_COPY
5143               || kind == CPTK_HAS_TRIVIAL_ASSIGN
5144               || kind == CPTK_HAS_TRIVIAL_CONSTRUCTOR
5145               || kind == CPTK_HAS_TRIVIAL_COPY
5146               || kind == CPTK_HAS_TRIVIAL_DESTRUCTOR
5147               || kind == CPTK_HAS_VIRTUAL_DESTRUCTOR          
5148               || kind == CPTK_IS_ABSTRACT
5149               || kind == CPTK_IS_BASE_OF
5150               || kind == CPTK_IS_CLASS
5151               || kind == CPTK_IS_CONVERTIBLE_TO
5152               || kind == CPTK_IS_EMPTY
5153               || kind == CPTK_IS_ENUM
5154               || kind == CPTK_IS_POD
5155               || kind == CPTK_IS_POLYMORPHIC
5156               || kind == CPTK_IS_STD_LAYOUT
5157               || kind == CPTK_IS_TRIVIAL
5158               || kind == CPTK_IS_LITERAL_TYPE
5159               || kind == CPTK_IS_UNION);
5160
5161   if (kind == CPTK_IS_CONVERTIBLE_TO)
5162     {
5163       sorry ("__is_convertible_to");
5164       return error_mark_node;
5165     }
5166
5167   if (type1 == error_mark_node
5168       || ((kind == CPTK_IS_BASE_OF || kind == CPTK_IS_CONVERTIBLE_TO)
5169           && type2 == error_mark_node))
5170     return error_mark_node;
5171
5172   if (processing_template_decl)
5173     {
5174       tree trait_expr = make_node (TRAIT_EXPR);
5175       TREE_TYPE (trait_expr) = boolean_type_node;
5176       TRAIT_EXPR_TYPE1 (trait_expr) = type1;
5177       TRAIT_EXPR_TYPE2 (trait_expr) = type2;
5178       TRAIT_EXPR_KIND (trait_expr) = kind;
5179       return trait_expr;
5180     }
5181
5182   complete_type (type1);
5183   if (type2)
5184     complete_type (type2);
5185
5186   switch (kind)
5187     {
5188     case CPTK_HAS_NOTHROW_ASSIGN:
5189     case CPTK_HAS_TRIVIAL_ASSIGN:
5190     case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5191     case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5192     case CPTK_HAS_NOTHROW_COPY:
5193     case CPTK_HAS_TRIVIAL_COPY:
5194     case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5195     case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5196     case CPTK_IS_ABSTRACT:
5197     case CPTK_IS_EMPTY:
5198     case CPTK_IS_POD:
5199     case CPTK_IS_POLYMORPHIC:
5200     case CPTK_IS_STD_LAYOUT:
5201     case CPTK_IS_TRIVIAL:
5202     case CPTK_IS_LITERAL_TYPE:
5203       if (!check_trait_type (type1))
5204         {
5205           error ("incomplete type %qT not allowed", type1);
5206           return error_mark_node;
5207         }
5208       break;
5209
5210     case CPTK_IS_BASE_OF:
5211       if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5212           && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
5213           && !COMPLETE_TYPE_P (type2))
5214         {
5215           error ("incomplete type %qT not allowed", type2);
5216           return error_mark_node;
5217         }
5218       break;
5219
5220     case CPTK_IS_CLASS:
5221     case CPTK_IS_ENUM:
5222     case CPTK_IS_UNION:
5223       break;
5224     
5225     case CPTK_IS_CONVERTIBLE_TO:
5226     default:
5227       gcc_unreachable ();
5228     }
5229
5230   return (trait_expr_value (kind, type1, type2)
5231           ? boolean_true_node : boolean_false_node);
5232 }
5233
5234 /* Do-nothing variants of functions to handle pragma FLOAT_CONST_DECIMAL64,
5235    which is ignored for C++.  */
5236
5237 void
5238 set_float_const_decimal64 (void)
5239 {
5240 }
5241
5242 void
5243 clear_float_const_decimal64 (void)
5244 {
5245 }
5246
5247 bool
5248 float_const_decimal64_p (void)
5249 {
5250   return 0;
5251 }
5252
5253 \f
5254 /* Return true if T is a literal type.   */
5255
5256 bool
5257 literal_type_p (tree t)
5258 {
5259   if (SCALAR_TYPE_P (t))
5260     return true;
5261   if (CLASS_TYPE_P (t))
5262     return CLASSTYPE_LITERAL_P (t);
5263   if (TREE_CODE (t) == ARRAY_TYPE)
5264     return literal_type_p (strip_array_types (t));
5265   return false;
5266 }
5267
5268 /* If DECL is a variable declared `constexpr', require its type
5269    be literal.  Return the DECL if OK, otherwise NULL.  */
5270
5271 tree
5272 ensure_literal_type_for_constexpr_object (tree decl)
5273 {
5274   tree type = TREE_TYPE (decl);
5275   if (TREE_CODE (decl) == VAR_DECL && DECL_DECLARED_CONSTEXPR_P (decl)
5276       && !processing_template_decl && !literal_type_p (type))
5277     {
5278       error ("the type %qT of constexpr variable %qD is not literal",
5279              type, decl);
5280       return NULL;
5281     }
5282   return decl;
5283 }
5284
5285 /* Return true if type expression T is a valid parameter type, or
5286    a valid return type, of a constexpr function.  */
5287
5288 static bool
5289 valid_type_in_constexpr_fundecl_p (tree t)
5290 {
5291   return (literal_type_p (t)
5292           /* FIXME we allow ref to non-literal; should change standard to
5293              match, or change back if not.  */
5294           || TREE_CODE (t) == REFERENCE_TYPE);
5295 }
5296
5297 /* Check whether the parameter and return types of FUN are valid for a
5298    constexpr function, and complain if COMPLAIN.  */
5299
5300 static bool
5301 is_valid_constexpr_fn (tree fun, bool complain)
5302 {
5303   tree parm = FUNCTION_FIRST_USER_PARM (fun);
5304   bool ret = true;
5305   for (; parm != NULL; parm = TREE_CHAIN (parm))
5306     if (!valid_type_in_constexpr_fundecl_p (TREE_TYPE (parm)))
5307       {
5308         ret = false;
5309         if (complain)
5310           error ("invalid type for parameter %q#D of constexpr function",
5311                  parm);
5312       }
5313
5314   if (!DECL_CONSTRUCTOR_P (fun))
5315     {
5316       tree rettype = TREE_TYPE (TREE_TYPE (fun));
5317       if (!valid_type_in_constexpr_fundecl_p (rettype))
5318         {
5319           ret = false;
5320           if (complain)
5321             error ("invalid return type %qT of constexpr function %qD",
5322                    rettype, fun);
5323         }
5324
5325       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
5326           && COMPLETE_TYPE_P (DECL_CONTEXT (fun))
5327           && !valid_type_in_constexpr_fundecl_p (DECL_CONTEXT (fun)))
5328         {
5329           ret = false;
5330           if (complain)
5331             error ("enclosing class of %q#D is not a literal type", fun);
5332         }
5333     }
5334
5335   return ret;
5336 }
5337
5338 /* Return non-null if FUN certainly designates a valid constexpr function
5339    declaration.  Otherwise return NULL.  Issue appropriate diagnostics
5340    if necessary.  Note that we only check the declaration, not the body
5341    of the function.  */
5342
5343 tree
5344 validate_constexpr_fundecl (tree fun)
5345 {
5346   if (processing_template_decl || !DECL_DECLARED_CONSTEXPR_P (fun))
5347     return NULL;
5348   else if (DECL_CLONED_FUNCTION_P (fun))
5349     /* We already checked the original function.  */
5350     return fun;
5351
5352   if (!is_valid_constexpr_fn (fun, !DECL_TEMPLATE_INSTANTIATION (fun)))
5353     {
5354       DECL_DECLARED_CONSTEXPR_P (fun) = false;
5355       return NULL;
5356     }
5357
5358   return fun;
5359 }
5360
5361
5362 /* Constructor for a lambda expression.  */
5363
5364 tree
5365 build_lambda_expr (void)
5366 {
5367   tree lambda = make_node (LAMBDA_EXPR);
5368   LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) = CPLD_NONE;
5369   LAMBDA_EXPR_CAPTURE_LIST         (lambda) = NULL_TREE;
5370   LAMBDA_EXPR_THIS_CAPTURE         (lambda) = NULL_TREE;
5371   LAMBDA_EXPR_RETURN_TYPE          (lambda) = NULL_TREE;
5372   LAMBDA_EXPR_MUTABLE_P            (lambda) = false;
5373   return lambda;
5374 }
5375
5376 /* Create the closure object for a LAMBDA_EXPR.  */
5377
5378 tree
5379 build_lambda_object (tree lambda_expr)
5380 {
5381   /* Build aggregate constructor call.
5382      - cp_parser_braced_list
5383      - cp_parser_functional_cast  */
5384   VEC(constructor_elt,gc) *elts = NULL;
5385   tree node, expr, type;
5386   location_t saved_loc;
5387
5388   if (processing_template_decl)
5389     return lambda_expr;
5390
5391   /* Make sure any error messages refer to the lambda-introducer.  */
5392   saved_loc = input_location;
5393   input_location = LAMBDA_EXPR_LOCATION (lambda_expr);
5394
5395   for (node = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
5396        node;
5397        node = TREE_CHAIN (node))
5398     {
5399       tree field = TREE_PURPOSE (node);
5400       tree val = TREE_VALUE (node);
5401
5402       if (DECL_P (val))
5403         mark_used (val);
5404
5405       /* Mere mortals can't copy arrays with aggregate initialization, so
5406          do some magic to make it work here.  */
5407       if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
5408         val = build_array_copy (val);
5409       else if (DECL_NORMAL_CAPTURE_P (field)
5410                && TREE_CODE (TREE_TYPE (field)) != REFERENCE_TYPE)
5411         {
5412           /* "the entities that are captured by copy are used to
5413              direct-initialize each corresponding non-static data
5414              member of the resulting closure object."
5415
5416              There's normally no way to express direct-initialization
5417              from an element of a CONSTRUCTOR, so we build up a special
5418              TARGET_EXPR to bypass the usual copy-initialization.  */
5419           val = force_rvalue (val);
5420           if (TREE_CODE (val) == TARGET_EXPR)
5421             TARGET_EXPR_DIRECT_INIT_P (val) = true;
5422         }
5423
5424       CONSTRUCTOR_APPEND_ELT (elts, DECL_NAME (field), val);
5425     }
5426
5427   expr = build_constructor (init_list_type_node, elts);
5428   CONSTRUCTOR_IS_DIRECT_INIT (expr) = 1;
5429
5430   /* N2927: "[The closure] class type is not an aggregate."
5431      But we briefly treat it as an aggregate to make this simpler.  */
5432   type = TREE_TYPE (lambda_expr);
5433   CLASSTYPE_NON_AGGREGATE (type) = 0;
5434   expr = finish_compound_literal (type, expr);
5435   CLASSTYPE_NON_AGGREGATE (type) = 1;
5436
5437   input_location = saved_loc;
5438   return expr;
5439 }
5440
5441 /* Return an initialized RECORD_TYPE for LAMBDA.
5442    LAMBDA must have its explicit captures already.  */
5443
5444 tree
5445 begin_lambda_type (tree lambda)
5446 {
5447   tree type;
5448
5449   {
5450     /* Unique name.  This is just like an unnamed class, but we cannot use
5451        make_anon_name because of certain checks against TYPE_ANONYMOUS_P.  */
5452     tree name;
5453     name = make_lambda_name ();
5454
5455     /* Create the new RECORD_TYPE for this lambda.  */
5456     type = xref_tag (/*tag_code=*/record_type,
5457                      name,
5458                      /*scope=*/ts_within_enclosing_non_class,
5459                      /*template_header_p=*/false);
5460   }
5461
5462   /* Designate it as a struct so that we can use aggregate initialization.  */
5463   CLASSTYPE_DECLARED_CLASS (type) = false;
5464
5465   /* Clear base types.  */
5466   xref_basetypes (type, /*bases=*/NULL_TREE);
5467
5468   /* Start the class.  */
5469   type = begin_class_definition (type, /*attributes=*/NULL_TREE);
5470
5471   /* Cross-reference the expression and the type.  */
5472   TREE_TYPE (lambda) = type;
5473   CLASSTYPE_LAMBDA_EXPR (type) = lambda;
5474
5475   return type;
5476 }
5477
5478 /* Returns the type to use for the return type of the operator() of a
5479    closure class.  */
5480
5481 tree
5482 lambda_return_type (tree expr)
5483 {
5484   tree type;
5485   if (BRACE_ENCLOSED_INITIALIZER_P (expr))
5486     {
5487       warning (0, "cannot deduce lambda return type from a braced-init-list");
5488       return void_type_node;
5489     }
5490   if (type_dependent_expression_p (expr))
5491     {
5492       type = cxx_make_type (DECLTYPE_TYPE);
5493       DECLTYPE_TYPE_EXPR (type) = expr;
5494       DECLTYPE_FOR_LAMBDA_RETURN (type) = true;
5495       SET_TYPE_STRUCTURAL_EQUALITY (type);
5496     }
5497   else
5498     type = type_decays_to (unlowered_expr_type (expr));
5499   return type;
5500 }
5501
5502 /* Given a LAMBDA_EXPR or closure type LAMBDA, return the op() of the
5503    closure type.  */
5504
5505 tree
5506 lambda_function (tree lambda)
5507 {
5508   tree type;
5509   if (TREE_CODE (lambda) == LAMBDA_EXPR)
5510     type = TREE_TYPE (lambda);
5511   else
5512     type = lambda;
5513   gcc_assert (LAMBDA_TYPE_P (type));
5514   /* Don't let debug_tree cause instantiation.  */
5515   if (CLASSTYPE_TEMPLATE_INSTANTIATION (type) && !COMPLETE_TYPE_P (type))
5516     return NULL_TREE;
5517   lambda = lookup_member (type, ansi_opname (CALL_EXPR),
5518                           /*protect=*/0, /*want_type=*/false);
5519   if (lambda)
5520     lambda = BASELINK_FUNCTIONS (lambda);
5521   return lambda;
5522 }
5523
5524 /* Returns the type to use for the FIELD_DECL corresponding to the
5525    capture of EXPR.
5526    The caller should add REFERENCE_TYPE for capture by reference.  */
5527
5528 tree
5529 lambda_capture_field_type (tree expr)
5530 {
5531   tree type;
5532   if (type_dependent_expression_p (expr))
5533     {
5534       type = cxx_make_type (DECLTYPE_TYPE);
5535       DECLTYPE_TYPE_EXPR (type) = expr;
5536       DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true;
5537       SET_TYPE_STRUCTURAL_EQUALITY (type);
5538     }
5539   else
5540     type = non_reference (unlowered_expr_type (expr));
5541   return type;
5542 }
5543
5544 /* Recompute the return type for LAMBDA with body of the form:
5545      { return EXPR ; }  */
5546
5547 void
5548 apply_lambda_return_type (tree lambda, tree return_type)
5549 {
5550   tree fco = lambda_function (lambda);
5551   tree result;
5552
5553   LAMBDA_EXPR_RETURN_TYPE (lambda) = return_type;
5554
5555   /* If we got a DECLTYPE_TYPE, don't stick it in the function yet,
5556      it would interfere with instantiating the closure type.  */
5557   if (dependent_type_p (return_type))
5558     return;
5559   if (return_type == error_mark_node)
5560     return;
5561
5562   /* TREE_TYPE (FUNCTION_DECL) == METHOD_TYPE
5563      TREE_TYPE (METHOD_TYPE)   == return-type  */
5564   TREE_TYPE (fco) = change_return_type (return_type, TREE_TYPE (fco));
5565
5566   result = DECL_RESULT (fco);
5567   if (result == NULL_TREE)
5568     return;
5569
5570   /* We already have a DECL_RESULT from start_preparsed_function.
5571      Now we need to redo the work it and allocate_struct_function
5572      did to reflect the new type.  */
5573   result = build_decl (input_location, RESULT_DECL, NULL_TREE,
5574                        TYPE_MAIN_VARIANT (return_type));
5575   DECL_ARTIFICIAL (result) = 1;
5576   DECL_IGNORED_P (result) = 1;
5577   cp_apply_type_quals_to_decl (cp_type_quals (return_type),
5578                                result);
5579
5580   DECL_RESULT (fco) = result;
5581
5582   if (!processing_template_decl && aggregate_value_p (result, fco))
5583     {
5584 #ifdef PCC_STATIC_STRUCT_RETURN
5585       cfun->returns_pcc_struct = 1;
5586 #endif
5587       cfun->returns_struct = 1;
5588     }
5589
5590 }
5591
5592 /* DECL is a local variable or parameter from the surrounding scope of a
5593    lambda-expression.  Returns the decltype for a use of the capture field
5594    for DECL even if it hasn't been captured yet.  */
5595
5596 static tree
5597 capture_decltype (tree decl)
5598 {
5599   tree lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
5600   /* FIXME do lookup instead of list walk? */
5601   tree cap = value_member (decl, LAMBDA_EXPR_CAPTURE_LIST (lam));
5602   tree type;
5603
5604   if (cap)
5605     type = TREE_TYPE (TREE_PURPOSE (cap));
5606   else
5607     switch (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam))
5608       {
5609       case CPLD_NONE:
5610         error ("%qD is not captured", decl);
5611         return error_mark_node;
5612
5613       case CPLD_COPY:
5614         type = TREE_TYPE (decl);
5615         if (TREE_CODE (type) == REFERENCE_TYPE
5616             && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
5617           type = TREE_TYPE (type);
5618         break;
5619
5620       case CPLD_REFERENCE:
5621         type = TREE_TYPE (decl);
5622         if (TREE_CODE (type) != REFERENCE_TYPE)
5623           type = build_reference_type (TREE_TYPE (decl));
5624         break;
5625
5626       default:
5627         gcc_unreachable ();
5628       }
5629
5630   if (TREE_CODE (type) != REFERENCE_TYPE)
5631     {
5632       if (!LAMBDA_EXPR_MUTABLE_P (lam))
5633         type = cp_build_qualified_type (type, (cp_type_quals (type)
5634                                                |TYPE_QUAL_CONST));
5635       type = build_reference_type (type);
5636     }
5637   return type;
5638 }
5639
5640 /* From an ID and INITIALIZER, create a capture (by reference if
5641    BY_REFERENCE_P is true), add it to the capture-list for LAMBDA,
5642    and return it.  */
5643
5644 tree
5645 add_capture (tree lambda, tree id, tree initializer, bool by_reference_p,
5646              bool explicit_init_p)
5647 {
5648   tree type;
5649   tree member;
5650
5651   type = lambda_capture_field_type (initializer);
5652   if (by_reference_p)
5653     {
5654       type = build_reference_type (type);
5655       if (!real_lvalue_p (initializer))
5656         error ("cannot capture %qE by reference", initializer);
5657     }
5658
5659   /* Make member variable.  */
5660   member = build_lang_decl (FIELD_DECL, id, type);
5661   if (!explicit_init_p)
5662     /* Normal captures are invisible to name lookup but uses are replaced
5663        with references to the capture field; we implement this by only
5664        really making them invisible in unevaluated context; see
5665        qualify_lookup.  For now, let's make explicitly initialized captures
5666        always visible.  */
5667     DECL_NORMAL_CAPTURE_P (member) = true;
5668
5669   /* Add it to the appropriate closure class if we've started it.  */
5670   if (current_class_type && current_class_type == TREE_TYPE (lambda))
5671     finish_member_declaration (member);
5672
5673   LAMBDA_EXPR_CAPTURE_LIST (lambda)
5674     = tree_cons (member, initializer, LAMBDA_EXPR_CAPTURE_LIST (lambda));
5675
5676   if (id == get_identifier ("__this"))
5677     {
5678       if (LAMBDA_EXPR_CAPTURES_THIS_P (lambda))
5679         error ("already captured %<this%> in lambda expression");
5680       LAMBDA_EXPR_THIS_CAPTURE (lambda) = member;
5681     }
5682
5683   return member;
5684 }
5685
5686 /* Register all the capture members on the list CAPTURES, which is the
5687    LAMBDA_EXPR_CAPTURE_LIST for the lambda after the introducer.  */
5688
5689 void register_capture_members (tree captures)
5690 {
5691   if (captures)
5692     {
5693       register_capture_members (TREE_CHAIN (captures));
5694       finish_member_declaration (TREE_PURPOSE (captures));
5695     }
5696 }
5697
5698 /* Given a FIELD_DECL decl belonging to a closure type, return a
5699    COMPONENT_REF of it relative to the 'this' parameter of the op() for
5700    that type.  */
5701
5702 static tree
5703 thisify_lambda_field (tree decl)
5704 {
5705   tree context = lambda_function (DECL_CONTEXT (decl));
5706   tree object = cp_build_indirect_ref (DECL_ARGUMENTS (context),
5707                                        RO_NULL,
5708                                        tf_warning_or_error);
5709   return finish_non_static_data_member (decl, object,
5710                                         /*qualifying_scope*/NULL_TREE);
5711 }
5712
5713 /* Similar to add_capture, except this works on a stack of nested lambdas.
5714    BY_REFERENCE_P in this case is derived from the default capture mode.
5715    Returns the capture for the lambda at the bottom of the stack.  */
5716
5717 tree
5718 add_default_capture (tree lambda_stack, tree id, tree initializer)
5719 {
5720   bool this_capture_p = (id == get_identifier ("__this"));
5721
5722   tree member = NULL_TREE;
5723
5724   tree saved_class_type = current_class_type;
5725
5726   tree node;
5727
5728   for (node = lambda_stack;
5729        node;
5730        node = TREE_CHAIN (node))
5731     {
5732       tree lambda = TREE_VALUE (node);
5733
5734       current_class_type = TREE_TYPE (lambda);
5735       member = add_capture (lambda,
5736                             id,
5737                             initializer,
5738                             /*by_reference_p=*/
5739                             (!this_capture_p
5740                              && (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda)
5741                                  == CPLD_REFERENCE)),
5742                             /*explicit_init_p=*/false);
5743       initializer = thisify_lambda_field (member);
5744     }
5745
5746   current_class_type = saved_class_type;
5747
5748   return member;
5749 }
5750
5751 /* Return the capture pertaining to a use of 'this' in LAMBDA, in the form of an
5752    INDIRECT_REF, possibly adding it through default capturing.  */
5753
5754 tree
5755 lambda_expr_this_capture (tree lambda)
5756 {
5757   tree result;
5758
5759   tree this_capture = LAMBDA_EXPR_THIS_CAPTURE (lambda);
5760
5761   /* Try to default capture 'this' if we can.  */
5762   if (!this_capture
5763       && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE)
5764     {
5765       tree containing_function = TYPE_CONTEXT (TREE_TYPE (lambda));
5766       tree lambda_stack = tree_cons (NULL_TREE, lambda, NULL_TREE);
5767       tree init = NULL_TREE;
5768
5769       /* If we are in a lambda function, we can move out until we hit:
5770            1. a non-lambda function,
5771            2. a lambda function capturing 'this', or
5772            3. a non-default capturing lambda function.  */
5773       while (LAMBDA_FUNCTION_P (containing_function))
5774         {
5775           tree lambda
5776             = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (containing_function));
5777
5778           if (LAMBDA_EXPR_THIS_CAPTURE (lambda))
5779             {
5780               /* An outer lambda has already captured 'this'.  */
5781               tree cap = LAMBDA_EXPR_THIS_CAPTURE (lambda);
5782               init = thisify_lambda_field (cap);
5783               break;
5784             }
5785
5786           if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_NONE)
5787             /* An outer lambda won't let us capture 'this'.  */
5788             break;
5789
5790           lambda_stack = tree_cons (NULL_TREE,
5791                                     lambda,
5792                                     lambda_stack);
5793
5794           containing_function = decl_function_context (containing_function);
5795         }
5796
5797       if (!init && DECL_NONSTATIC_MEMBER_FUNCTION_P (containing_function)
5798           && !LAMBDA_FUNCTION_P (containing_function))
5799         /* First parameter is 'this'.  */
5800         init = DECL_ARGUMENTS (containing_function);
5801
5802       if (init)
5803         this_capture = add_default_capture (lambda_stack,
5804                                             /*id=*/get_identifier ("__this"),
5805                                             init);
5806     }
5807
5808   if (!this_capture)
5809     {
5810       error ("%<this%> was not captured for this lambda function");
5811       result = error_mark_node;
5812     }
5813   else
5814     {
5815       /* To make sure that current_class_ref is for the lambda.  */
5816       gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)) == TREE_TYPE (lambda));
5817
5818       result = finish_non_static_data_member (this_capture,
5819                                               NULL_TREE,
5820                                               /*qualifying_scope=*/NULL_TREE);
5821
5822       /* If 'this' is captured, each use of 'this' is transformed into an
5823          access to the corresponding unnamed data member of the closure
5824          type cast (_expr.cast_ 5.4) to the type of 'this'. [ The cast
5825          ensures that the transformed expression is an rvalue. ] */
5826       result = rvalue (result);
5827     }
5828
5829   return result;
5830 }
5831
5832 /* Returns the method basetype of the innermost non-lambda function, or
5833    NULL_TREE if none.  */
5834
5835 tree
5836 nonlambda_method_basetype (void)
5837 {
5838   tree fn, type;
5839   if (!current_class_ref)
5840     return NULL_TREE;
5841
5842   type = current_class_type;
5843   if (!LAMBDA_TYPE_P (type))
5844     return type;
5845
5846   /* Find the nearest enclosing non-lambda function.  */
5847   fn = TYPE_NAME (type);
5848   do
5849     fn = decl_function_context (fn);
5850   while (fn && LAMBDA_FUNCTION_P (fn));
5851
5852   if (!fn || !DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
5853     return NULL_TREE;
5854
5855   return TYPE_METHOD_BASETYPE (TREE_TYPE (fn));
5856 }
5857
5858 /* If the closure TYPE has a static op(), also add a conversion to function
5859    pointer.  */
5860
5861 void
5862 maybe_add_lambda_conv_op (tree type)
5863 {
5864   bool nested = (current_function_decl != NULL_TREE);
5865   tree callop = lambda_function (type);
5866   tree rettype, name, fntype, fn, body, compound_stmt;
5867   tree thistype, stattype, statfn, convfn, call, arg;
5868   VEC (tree, gc) *argvec;
5869
5870   if (LAMBDA_EXPR_CAPTURE_LIST (CLASSTYPE_LAMBDA_EXPR (type)) != NULL_TREE)
5871     return;
5872
5873   stattype = build_function_type (TREE_TYPE (TREE_TYPE (callop)),
5874                                   FUNCTION_ARG_CHAIN (callop));
5875
5876   /* First build up the conversion op.  */
5877
5878   rettype = build_pointer_type (stattype);
5879   name = mangle_conv_op_name_for_type (rettype);
5880   thistype = cp_build_qualified_type (type, TYPE_QUAL_CONST);
5881   fntype = build_method_type_directly (thistype, rettype, void_list_node);
5882   fn = convfn = build_lang_decl (FUNCTION_DECL, name, fntype);
5883   DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
5884
5885   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
5886       && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
5887     DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
5888
5889   SET_OVERLOADED_OPERATOR_CODE (fn, TYPE_EXPR);
5890   grokclassfn (type, fn, NO_SPECIAL);
5891   set_linkage_according_to_type (type, fn);
5892   rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
5893   DECL_IN_AGGR_P (fn) = 1;
5894   DECL_ARTIFICIAL (fn) = 1;
5895   DECL_NOT_REALLY_EXTERN (fn) = 1;
5896   DECL_DECLARED_INLINE_P (fn) = 1;
5897   DECL_ARGUMENTS (fn) = build_this_parm (fntype, TYPE_QUAL_CONST);
5898   if (nested)
5899     DECL_INTERFACE_KNOWN (fn) = 1;
5900
5901   add_method (type, fn, NULL_TREE);
5902
5903   /* Generic thunk code fails for varargs; we'll complain in mark_used if
5904      the conversion op is used.  */
5905   if (varargs_function_p (callop))
5906     {
5907       DECL_DELETED_FN (fn) = 1;
5908       return;
5909     }
5910
5911   /* Now build up the thunk to be returned.  */
5912
5913   name = get_identifier ("_FUN");
5914   fn = statfn = build_lang_decl (FUNCTION_DECL, name, stattype);
5915   DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
5916   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
5917       && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
5918     DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
5919   grokclassfn (type, fn, NO_SPECIAL);
5920   set_linkage_according_to_type (type, fn);
5921   rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
5922   DECL_IN_AGGR_P (fn) = 1;
5923   DECL_ARTIFICIAL (fn) = 1;
5924   DECL_NOT_REALLY_EXTERN (fn) = 1;
5925   DECL_DECLARED_INLINE_P (fn) = 1;
5926   DECL_STATIC_FUNCTION_P (fn) = 1;
5927   DECL_ARGUMENTS (fn) = copy_list (DECL_CHAIN (DECL_ARGUMENTS (callop)));
5928   for (arg = DECL_ARGUMENTS (fn); arg; arg = DECL_CHAIN (arg))
5929     DECL_CONTEXT (arg) = fn;
5930   if (nested)
5931     DECL_INTERFACE_KNOWN (fn) = 1;
5932
5933   add_method (type, fn, NULL_TREE);
5934
5935   if (nested)
5936     push_function_context ();
5937
5938   /* Generate the body of the thunk.  */
5939
5940   start_preparsed_function (statfn, NULL_TREE,
5941                             SF_PRE_PARSED | SF_INCLASS_INLINE);
5942   if (DECL_ONE_ONLY (statfn))
5943     {
5944       /* Put the thunk in the same comdat group as the call op.  */
5945       struct cgraph_node *callop_node, *thunk_node;
5946       DECL_COMDAT_GROUP (statfn) = DECL_COMDAT_GROUP (callop);
5947       callop_node = cgraph_node (callop);
5948       thunk_node = cgraph_node (statfn);
5949       gcc_assert (callop_node->same_comdat_group == NULL);
5950       gcc_assert (thunk_node->same_comdat_group == NULL);
5951       callop_node->same_comdat_group = thunk_node;
5952       thunk_node->same_comdat_group = callop_node;
5953     }
5954   body = begin_function_body ();
5955   compound_stmt = begin_compound_stmt (0);
5956
5957   arg = build1 (NOP_EXPR, TREE_TYPE (DECL_ARGUMENTS (callop)),
5958                 null_pointer_node);
5959   argvec = make_tree_vector ();
5960   VEC_quick_push (tree, argvec, arg);
5961   for (arg = DECL_ARGUMENTS (statfn); arg; arg = DECL_CHAIN (arg))
5962     VEC_safe_push (tree, gc, argvec, arg);
5963   call = build_call_a (callop, VEC_length (tree, argvec),
5964                        VEC_address (tree, argvec));
5965   CALL_FROM_THUNK_P (call) = 1;
5966   if (MAYBE_CLASS_TYPE_P (TREE_TYPE (call)))
5967     call = build_cplus_new (TREE_TYPE (call), call);
5968   call = convert_from_reference (call);
5969   finish_return_stmt (call);
5970
5971   finish_compound_stmt (compound_stmt);
5972   finish_function_body (body);
5973
5974   expand_or_defer_fn (finish_function (2));
5975
5976   /* Generate the body of the conversion op.  */
5977
5978   start_preparsed_function (convfn, NULL_TREE,
5979                             SF_PRE_PARSED | SF_INCLASS_INLINE);
5980   body = begin_function_body ();
5981   compound_stmt = begin_compound_stmt (0);
5982
5983   finish_return_stmt (decay_conversion (statfn));
5984
5985   finish_compound_stmt (compound_stmt);
5986   finish_function_body (body);
5987
5988   expand_or_defer_fn (finish_function (2));
5989
5990   if (nested)
5991     pop_function_context ();
5992 }
5993 #include "gt-cp-semantics.h"