OSDN Git Service

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