OSDN Git Service

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