OSDN Git Service

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