OSDN Git Service

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