OSDN Git Service

e270a734fa0633d04a6bddc116300467d4eb784e
[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   /* In a lambda expression, 'this' refers to the captured 'this'.  */
2067   if (current_function_decl
2068       && LAMBDA_FUNCTION_P (current_function_decl))
2069     result = (lambda_expr_this_capture
2070               (CLASSTYPE_LAMBDA_EXPR (current_class_type)));
2071   else if (current_class_ptr)
2072     result = current_class_ptr;
2073   else if (current_function_decl
2074            && DECL_STATIC_FUNCTION_P (current_function_decl))
2075     {
2076       error ("%<this%> is unavailable for static member functions");
2077       result = error_mark_node;
2078     }
2079   else
2080     {
2081       if (current_function_decl)
2082         error ("invalid use of %<this%> in non-member function");
2083       else
2084         error ("invalid use of %<this%> at top level");
2085       result = error_mark_node;
2086     }
2087
2088   return result;
2089 }
2090
2091 /* Finish a pseudo-destructor expression.  If SCOPE is NULL, the
2092    expression was of the form `OBJECT.~DESTRUCTOR' where DESTRUCTOR is
2093    the TYPE for the type given.  If SCOPE is non-NULL, the expression
2094    was of the form `OBJECT.SCOPE::~DESTRUCTOR'.  */
2095
2096 tree
2097 finish_pseudo_destructor_expr (tree object, tree scope, tree destructor)
2098 {
2099   if (object == error_mark_node || destructor == error_mark_node)
2100     return error_mark_node;
2101
2102   gcc_assert (TYPE_P (destructor));
2103
2104   if (!processing_template_decl)
2105     {
2106       if (scope == error_mark_node)
2107         {
2108           error ("invalid qualifying scope in pseudo-destructor name");
2109           return error_mark_node;
2110         }
2111       if (scope && TYPE_P (scope) && !check_dtor_name (scope, destructor))
2112         {
2113           error ("qualified type %qT does not match destructor name ~%qT",
2114                  scope, destructor);
2115           return error_mark_node;
2116         }
2117
2118
2119       /* [expr.pseudo] says both:
2120
2121            The type designated by the pseudo-destructor-name shall be
2122            the same as the object type.
2123
2124          and:
2125
2126            The cv-unqualified versions of the object type and of the
2127            type designated by the pseudo-destructor-name shall be the
2128            same type.
2129
2130          We implement the more generous second sentence, since that is
2131          what most other compilers do.  */
2132       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (object),
2133                                                       destructor))
2134         {
2135           error ("%qE is not of type %qT", object, destructor);
2136           return error_mark_node;
2137         }
2138     }
2139
2140   return build3 (PSEUDO_DTOR_EXPR, void_type_node, object, scope, destructor);
2141 }
2142
2143 /* Finish an expression of the form CODE EXPR.  */
2144
2145 tree
2146 finish_unary_op_expr (enum tree_code code, tree expr)
2147 {
2148   tree result = build_x_unary_op (code, expr, tf_warning_or_error);
2149   /* Inside a template, build_x_unary_op does not fold the
2150      expression. So check whether the result is folded before
2151      setting TREE_NEGATED_INT.  */
2152   if (code == NEGATE_EXPR && TREE_CODE (expr) == INTEGER_CST
2153       && TREE_CODE (result) == INTEGER_CST
2154       && !TYPE_UNSIGNED (TREE_TYPE (result))
2155       && INT_CST_LT (result, integer_zero_node))
2156     {
2157       /* RESULT may be a cached INTEGER_CST, so we must copy it before
2158          setting TREE_NEGATED_INT.  */
2159       result = copy_node (result);
2160       TREE_NEGATED_INT (result) = 1;
2161     }
2162   if (TREE_OVERFLOW_P (result) && !TREE_OVERFLOW_P (expr))
2163     overflow_warning (input_location, result);
2164
2165   return result;
2166 }
2167
2168 /* Finish a compound-literal expression.  TYPE is the type to which
2169    the CONSTRUCTOR in COMPOUND_LITERAL is being cast.  */
2170
2171 tree
2172 finish_compound_literal (tree type, tree compound_literal)
2173 {
2174   if (type == error_mark_node)
2175     return error_mark_node;
2176
2177   if (!TYPE_OBJ_P (type))
2178     {
2179       error ("compound literal of non-object type %qT", type);
2180       return error_mark_node;
2181     }
2182
2183   if (processing_template_decl)
2184     {
2185       TREE_TYPE (compound_literal) = type;
2186       /* Mark the expression as a compound literal.  */
2187       TREE_HAS_CONSTRUCTOR (compound_literal) = 1;
2188       return compound_literal;
2189     }
2190
2191   type = complete_type (type);
2192
2193   if (TYPE_NON_AGGREGATE_CLASS (type))
2194     {
2195       /* Trying to deal with a CONSTRUCTOR instead of a TREE_LIST
2196          everywhere that deals with function arguments would be a pain, so
2197          just wrap it in a TREE_LIST.  The parser set a flag so we know
2198          that it came from T{} rather than T({}).  */
2199       CONSTRUCTOR_IS_DIRECT_INIT (compound_literal) = 1;
2200       compound_literal = build_tree_list (NULL_TREE, compound_literal);
2201       return build_functional_cast (type, compound_literal, tf_error);
2202     }
2203
2204   if (TREE_CODE (type) == ARRAY_TYPE
2205       && check_array_initializer (NULL_TREE, type, compound_literal))
2206     return error_mark_node;
2207   compound_literal = reshape_init (type, compound_literal);
2208   if (TREE_CODE (type) == ARRAY_TYPE)
2209     cp_complete_array_type (&type, compound_literal, false);
2210   compound_literal = digest_init (type, compound_literal);
2211   if ((!at_function_scope_p () || cp_type_readonly (type))
2212       && initializer_constant_valid_p (compound_literal, type))
2213     {
2214       tree decl = create_temporary_var (type);
2215       DECL_INITIAL (decl) = compound_literal;
2216       TREE_STATIC (decl) = 1;
2217       decl = pushdecl_top_level (decl);
2218       DECL_NAME (decl) = make_anon_name ();
2219       SET_DECL_ASSEMBLER_NAME (decl, DECL_NAME (decl));
2220       return decl;
2221     }
2222   else
2223     return get_target_expr (compound_literal);
2224 }
2225
2226 /* Return the declaration for the function-name variable indicated by
2227    ID.  */
2228
2229 tree
2230 finish_fname (tree id)
2231 {
2232   tree decl;
2233
2234   decl = fname_decl (input_location, C_RID_CODE (id), id);
2235   if (processing_template_decl)
2236     decl = DECL_NAME (decl);
2237   return decl;
2238 }
2239
2240 /* Finish a translation unit.  */
2241
2242 void
2243 finish_translation_unit (void)
2244 {
2245   /* In case there were missing closebraces,
2246      get us back to the global binding level.  */
2247   pop_everything ();
2248   while (current_namespace != global_namespace)
2249     pop_namespace ();
2250
2251   /* Do file scope __FUNCTION__ et al.  */
2252   finish_fname_decls ();
2253 }
2254
2255 /* Finish a template type parameter, specified as AGGR IDENTIFIER.
2256    Returns the parameter.  */
2257
2258 tree
2259 finish_template_type_parm (tree aggr, tree identifier)
2260 {
2261   if (aggr != class_type_node)
2262     {
2263       permerror (input_location, "template type parameters must use the keyword %<class%> or %<typename%>");
2264       aggr = class_type_node;
2265     }
2266
2267   return build_tree_list (aggr, identifier);
2268 }
2269
2270 /* Finish a template template parameter, specified as AGGR IDENTIFIER.
2271    Returns the parameter.  */
2272
2273 tree
2274 finish_template_template_parm (tree aggr, tree identifier)
2275 {
2276   tree decl = build_decl (input_location,
2277                           TYPE_DECL, identifier, NULL_TREE);
2278   tree tmpl = build_lang_decl (TEMPLATE_DECL, identifier, NULL_TREE);
2279   DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
2280   DECL_TEMPLATE_RESULT (tmpl) = decl;
2281   DECL_ARTIFICIAL (decl) = 1;
2282   end_template_decl ();
2283
2284   gcc_assert (DECL_TEMPLATE_PARMS (tmpl));
2285
2286   check_default_tmpl_args (decl, DECL_TEMPLATE_PARMS (tmpl), 
2287                            /*is_primary=*/true, /*is_partial=*/false,
2288                            /*is_friend=*/0);
2289
2290   return finish_template_type_parm (aggr, tmpl);
2291 }
2292
2293 /* ARGUMENT is the default-argument value for a template template
2294    parameter.  If ARGUMENT is invalid, issue error messages and return
2295    the ERROR_MARK_NODE.  Otherwise, ARGUMENT itself is returned.  */
2296
2297 tree
2298 check_template_template_default_arg (tree argument)
2299 {
2300   if (TREE_CODE (argument) != TEMPLATE_DECL
2301       && TREE_CODE (argument) != TEMPLATE_TEMPLATE_PARM
2302       && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
2303     {
2304       if (TREE_CODE (argument) == TYPE_DECL)
2305         error ("invalid use of type %qT as a default value for a template "
2306                "template-parameter", TREE_TYPE (argument));
2307       else
2308         error ("invalid default argument for a template template parameter");
2309       return error_mark_node;
2310     }
2311
2312   return argument;
2313 }
2314
2315 /* Begin a class definition, as indicated by T.  */
2316
2317 tree
2318 begin_class_definition (tree t, tree attributes)
2319 {
2320   if (error_operand_p (t) || error_operand_p (TYPE_MAIN_DECL (t)))
2321     return error_mark_node;
2322
2323   if (processing_template_parmlist)
2324     {
2325       error ("definition of %q#T inside template parameter list", t);
2326       return error_mark_node;
2327     }
2328   /* A non-implicit typename comes from code like:
2329
2330        template <typename T> struct A {
2331          template <typename U> struct A<T>::B ...
2332
2333      This is erroneous.  */
2334   else if (TREE_CODE (t) == TYPENAME_TYPE)
2335     {
2336       error ("invalid definition of qualified type %qT", t);
2337       t = error_mark_node;
2338     }
2339
2340   if (t == error_mark_node || ! MAYBE_CLASS_TYPE_P (t))
2341     {
2342       t = make_class_type (RECORD_TYPE);
2343       pushtag (make_anon_name (), t, /*tag_scope=*/ts_current);
2344     }
2345
2346   /* Update the location of the decl.  */
2347   DECL_SOURCE_LOCATION (TYPE_NAME (t)) = input_location;
2348
2349   if (TYPE_BEING_DEFINED (t))
2350     {
2351       t = make_class_type (TREE_CODE (t));
2352       pushtag (TYPE_IDENTIFIER (t), t, /*tag_scope=*/ts_current);
2353     }
2354   maybe_process_partial_specialization (t);
2355   pushclass (t);
2356   TYPE_BEING_DEFINED (t) = 1;
2357
2358   cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
2359
2360   if (flag_pack_struct)
2361     {
2362       tree v;
2363       TYPE_PACKED (t) = 1;
2364       /* Even though the type is being defined for the first time
2365          here, there might have been a forward declaration, so there
2366          might be cv-qualified variants of T.  */
2367       for (v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
2368         TYPE_PACKED (v) = 1;
2369     }
2370   /* Reset the interface data, at the earliest possible
2371      moment, as it might have been set via a class foo;
2372      before.  */
2373   if (! TYPE_ANONYMOUS_P (t))
2374     {
2375       struct c_fileinfo *finfo = get_fileinfo (input_filename);
2376       CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
2377       SET_CLASSTYPE_INTERFACE_UNKNOWN_X
2378         (t, finfo->interface_unknown);
2379     }
2380   reset_specialization();
2381
2382   /* Make a declaration for this class in its own scope.  */
2383   build_self_reference ();
2384
2385   return t;
2386 }
2387
2388 /* Finish the member declaration given by DECL.  */
2389
2390 void
2391 finish_member_declaration (tree decl)
2392 {
2393   if (decl == error_mark_node || decl == NULL_TREE)
2394     return;
2395
2396   if (decl == void_type_node)
2397     /* The COMPONENT was a friend, not a member, and so there's
2398        nothing for us to do.  */
2399     return;
2400
2401   /* We should see only one DECL at a time.  */
2402   gcc_assert (TREE_CHAIN (decl) == NULL_TREE);
2403
2404   /* Set up access control for DECL.  */
2405   TREE_PRIVATE (decl)
2406     = (current_access_specifier == access_private_node);
2407   TREE_PROTECTED (decl)
2408     = (current_access_specifier == access_protected_node);
2409   if (TREE_CODE (decl) == TEMPLATE_DECL)
2410     {
2411       TREE_PRIVATE (DECL_TEMPLATE_RESULT (decl)) = TREE_PRIVATE (decl);
2412       TREE_PROTECTED (DECL_TEMPLATE_RESULT (decl)) = TREE_PROTECTED (decl);
2413     }
2414
2415   /* Mark the DECL as a member of the current class.  */
2416   DECL_CONTEXT (decl) = current_class_type;
2417
2418   /* Check for bare parameter packs in the member variable declaration.  */
2419   if (TREE_CODE (decl) == FIELD_DECL)
2420     {
2421       if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
2422         TREE_TYPE (decl) = error_mark_node;
2423       if (check_for_bare_parameter_packs (DECL_ATTRIBUTES (decl)))
2424         DECL_ATTRIBUTES (decl) = NULL_TREE;
2425     }
2426
2427   /* [dcl.link]
2428
2429      A C language linkage is ignored for the names of class members
2430      and the member function type of class member functions.  */
2431   if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
2432     SET_DECL_LANGUAGE (decl, lang_cplusplus);
2433
2434   /* Put functions on the TYPE_METHODS list and everything else on the
2435      TYPE_FIELDS list.  Note that these are built up in reverse order.
2436      We reverse them (to obtain declaration order) in finish_struct.  */
2437   if (TREE_CODE (decl) == FUNCTION_DECL
2438       || DECL_FUNCTION_TEMPLATE_P (decl))
2439     {
2440       /* We also need to add this function to the
2441          CLASSTYPE_METHOD_VEC.  */
2442       if (add_method (current_class_type, decl, NULL_TREE))
2443         {
2444           TREE_CHAIN (decl) = TYPE_METHODS (current_class_type);
2445           TYPE_METHODS (current_class_type) = decl;
2446
2447           maybe_add_class_template_decl_list (current_class_type, decl,
2448                                               /*friend_p=*/0);
2449         }
2450     }
2451   /* Enter the DECL into the scope of the class.  */
2452   else if ((TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
2453            || pushdecl_class_level (decl))
2454     {
2455       /* All TYPE_DECLs go at the end of TYPE_FIELDS.  Ordinary fields
2456          go at the beginning.  The reason is that lookup_field_1
2457          searches the list in order, and we want a field name to
2458          override a type name so that the "struct stat hack" will
2459          work.  In particular:
2460
2461            struct S { enum E { }; int E } s;
2462            s.E = 3;
2463
2464          is valid.  In addition, the FIELD_DECLs must be maintained in
2465          declaration order so that class layout works as expected.
2466          However, we don't need that order until class layout, so we
2467          save a little time by putting FIELD_DECLs on in reverse order
2468          here, and then reversing them in finish_struct_1.  (We could
2469          also keep a pointer to the correct insertion points in the
2470          list.)  */
2471
2472       if (TREE_CODE (decl) == TYPE_DECL)
2473         TYPE_FIELDS (current_class_type)
2474           = chainon (TYPE_FIELDS (current_class_type), decl);
2475       else
2476         {
2477           TREE_CHAIN (decl) = TYPE_FIELDS (current_class_type);
2478           TYPE_FIELDS (current_class_type) = decl;
2479         }
2480
2481       maybe_add_class_template_decl_list (current_class_type, decl,
2482                                           /*friend_p=*/0);
2483     }
2484
2485   if (pch_file)
2486     note_decl_for_pch (decl);
2487 }
2488
2489 /* DECL has been declared while we are building a PCH file.  Perform
2490    actions that we might normally undertake lazily, but which can be
2491    performed now so that they do not have to be performed in
2492    translation units which include the PCH file.  */
2493
2494 void
2495 note_decl_for_pch (tree decl)
2496 {
2497   gcc_assert (pch_file);
2498
2499   /* There's a good chance that we'll have to mangle names at some
2500      point, even if only for emission in debugging information.  */
2501   if ((TREE_CODE (decl) == VAR_DECL
2502        || TREE_CODE (decl) == FUNCTION_DECL)
2503       && !processing_template_decl)
2504     mangle_decl (decl);
2505 }
2506
2507 /* Finish processing a complete template declaration.  The PARMS are
2508    the template parameters.  */
2509
2510 void
2511 finish_template_decl (tree parms)
2512 {
2513   if (parms)
2514     end_template_decl ();
2515   else
2516     end_specialization ();
2517 }
2518
2519 /* Finish processing a template-id (which names a type) of the form
2520    NAME < ARGS >.  Return the TYPE_DECL for the type named by the
2521    template-id.  If ENTERING_SCOPE is nonzero we are about to enter
2522    the scope of template-id indicated.  */
2523
2524 tree
2525 finish_template_type (tree name, tree args, int entering_scope)
2526 {
2527   tree decl;
2528
2529   decl = lookup_template_class (name, args,
2530                                 NULL_TREE, NULL_TREE, entering_scope,
2531                                 tf_warning_or_error | tf_user);
2532   if (decl != error_mark_node)
2533     decl = TYPE_STUB_DECL (decl);
2534
2535   return decl;
2536 }
2537
2538 /* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2539    Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2540    BASE_CLASS, or NULL_TREE if an error occurred.  The
2541    ACCESS_SPECIFIER is one of
2542    access_{default,public,protected_private}_node.  For a virtual base
2543    we set TREE_TYPE.  */
2544
2545 tree
2546 finish_base_specifier (tree base, tree access, bool virtual_p)
2547 {
2548   tree result;
2549
2550   if (base == error_mark_node)
2551     {
2552       error ("invalid base-class specification");
2553       result = NULL_TREE;
2554     }
2555   else if (! MAYBE_CLASS_TYPE_P (base))
2556     {
2557       error ("%qT is not a class type", base);
2558       result = NULL_TREE;
2559     }
2560   else
2561     {
2562       if (cp_type_quals (base) != 0)
2563         {
2564           error ("base class %qT has cv qualifiers", base);
2565           base = TYPE_MAIN_VARIANT (base);
2566         }
2567       result = build_tree_list (access, base);
2568       if (virtual_p)
2569         TREE_TYPE (result) = integer_type_node;
2570     }
2571
2572   return result;
2573 }
2574
2575 /* Issue a diagnostic that NAME cannot be found in SCOPE.  DECL is
2576    what we found when we tried to do the lookup.
2577    LOCATION is the location of the NAME identifier;
2578    The location is used in the error message*/
2579
2580 void
2581 qualified_name_lookup_error (tree scope, tree name,
2582                              tree decl, location_t location)
2583 {
2584   if (scope == error_mark_node)
2585     ; /* We already complained.  */
2586   else if (TYPE_P (scope))
2587     {
2588       if (!COMPLETE_TYPE_P (scope))
2589         error_at (location, "incomplete type %qT used in nested name specifier",
2590                   scope);
2591       else if (TREE_CODE (decl) == TREE_LIST)
2592         {
2593           error_at (location, "reference to %<%T::%D%> is ambiguous",
2594                     scope, name);
2595           print_candidates (decl);
2596         }
2597       else
2598         error_at (location, "%qD is not a member of %qT", name, scope);
2599     }
2600   else if (scope != global_namespace)
2601     error_at (location, "%qD is not a member of %qD", name, scope);
2602   else
2603     error_at (location, "%<::%D%> has not been declared", name);
2604 }
2605
2606 /* If FNS is a member function, a set of member functions, or a
2607    template-id referring to one or more member functions, return a
2608    BASELINK for FNS, incorporating the current access context.
2609    Otherwise, return FNS unchanged.  */
2610
2611 tree
2612 baselink_for_fns (tree fns)
2613 {
2614   tree fn;
2615   tree cl;
2616
2617   if (BASELINK_P (fns) 
2618       || error_operand_p (fns))
2619     return fns;
2620   
2621   fn = fns;
2622   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2623     fn = TREE_OPERAND (fn, 0);
2624   fn = get_first_fn (fn);
2625   if (!DECL_FUNCTION_MEMBER_P (fn))
2626     return fns;
2627
2628   cl = currently_open_derived_class (DECL_CONTEXT (fn));
2629   if (!cl)
2630     cl = DECL_CONTEXT (fn);
2631   cl = TYPE_BINFO (cl);
2632   return build_baselink (cl, cl, fns, /*optype=*/NULL_TREE);
2633 }
2634
2635 /* Returns true iff DECL is an automatic variable from a function outside
2636    the current one.  */
2637
2638 static bool
2639 outer_automatic_var_p (tree decl)
2640 {
2641   return ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
2642           && DECL_FUNCTION_SCOPE_P (decl)
2643           && !TREE_STATIC (decl)
2644           && DECL_CONTEXT (decl) != current_function_decl);
2645 }
2646
2647 /* Returns true iff DECL is a capture field from a lambda that is not our
2648    immediate context.  */
2649
2650 static bool
2651 outer_lambda_capture_p (tree decl)
2652 {
2653   return (TREE_CODE (decl) == FIELD_DECL
2654           && LAMBDA_TYPE_P (DECL_CONTEXT (decl))
2655           && (!current_class_type
2656               || !DERIVED_FROM_P (DECL_CONTEXT (decl), current_class_type)));
2657 }
2658
2659 /* ID_EXPRESSION is a representation of parsed, but unprocessed,
2660    id-expression.  (See cp_parser_id_expression for details.)  SCOPE,
2661    if non-NULL, is the type or namespace used to explicitly qualify
2662    ID_EXPRESSION.  DECL is the entity to which that name has been
2663    resolved.
2664
2665    *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2666    constant-expression.  In that case, *NON_CONSTANT_EXPRESSION_P will
2667    be set to true if this expression isn't permitted in a
2668    constant-expression, but it is otherwise not set by this function.
2669    *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2670    constant-expression, but a non-constant expression is also
2671    permissible.
2672
2673    DONE is true if this expression is a complete postfix-expression;
2674    it is false if this expression is followed by '->', '[', '(', etc.
2675    ADDRESS_P is true iff this expression is the operand of '&'.
2676    TEMPLATE_P is true iff the qualified-id was of the form
2677    "A::template B".  TEMPLATE_ARG_P is true iff this qualified name
2678    appears as a template argument.
2679
2680    If an error occurs, and it is the kind of error that might cause
2681    the parser to abort a tentative parse, *ERROR_MSG is filled in.  It
2682    is the caller's responsibility to issue the message.  *ERROR_MSG
2683    will be a string with static storage duration, so the caller need
2684    not "free" it.
2685
2686    Return an expression for the entity, after issuing appropriate
2687    diagnostics.  This function is also responsible for transforming a
2688    reference to a non-static member into a COMPONENT_REF that makes
2689    the use of "this" explicit.
2690
2691    Upon return, *IDK will be filled in appropriately.  */
2692 tree
2693 finish_id_expression (tree id_expression,
2694                       tree decl,
2695                       tree scope,
2696                       cp_id_kind *idk,
2697                       bool integral_constant_expression_p,
2698                       bool allow_non_integral_constant_expression_p,
2699                       bool *non_integral_constant_expression_p,
2700                       bool template_p,
2701                       bool done,
2702                       bool address_p,
2703                       bool template_arg_p,
2704                       const char **error_msg,
2705                       location_t location)
2706 {
2707   /* Initialize the output parameters.  */
2708   *idk = CP_ID_KIND_NONE;
2709   *error_msg = NULL;
2710
2711   if (id_expression == error_mark_node)
2712     return error_mark_node;
2713   /* If we have a template-id, then no further lookup is
2714      required.  If the template-id was for a template-class, we
2715      will sometimes have a TYPE_DECL at this point.  */
2716   else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2717            || TREE_CODE (decl) == TYPE_DECL)
2718     ;
2719   /* Look up the name.  */
2720   else
2721     {
2722       if (decl == error_mark_node)
2723         {
2724           /* Name lookup failed.  */
2725           if (scope
2726               && (!TYPE_P (scope)
2727                   || (!dependent_type_p (scope)
2728                       && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
2729                            && IDENTIFIER_TYPENAME_P (id_expression)
2730                            && dependent_type_p (TREE_TYPE (id_expression))))))
2731             {
2732               /* If the qualifying type is non-dependent (and the name
2733                  does not name a conversion operator to a dependent
2734                  type), issue an error.  */
2735               qualified_name_lookup_error (scope, id_expression, decl, location);
2736               return error_mark_node;
2737             }
2738           else if (!scope)
2739             {
2740               /* It may be resolved via Koenig lookup.  */
2741               *idk = CP_ID_KIND_UNQUALIFIED;
2742               return id_expression;
2743             }
2744           else
2745             decl = id_expression;
2746         }
2747       /* If DECL is a variable that would be out of scope under
2748          ANSI/ISO rules, but in scope in the ARM, name lookup
2749          will succeed.  Issue a diagnostic here.  */
2750       else
2751         decl = check_for_out_of_scope_variable (decl);
2752
2753       /* Remember that the name was used in the definition of
2754          the current class so that we can check later to see if
2755          the meaning would have been different after the class
2756          was entirely defined.  */
2757       if (!scope && decl != error_mark_node)
2758         maybe_note_name_used_in_class (id_expression, decl);
2759
2760       /* Disallow uses of local variables from containing functions, except
2761          within lambda-expressions.  */
2762       if ((outer_automatic_var_p (decl)
2763            || outer_lambda_capture_p (decl))
2764           /* It's not a use (3.2) if we're in an unevaluated context.  */
2765           && !cp_unevaluated_operand)
2766         {
2767           tree context = DECL_CONTEXT (decl);
2768           tree containing_function = current_function_decl;
2769           tree lambda_stack = NULL_TREE;
2770           tree lambda_expr = NULL_TREE;
2771           tree initializer = decl;
2772
2773           /* Core issue 696: "[At the July 2009 meeting] the CWG expressed
2774              support for an approach in which a reference to a local
2775              [constant] automatic variable in a nested class or lambda body
2776              would enter the expression as an rvalue, which would reduce
2777              the complexity of the problem"
2778
2779              FIXME update for final resolution of core issue 696.  */
2780           if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
2781             return integral_constant_value (decl);
2782
2783           if (TYPE_P (context))
2784             {
2785               /* Implicit capture of an explicit capture.  */
2786               context = lambda_function (context);
2787               initializer = thisify_lambda_field (decl);
2788             }
2789
2790           /* If we are in a lambda function, we can move out until we hit
2791              1. the context,
2792              2. a non-lambda function, or
2793              3. a non-default capturing lambda function.  */
2794           while (context != containing_function
2795                  && LAMBDA_FUNCTION_P (containing_function))
2796             {
2797               lambda_expr = CLASSTYPE_LAMBDA_EXPR
2798                 (DECL_CONTEXT (containing_function));
2799
2800               if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr)
2801                   == CPLD_NONE)
2802                 break;
2803
2804               lambda_stack = tree_cons (NULL_TREE,
2805                                         lambda_expr,
2806                                         lambda_stack);
2807
2808               containing_function
2809                 = decl_function_context (containing_function);
2810             }
2811
2812           if (context == containing_function)
2813             {
2814               decl = add_default_capture (lambda_stack,
2815                                           /*id=*/DECL_NAME (decl),
2816                                           initializer);
2817             }
2818           else if (lambda_expr)
2819             {
2820               error ("%qD is not captured", decl);
2821               return error_mark_node;
2822             }
2823           else
2824             {
2825               error (TREE_CODE (decl) == VAR_DECL
2826                      ? "use of %<auto%> variable from containing function"
2827                      : "use of parameter from containing function");
2828               error ("  %q+#D declared here", decl);
2829               return error_mark_node;
2830             }
2831         }
2832     }
2833
2834   /* If we didn't find anything, or what we found was a type,
2835      then this wasn't really an id-expression.  */
2836   if (TREE_CODE (decl) == TEMPLATE_DECL
2837       && !DECL_FUNCTION_TEMPLATE_P (decl))
2838     {
2839       *error_msg = "missing template arguments";
2840       return error_mark_node;
2841     }
2842   else if (TREE_CODE (decl) == TYPE_DECL
2843            || TREE_CODE (decl) == NAMESPACE_DECL)
2844     {
2845       *error_msg = "expected primary-expression";
2846       return error_mark_node;
2847     }
2848
2849   /* If the name resolved to a template parameter, there is no
2850      need to look it up again later.  */
2851   if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
2852       || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2853     {
2854       tree r;
2855
2856       *idk = CP_ID_KIND_NONE;
2857       if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2858         decl = TEMPLATE_PARM_DECL (decl);
2859       r = convert_from_reference (DECL_INITIAL (decl));
2860
2861       if (integral_constant_expression_p
2862           && !dependent_type_p (TREE_TYPE (decl))
2863           && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
2864         {
2865           if (!allow_non_integral_constant_expression_p)
2866             error ("template parameter %qD of type %qT is not allowed in "
2867                    "an integral constant expression because it is not of "
2868                    "integral or enumeration type", decl, TREE_TYPE (decl));
2869           *non_integral_constant_expression_p = true;
2870         }
2871       return r;
2872     }
2873   /* Similarly, we resolve enumeration constants to their
2874      underlying values.  */
2875   else if (TREE_CODE (decl) == CONST_DECL)
2876     {
2877       *idk = CP_ID_KIND_NONE;
2878       if (!processing_template_decl)
2879         {
2880           used_types_insert (TREE_TYPE (decl));
2881           return DECL_INITIAL (decl);
2882         }
2883       return decl;
2884     }
2885   else
2886     {
2887       bool dependent_p;
2888
2889       /* If the declaration was explicitly qualified indicate
2890          that.  The semantics of `A::f(3)' are different than
2891          `f(3)' if `f' is virtual.  */
2892       *idk = (scope
2893               ? CP_ID_KIND_QUALIFIED
2894               : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2895                  ? CP_ID_KIND_TEMPLATE_ID
2896                  : CP_ID_KIND_UNQUALIFIED));
2897
2898
2899       /* [temp.dep.expr]
2900
2901          An id-expression is type-dependent if it contains an
2902          identifier that was declared with a dependent type.
2903
2904          The standard is not very specific about an id-expression that
2905          names a set of overloaded functions.  What if some of them
2906          have dependent types and some of them do not?  Presumably,
2907          such a name should be treated as a dependent name.  */
2908       /* Assume the name is not dependent.  */
2909       dependent_p = false;
2910       if (!processing_template_decl)
2911         /* No names are dependent outside a template.  */
2912         ;
2913       /* A template-id where the name of the template was not resolved
2914          is definitely dependent.  */
2915       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2916                && (TREE_CODE (TREE_OPERAND (decl, 0))
2917                    == IDENTIFIER_NODE))
2918         dependent_p = true;
2919       /* For anything except an overloaded function, just check its
2920          type.  */
2921       else if (!is_overloaded_fn (decl))
2922         dependent_p
2923           = dependent_type_p (TREE_TYPE (decl));
2924       /* For a set of overloaded functions, check each of the
2925          functions.  */
2926       else
2927         {
2928           tree fns = decl;
2929
2930           if (BASELINK_P (fns))
2931             fns = BASELINK_FUNCTIONS (fns);
2932
2933           /* For a template-id, check to see if the template
2934              arguments are dependent.  */
2935           if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
2936             {
2937               tree args = TREE_OPERAND (fns, 1);
2938               dependent_p = any_dependent_template_arguments_p (args);
2939               /* The functions are those referred to by the
2940                  template-id.  */
2941               fns = TREE_OPERAND (fns, 0);
2942             }
2943
2944           /* If there are no dependent template arguments, go through
2945              the overloaded functions.  */
2946           while (fns && !dependent_p)
2947             {
2948               tree fn = OVL_CURRENT (fns);
2949
2950               /* Member functions of dependent classes are
2951                  dependent.  */
2952               if (TREE_CODE (fn) == FUNCTION_DECL
2953                   && type_dependent_expression_p (fn))
2954                 dependent_p = true;
2955               else if (TREE_CODE (fn) == TEMPLATE_DECL
2956                        && dependent_template_p (fn))
2957                 dependent_p = true;
2958
2959               fns = OVL_NEXT (fns);
2960             }
2961         }
2962
2963       /* If the name was dependent on a template parameter, we will
2964          resolve the name at instantiation time.  */
2965       if (dependent_p)
2966         {
2967           /* Create a SCOPE_REF for qualified names, if the scope is
2968              dependent.  */
2969           if (scope)
2970             {
2971               if (TYPE_P (scope))
2972                 {
2973                   if (address_p && done)
2974                     decl = finish_qualified_id_expr (scope, decl,
2975                                                      done, address_p,
2976                                                      template_p,
2977                                                      template_arg_p);
2978                   else
2979                     {
2980                       tree type = NULL_TREE;
2981                       if (DECL_P (decl) && !dependent_scope_p (scope))
2982                         type = TREE_TYPE (decl);
2983                       decl = build_qualified_name (type,
2984                                                    scope,
2985                                                    id_expression,
2986                                                    template_p);
2987                     }
2988                 }
2989               if (TREE_TYPE (decl))
2990                 decl = convert_from_reference (decl);
2991               return decl;
2992             }
2993           /* A TEMPLATE_ID already contains all the information we
2994              need.  */
2995           if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
2996             return id_expression;
2997           *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
2998           /* If we found a variable, then name lookup during the
2999              instantiation will always resolve to the same VAR_DECL
3000              (or an instantiation thereof).  */
3001           if (TREE_CODE (decl) == VAR_DECL
3002               || TREE_CODE (decl) == PARM_DECL)
3003             return convert_from_reference (decl);
3004           /* The same is true for FIELD_DECL, but we also need to
3005              make sure that the syntax is correct.  */
3006           else if (TREE_CODE (decl) == FIELD_DECL)
3007             {
3008               /* Since SCOPE is NULL here, this is an unqualified name.
3009                  Access checking has been performed during name lookup
3010                  already.  Turn off checking to avoid duplicate errors.  */
3011               push_deferring_access_checks (dk_no_check);
3012               decl = finish_non_static_data_member
3013                        (decl, current_class_ref,
3014                         /*qualifying_scope=*/NULL_TREE);
3015               pop_deferring_access_checks ();
3016               return decl;
3017             }
3018           return id_expression;
3019         }
3020
3021       /* Only certain kinds of names are allowed in constant
3022          expression.  Enumerators and template parameters have already
3023          been handled above.  */
3024       if (integral_constant_expression_p
3025           && ! DECL_INTEGRAL_CONSTANT_VAR_P (decl)
3026           && ! builtin_valid_in_constant_expr_p (decl))
3027         {
3028           if (!allow_non_integral_constant_expression_p)
3029             {
3030               error ("%qD cannot appear in a constant-expression", decl);
3031               return error_mark_node;
3032             }
3033           *non_integral_constant_expression_p = true;
3034         }
3035
3036       if (TREE_CODE (decl) == NAMESPACE_DECL)
3037         {
3038           error ("use of namespace %qD as expression", decl);
3039           return error_mark_node;
3040         }
3041       else if (DECL_CLASS_TEMPLATE_P (decl))
3042         {
3043           error ("use of class template %qT as expression", decl);
3044           return error_mark_node;
3045         }
3046       else if (TREE_CODE (decl) == TREE_LIST)
3047         {
3048           /* Ambiguous reference to base members.  */
3049           error ("request for member %qD is ambiguous in "
3050                  "multiple inheritance lattice", id_expression);
3051           print_candidates (decl);
3052           return error_mark_node;
3053         }
3054
3055       /* Mark variable-like entities as used.  Functions are similarly
3056          marked either below or after overload resolution.  */
3057       if (TREE_CODE (decl) == VAR_DECL
3058           || TREE_CODE (decl) == PARM_DECL
3059           || TREE_CODE (decl) == RESULT_DECL)
3060         mark_used (decl);
3061
3062       if (scope)
3063         {
3064           decl = (adjust_result_of_qualified_name_lookup
3065                   (decl, scope, current_class_type));
3066
3067           if (TREE_CODE (decl) == FUNCTION_DECL)
3068             mark_used (decl);
3069
3070           if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl))
3071             decl = finish_qualified_id_expr (scope,
3072                                              decl,
3073                                              done,
3074                                              address_p,
3075                                              template_p,
3076                                              template_arg_p);
3077           else
3078             {
3079               tree r = convert_from_reference (decl);
3080
3081               if (processing_template_decl && TYPE_P (scope))
3082                 r = build_qualified_name (TREE_TYPE (r),
3083                                           scope, decl,
3084                                           template_p);
3085               decl = r;
3086             }
3087         }
3088       else if (TREE_CODE (decl) == FIELD_DECL)
3089         {
3090           /* Since SCOPE is NULL here, this is an unqualified name.
3091              Access checking has been performed during name lookup
3092              already.  Turn off checking to avoid duplicate errors.  */
3093           push_deferring_access_checks (dk_no_check);
3094           decl = finish_non_static_data_member (decl, current_class_ref,
3095                                                 /*qualifying_scope=*/NULL_TREE);
3096           pop_deferring_access_checks ();
3097         }
3098       else if (is_overloaded_fn (decl))
3099         {
3100           tree first_fn;
3101
3102           first_fn = decl;
3103           if (TREE_CODE (first_fn) == TEMPLATE_ID_EXPR)
3104             first_fn = TREE_OPERAND (first_fn, 0);
3105           first_fn = get_first_fn (first_fn);
3106           if (TREE_CODE (first_fn) == TEMPLATE_DECL)
3107             first_fn = DECL_TEMPLATE_RESULT (first_fn);
3108
3109           if (!really_overloaded_fn (decl))
3110             mark_used (first_fn);
3111
3112           if (!template_arg_p
3113               && TREE_CODE (first_fn) == FUNCTION_DECL
3114               && DECL_FUNCTION_MEMBER_P (first_fn)
3115               && !shared_member_p (decl))
3116             {
3117               /* A set of member functions.  */
3118               decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
3119               return finish_class_member_access_expr (decl, id_expression,
3120                                                       /*template_p=*/false,
3121                                                       tf_warning_or_error);
3122             }
3123
3124           decl = baselink_for_fns (decl);
3125         }
3126       else
3127         {
3128           if (DECL_P (decl) && DECL_NONLOCAL (decl)
3129               && DECL_CLASS_SCOPE_P (decl))
3130             {
3131               tree context = context_for_name_lookup (decl); 
3132               if (context != current_class_type)
3133                 {
3134                   tree path = currently_open_derived_class (context);
3135                   perform_or_defer_access_check (TYPE_BINFO (path),
3136                                                  decl, decl);
3137                 }
3138             }
3139
3140           decl = convert_from_reference (decl);
3141         }
3142     }
3143
3144   if (TREE_DEPRECATED (decl))
3145     warn_deprecated_use (decl, NULL_TREE);
3146
3147   return decl;
3148 }
3149
3150 /* Implement the __typeof keyword: Return the type of EXPR, suitable for
3151    use as a type-specifier.  */
3152
3153 tree
3154 finish_typeof (tree expr)
3155 {
3156   tree type;
3157
3158   if (type_dependent_expression_p (expr))
3159     {
3160       type = cxx_make_type (TYPEOF_TYPE);
3161       TYPEOF_TYPE_EXPR (type) = expr;
3162       SET_TYPE_STRUCTURAL_EQUALITY (type);
3163
3164       return type;
3165     }
3166
3167   type = unlowered_expr_type (expr);
3168
3169   if (!type || type == unknown_type_node)
3170     {
3171       error ("type of %qE is unknown", expr);
3172       return error_mark_node;
3173     }
3174
3175   return type;
3176 }
3177
3178 /* Perform C++-specific checks for __builtin_offsetof before calling
3179    fold_offsetof.  */
3180
3181 tree
3182 finish_offsetof (tree expr)
3183 {
3184   if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
3185     {
3186       error ("cannot apply %<offsetof%> to destructor %<~%T%>",
3187               TREE_OPERAND (expr, 2));
3188       return error_mark_node;
3189     }
3190   if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
3191       || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
3192       || TREE_CODE (TREE_TYPE (expr)) == UNKNOWN_TYPE)
3193     {
3194       if (TREE_CODE (expr) == COMPONENT_REF
3195           || TREE_CODE (expr) == COMPOUND_EXPR)
3196         expr = TREE_OPERAND (expr, 1);
3197       error ("cannot apply %<offsetof%> to member function %qD", expr);
3198       return error_mark_node;
3199     }
3200   if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
3201     expr = TREE_OPERAND (expr, 0);
3202   return fold_offsetof (expr, NULL_TREE);
3203 }
3204
3205 /* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR.  This
3206    function is broken out from the above for the benefit of the tree-ssa
3207    project.  */
3208
3209 void
3210 simplify_aggr_init_expr (tree *tp)
3211 {
3212   tree aggr_init_expr = *tp;
3213
3214   /* Form an appropriate CALL_EXPR.  */
3215   tree fn = AGGR_INIT_EXPR_FN (aggr_init_expr);
3216   tree slot = AGGR_INIT_EXPR_SLOT (aggr_init_expr);
3217   tree type = TREE_TYPE (slot);
3218
3219   tree call_expr;
3220   enum style_t { ctor, arg, pcc } style;
3221
3222   if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
3223     style = ctor;
3224 #ifdef PCC_STATIC_STRUCT_RETURN
3225   else if (1)
3226     style = pcc;
3227 #endif
3228   else
3229     {
3230       gcc_assert (TREE_ADDRESSABLE (type));
3231       style = arg;
3232     }
3233
3234   call_expr = build_call_array_loc (input_location,
3235                                     TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
3236                                     fn,
3237                                     aggr_init_expr_nargs (aggr_init_expr),
3238                                     AGGR_INIT_EXPR_ARGP (aggr_init_expr));
3239
3240   if (style == ctor)
3241     {
3242       /* Replace the first argument to the ctor with the address of the
3243          slot.  */
3244       cxx_mark_addressable (slot);
3245       CALL_EXPR_ARG (call_expr, 0) =
3246         build1 (ADDR_EXPR, build_pointer_type (type), slot);
3247     }
3248   else if (style == arg)
3249     {
3250       /* Just mark it addressable here, and leave the rest to
3251          expand_call{,_inline}.  */
3252       cxx_mark_addressable (slot);
3253       CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
3254       call_expr = build2 (MODIFY_EXPR, TREE_TYPE (call_expr), slot, call_expr);
3255     }
3256   else if (style == pcc)
3257     {
3258       /* If we're using the non-reentrant PCC calling convention, then we
3259          need to copy the returned value out of the static buffer into the
3260          SLOT.  */
3261       push_deferring_access_checks (dk_no_check);
3262       call_expr = build_aggr_init (slot, call_expr,
3263                                    DIRECT_BIND | LOOKUP_ONLYCONVERTING,
3264                                    tf_warning_or_error);
3265       pop_deferring_access_checks ();
3266       call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
3267     }
3268
3269   if (AGGR_INIT_ZERO_FIRST (aggr_init_expr))
3270     {
3271       tree init = build_zero_init (type, NULL_TREE,
3272                                    /*static_storage_p=*/false);
3273       init = build2 (INIT_EXPR, void_type_node, slot, init);
3274       call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (call_expr),
3275                           init, call_expr);
3276     }
3277
3278   *tp = call_expr;
3279 }
3280
3281 /* Emit all thunks to FN that should be emitted when FN is emitted.  */
3282
3283 void
3284 emit_associated_thunks (tree fn)
3285 {
3286   /* When we use vcall offsets, we emit thunks with the virtual
3287      functions to which they thunk. The whole point of vcall offsets
3288      is so that you can know statically the entire set of thunks that
3289      will ever be needed for a given virtual function, thereby
3290      enabling you to output all the thunks with the function itself.  */
3291   if (DECL_VIRTUAL_P (fn)
3292       /* Do not emit thunks for extern template instantiations.  */
3293       && ! DECL_REALLY_EXTERN (fn))
3294     {
3295       tree thunk;
3296
3297       for (thunk = DECL_THUNKS (fn); thunk; thunk = TREE_CHAIN (thunk))
3298         {
3299           if (!THUNK_ALIAS (thunk))
3300             {
3301               use_thunk (thunk, /*emit_p=*/1);
3302               if (DECL_RESULT_THUNK_P (thunk))
3303                 {
3304                   tree probe;
3305
3306                   for (probe = DECL_THUNKS (thunk);
3307                        probe; probe = TREE_CHAIN (probe))
3308                     use_thunk (probe, /*emit_p=*/1);
3309                 }
3310             }
3311           else
3312             gcc_assert (!DECL_THUNKS (thunk));
3313         }
3314     }
3315 }
3316
3317 /* Generate RTL for FN.  */
3318
3319 void
3320 expand_or_defer_fn (tree fn)
3321 {
3322   /* When the parser calls us after finishing the body of a template
3323      function, we don't really want to expand the body.  */
3324   if (processing_template_decl)
3325     {
3326       /* Normally, collection only occurs in rest_of_compilation.  So,
3327          if we don't collect here, we never collect junk generated
3328          during the processing of templates until we hit a
3329          non-template function.  It's not safe to do this inside a
3330          nested class, though, as the parser may have local state that
3331          is not a GC root.  */
3332       if (!function_depth)
3333         ggc_collect ();
3334       return;
3335     }
3336
3337   gcc_assert (DECL_SAVED_TREE (fn));
3338
3339   /* If this is a constructor or destructor body, we have to clone
3340      it.  */
3341   if (maybe_clone_body (fn))
3342     {
3343       /* We don't want to process FN again, so pretend we've written
3344          it out, even though we haven't.  */
3345       TREE_ASM_WRITTEN (fn) = 1;
3346       DECL_SAVED_TREE (fn) = NULL_TREE;
3347       return;
3348     }
3349
3350   /* We make a decision about linkage for these functions at the end
3351      of the compilation.  Until that point, we do not want the back
3352      end to output them -- but we do want it to see the bodies of
3353      these functions so that it can inline them as appropriate.  */
3354   if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3355     {
3356       if (DECL_INTERFACE_KNOWN (fn))
3357         /* We've already made a decision as to how this function will
3358            be handled.  */;
3359       else if (!at_eof)
3360         {
3361           DECL_EXTERNAL (fn) = 1;
3362           DECL_NOT_REALLY_EXTERN (fn) = 1;
3363           note_vague_linkage_fn (fn);
3364           /* A non-template inline function with external linkage will
3365              always be COMDAT.  As we must eventually determine the
3366              linkage of all functions, and as that causes writes to
3367              the data mapped in from the PCH file, it's advantageous
3368              to mark the functions at this point.  */
3369           if (!DECL_IMPLICIT_INSTANTIATION (fn))
3370             {
3371               /* This function must have external linkage, as
3372                  otherwise DECL_INTERFACE_KNOWN would have been
3373                  set.  */
3374               gcc_assert (TREE_PUBLIC (fn));
3375               comdat_linkage (fn);
3376               DECL_INTERFACE_KNOWN (fn) = 1;
3377             }
3378         }
3379       else
3380         import_export_decl (fn);
3381
3382       /* If the user wants us to keep all inline functions, then mark
3383          this function as needed so that finish_file will make sure to
3384          output it later.  Similarly, all dllexport'd functions must
3385          be emitted; there may be callers in other DLLs.  */
3386       if ((flag_keep_inline_functions && DECL_DECLARED_INLINE_P (fn))
3387           || lookup_attribute ("dllexport", DECL_ATTRIBUTES (fn)))
3388         mark_needed (fn);
3389     }
3390
3391   /* There's no reason to do any of the work here if we're only doing
3392      semantic analysis; this code just generates RTL.  */
3393   if (flag_syntax_only)
3394     return;
3395
3396   function_depth++;
3397
3398   /* Expand or defer, at the whim of the compilation unit manager.  */
3399   cgraph_finalize_function (fn, function_depth > 1);
3400
3401   function_depth--;
3402 }
3403
3404 struct nrv_data
3405 {
3406   tree var;
3407   tree result;
3408   htab_t visited;
3409 };
3410
3411 /* Helper function for walk_tree, used by finalize_nrv below.  */
3412
3413 static tree
3414 finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
3415 {
3416   struct nrv_data *dp = (struct nrv_data *)data;
3417   void **slot;
3418
3419   /* No need to walk into types.  There wouldn't be any need to walk into
3420      non-statements, except that we have to consider STMT_EXPRs.  */
3421   if (TYPE_P (*tp))
3422     *walk_subtrees = 0;
3423   /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3424      but differs from using NULL_TREE in that it indicates that we care
3425      about the value of the RESULT_DECL.  */
3426   else if (TREE_CODE (*tp) == RETURN_EXPR)
3427     TREE_OPERAND (*tp, 0) = dp->result;
3428   /* Change all cleanups for the NRV to only run when an exception is
3429      thrown.  */
3430   else if (TREE_CODE (*tp) == CLEANUP_STMT
3431            && CLEANUP_DECL (*tp) == dp->var)
3432     CLEANUP_EH_ONLY (*tp) = 1;
3433   /* Replace the DECL_EXPR for the NRV with an initialization of the
3434      RESULT_DECL, if needed.  */
3435   else if (TREE_CODE (*tp) == DECL_EXPR
3436            && DECL_EXPR_DECL (*tp) == dp->var)
3437     {
3438       tree init;
3439       if (DECL_INITIAL (dp->var)
3440           && DECL_INITIAL (dp->var) != error_mark_node)
3441         init = build2 (INIT_EXPR, void_type_node, dp->result,
3442                        DECL_INITIAL (dp->var));
3443       else
3444         init = build_empty_stmt (EXPR_LOCATION (*tp));
3445       DECL_INITIAL (dp->var) = NULL_TREE;
3446       SET_EXPR_LOCATION (init, EXPR_LOCATION (*tp));
3447       *tp = init;
3448     }
3449   /* And replace all uses of the NRV with the RESULT_DECL.  */
3450   else if (*tp == dp->var)
3451     *tp = dp->result;
3452
3453   /* Avoid walking into the same tree more than once.  Unfortunately, we
3454      can't just use walk_tree_without duplicates because it would only call
3455      us for the first occurrence of dp->var in the function body.  */
3456   slot = htab_find_slot (dp->visited, *tp, INSERT);
3457   if (*slot)
3458     *walk_subtrees = 0;
3459   else
3460     *slot = *tp;
3461
3462   /* Keep iterating.  */
3463   return NULL_TREE;
3464 }
3465
3466 /* Called from finish_function to implement the named return value
3467    optimization by overriding all the RETURN_EXPRs and pertinent
3468    CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
3469    RESULT_DECL for the function.  */
3470
3471 void
3472 finalize_nrv (tree *tp, tree var, tree result)
3473 {
3474   struct nrv_data data;
3475
3476   /* Copy debugging information from VAR to RESULT.  */
3477   DECL_NAME (result) = DECL_NAME (var);
3478   DECL_ARTIFICIAL (result) = DECL_ARTIFICIAL (var);
3479   DECL_IGNORED_P (result) = DECL_IGNORED_P (var);
3480   DECL_SOURCE_LOCATION (result) = DECL_SOURCE_LOCATION (var);
3481   DECL_ABSTRACT_ORIGIN (result) = DECL_ABSTRACT_ORIGIN (var);
3482   /* Don't forget that we take its address.  */
3483   TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
3484
3485   data.var = var;
3486   data.result = result;
3487   data.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
3488   cp_walk_tree (tp, finalize_nrv_r, &data, 0);
3489   htab_delete (data.visited);
3490 }
3491 \f
3492 /* Return the declaration for the function called by CALL_EXPR T,
3493    TYPE is the class type of the clause decl.  */
3494
3495 static tree
3496 omp_clause_info_fndecl (tree t, tree type)
3497 {
3498   tree ret = get_callee_fndecl (t);
3499
3500   if (ret)
3501     return ret;
3502
3503   gcc_assert (TREE_CODE (t) == CALL_EXPR);
3504   t = CALL_EXPR_FN (t);
3505   STRIP_NOPS (t);
3506   if (TREE_CODE (t) == OBJ_TYPE_REF)
3507     {
3508       t = cp_fold_obj_type_ref (t, type);
3509       if (TREE_CODE (t) == ADDR_EXPR
3510           && TREE_CODE (TREE_OPERAND (t, 0)) == FUNCTION_DECL)
3511         return TREE_OPERAND (t, 0);
3512     }
3513
3514   return NULL_TREE;
3515 }
3516
3517 /* Create CP_OMP_CLAUSE_INFO for clause C.  Returns true if it is invalid.  */
3518
3519 bool
3520 cxx_omp_create_clause_info (tree c, tree type, bool need_default_ctor,
3521                             bool need_copy_ctor, bool need_copy_assignment)
3522 {
3523   int save_errorcount = errorcount;
3524   tree info, t;
3525
3526   /* Always allocate 3 elements for simplicity.  These are the
3527      function decls for the ctor, dtor, and assignment op.
3528      This layout is known to the three lang hooks,
3529      cxx_omp_clause_default_init, cxx_omp_clause_copy_init,
3530      and cxx_omp_clause_assign_op.  */
3531   info = make_tree_vec (3);
3532   CP_OMP_CLAUSE_INFO (c) = info;
3533
3534   if (need_default_ctor
3535       || (need_copy_ctor && !TYPE_HAS_TRIVIAL_INIT_REF (type)))
3536     {
3537       VEC(tree,gc) *vec;
3538
3539       if (need_default_ctor)
3540         vec = NULL;
3541       else
3542         {
3543           t = build_int_cst (build_pointer_type (type), 0);
3544           t = build1 (INDIRECT_REF, type, t);
3545           vec = make_tree_vector_single (t);
3546         }
3547       t = build_special_member_call (NULL_TREE, complete_ctor_identifier,
3548                                      &vec, type, LOOKUP_NORMAL,
3549                                      tf_warning_or_error);
3550
3551       if (vec != NULL)
3552         release_tree_vector (vec);
3553
3554       if (targetm.cxx.cdtor_returns_this () || errorcount)
3555         /* Because constructors and destructors return this,
3556            the call will have been cast to "void".  Remove the
3557            cast here.  We would like to use STRIP_NOPS, but it
3558            wouldn't work here because TYPE_MODE (t) and
3559            TYPE_MODE (TREE_OPERAND (t, 0)) are different.
3560            They are VOIDmode and Pmode, respectively.  */
3561         if (TREE_CODE (t) == NOP_EXPR)
3562           t = TREE_OPERAND (t, 0);
3563
3564       TREE_VEC_ELT (info, 0) = get_callee_fndecl (t);
3565     }
3566
3567   if ((need_default_ctor || need_copy_ctor)
3568       && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3569     {
3570       t = build_int_cst (build_pointer_type (type), 0);
3571       t = build1 (INDIRECT_REF, type, t);
3572       t = build_special_member_call (t, complete_dtor_identifier,
3573                                      NULL, type, LOOKUP_NORMAL,
3574                                      tf_warning_or_error);
3575
3576       if (targetm.cxx.cdtor_returns_this () || errorcount)
3577         /* Because constructors and destructors return this,
3578            the call will have been cast to "void".  Remove the
3579            cast here.  We would like to use STRIP_NOPS, but it
3580            wouldn't work here because TYPE_MODE (t) and
3581            TYPE_MODE (TREE_OPERAND (t, 0)) are different.
3582            They are VOIDmode and Pmode, respectively.  */
3583         if (TREE_CODE (t) == NOP_EXPR)
3584           t = TREE_OPERAND (t, 0);
3585
3586       TREE_VEC_ELT (info, 1) = omp_clause_info_fndecl (t, type);
3587     }
3588
3589   if (need_copy_assignment && !TYPE_HAS_TRIVIAL_ASSIGN_REF (type))
3590     {
3591       VEC(tree,gc) *vec;
3592
3593       t = build_int_cst (build_pointer_type (type), 0);
3594       t = build1 (INDIRECT_REF, type, t);
3595       vec = make_tree_vector_single (t);
3596       t = build_special_member_call (t, ansi_assopname (NOP_EXPR),
3597                                      &vec, type, LOOKUP_NORMAL,
3598                                      tf_warning_or_error);
3599       release_tree_vector (vec);
3600
3601       /* We'll have called convert_from_reference on the call, which
3602          may well have added an indirect_ref.  It's unneeded here,
3603          and in the way, so kill it.  */
3604       if (TREE_CODE (t) == INDIRECT_REF)
3605         t = TREE_OPERAND (t, 0);
3606
3607       TREE_VEC_ELT (info, 2) = omp_clause_info_fndecl (t, type);
3608     }
3609
3610   return errorcount != save_errorcount;
3611 }
3612
3613 /* For all elements of CLAUSES, validate them vs OpenMP constraints.
3614    Remove any elements from the list that are invalid.  */
3615
3616 tree
3617 finish_omp_clauses (tree clauses)
3618 {
3619   bitmap_head generic_head, firstprivate_head, lastprivate_head;
3620   tree c, t, *pc = &clauses;
3621   const char *name;
3622
3623   bitmap_obstack_initialize (NULL);
3624   bitmap_initialize (&generic_head, &bitmap_default_obstack);
3625   bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
3626   bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
3627
3628   for (pc = &clauses, c = clauses; c ; c = *pc)
3629     {
3630       bool remove = false;
3631
3632       switch (OMP_CLAUSE_CODE (c))
3633         {
3634         case OMP_CLAUSE_SHARED:
3635           name = "shared";
3636           goto check_dup_generic;
3637         case OMP_CLAUSE_PRIVATE:
3638           name = "private";
3639           goto check_dup_generic;
3640         case OMP_CLAUSE_REDUCTION:
3641           name = "reduction";
3642           goto check_dup_generic;
3643         case OMP_CLAUSE_COPYPRIVATE:
3644           name = "copyprivate";
3645           goto check_dup_generic;
3646         case OMP_CLAUSE_COPYIN:
3647           name = "copyin";
3648           goto check_dup_generic;
3649         check_dup_generic:
3650           t = OMP_CLAUSE_DECL (c);
3651           if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3652             {
3653               if (processing_template_decl)
3654                 break;
3655               if (DECL_P (t))
3656                 error ("%qD is not a variable in clause %qs", t, name);
3657               else
3658                 error ("%qE is not a variable in clause %qs", t, name);
3659               remove = true;
3660             }
3661           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3662                    || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
3663                    || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3664             {
3665               error ("%qD appears more than once in data clauses", t);
3666               remove = true;
3667             }
3668           else
3669             bitmap_set_bit (&generic_head, DECL_UID (t));
3670           break;
3671
3672         case OMP_CLAUSE_FIRSTPRIVATE:
3673           t = OMP_CLAUSE_DECL (c);
3674           if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3675             {
3676               if (processing_template_decl)
3677                 break;
3678               if (DECL_P (t))
3679                 error ("%qD is not a variable in clause %<firstprivate%>", t);
3680               else
3681                 error ("%qE is not a variable in clause %<firstprivate%>", t);
3682               remove = true;
3683             }
3684           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3685                    || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3686             {
3687               error ("%qD appears more than once in data clauses", t);
3688               remove = true;
3689             }
3690           else
3691             bitmap_set_bit (&firstprivate_head, DECL_UID (t));
3692           break;
3693
3694         case OMP_CLAUSE_LASTPRIVATE:
3695           t = OMP_CLAUSE_DECL (c);
3696           if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3697             {
3698               if (processing_template_decl)
3699                 break;
3700               if (DECL_P (t))
3701                 error ("%qD is not a variable in clause %<lastprivate%>", t);
3702               else
3703                 error ("%qE is not a variable in clause %<lastprivate%>", t);
3704               remove = true;
3705             }
3706           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3707                    || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3708             {
3709               error ("%qD appears more than once in data clauses", t);
3710               remove = true;
3711             }
3712           else
3713             bitmap_set_bit (&lastprivate_head, DECL_UID (t));
3714           break;
3715
3716         case OMP_CLAUSE_IF:
3717           t = OMP_CLAUSE_IF_EXPR (c);
3718           t = maybe_convert_cond (t);
3719           if (t == error_mark_node)
3720             remove = true;
3721           OMP_CLAUSE_IF_EXPR (c) = t;
3722           break;
3723
3724         case OMP_CLAUSE_NUM_THREADS:
3725           t = OMP_CLAUSE_NUM_THREADS_EXPR (c);
3726           if (t == error_mark_node)
3727             remove = true;
3728           else if (!type_dependent_expression_p (t)
3729                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
3730             {
3731               error ("num_threads expression must be integral");
3732               remove = true;
3733             }
3734           break;
3735
3736         case OMP_CLAUSE_SCHEDULE:
3737           t = OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c);
3738           if (t == NULL)
3739             ;
3740           else if (t == error_mark_node)
3741             remove = true;
3742           else if (!type_dependent_expression_p (t)
3743                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
3744             {
3745               error ("schedule chunk size expression must be integral");
3746               remove = true;
3747             }
3748           break;
3749
3750         case OMP_CLAUSE_NOWAIT:
3751         case OMP_CLAUSE_ORDERED:
3752         case OMP_CLAUSE_DEFAULT:
3753         case OMP_CLAUSE_UNTIED:
3754         case OMP_CLAUSE_COLLAPSE:
3755           break;
3756
3757         default:
3758           gcc_unreachable ();
3759         }
3760
3761       if (remove)
3762         *pc = OMP_CLAUSE_CHAIN (c);
3763       else
3764         pc = &OMP_CLAUSE_CHAIN (c);
3765     }
3766
3767   for (pc = &clauses, c = clauses; c ; c = *pc)
3768     {
3769       enum omp_clause_code c_kind = OMP_CLAUSE_CODE (c);
3770       bool remove = false;
3771       bool need_complete_non_reference = false;
3772       bool need_default_ctor = false;
3773       bool need_copy_ctor = false;
3774       bool need_copy_assignment = false;
3775       bool need_implicitly_determined = false;
3776       tree type, inner_type;
3777
3778       switch (c_kind)
3779         {
3780         case OMP_CLAUSE_SHARED:
3781           name = "shared";
3782           need_implicitly_determined = true;
3783           break;
3784         case OMP_CLAUSE_PRIVATE:
3785           name = "private";
3786           need_complete_non_reference = true;
3787           need_default_ctor = true;
3788           need_implicitly_determined = true;
3789           break;
3790         case OMP_CLAUSE_FIRSTPRIVATE:
3791           name = "firstprivate";
3792           need_complete_non_reference = true;
3793           need_copy_ctor = true;
3794           need_implicitly_determined = true;
3795           break;
3796         case OMP_CLAUSE_LASTPRIVATE:
3797           name = "lastprivate";
3798           need_complete_non_reference = true;
3799           need_copy_assignment = true;
3800           need_implicitly_determined = true;
3801           break;
3802         case OMP_CLAUSE_REDUCTION:
3803           name = "reduction";
3804           need_implicitly_determined = true;
3805           break;
3806         case OMP_CLAUSE_COPYPRIVATE:
3807           name = "copyprivate";
3808           need_copy_assignment = true;
3809           break;
3810         case OMP_CLAUSE_COPYIN:
3811           name = "copyin";
3812           need_copy_assignment = true;
3813           break;
3814         default:
3815           pc = &OMP_CLAUSE_CHAIN (c);
3816           continue;
3817         }
3818
3819       t = OMP_CLAUSE_DECL (c);
3820       if (processing_template_decl
3821           && TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3822         {
3823           pc = &OMP_CLAUSE_CHAIN (c);
3824           continue;
3825         }
3826
3827       switch (c_kind)
3828         {
3829         case OMP_CLAUSE_LASTPRIVATE:
3830           if (!bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3831             need_default_ctor = true;
3832           break;
3833
3834         case OMP_CLAUSE_REDUCTION:
3835           if (AGGREGATE_TYPE_P (TREE_TYPE (t))
3836               || POINTER_TYPE_P (TREE_TYPE (t)))
3837             {
3838               error ("%qE has invalid type for %<reduction%>", t);
3839               remove = true;
3840             }
3841           else if (FLOAT_TYPE_P (TREE_TYPE (t)))
3842             {
3843               enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
3844               switch (r_code)
3845                 {
3846                 case PLUS_EXPR:
3847                 case MULT_EXPR:
3848                 case MINUS_EXPR:
3849                   break;
3850                 default:
3851                   error ("%qE has invalid type for %<reduction(%s)%>",
3852                          t, operator_name_info[r_code].name);
3853                   remove = true;
3854                 }
3855             }
3856           break;
3857
3858         case OMP_CLAUSE_COPYIN:
3859           if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
3860             {
3861               error ("%qE must be %<threadprivate%> for %<copyin%>", t);
3862               remove = true;
3863             }
3864           break;
3865
3866         default:
3867           break;
3868         }
3869
3870       if (need_complete_non_reference)
3871         {
3872           t = require_complete_type (t);
3873           if (t == error_mark_node)
3874             remove = true;
3875           else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
3876             {
3877               error ("%qE has reference type for %qs", t, name);
3878               remove = true;
3879             }
3880         }
3881       if (need_implicitly_determined)
3882         {
3883           const char *share_name = NULL;
3884
3885           if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
3886             share_name = "threadprivate";
3887           else switch (cxx_omp_predetermined_sharing (t))
3888             {
3889             case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
3890               break;
3891             case OMP_CLAUSE_DEFAULT_SHARED:
3892               share_name = "shared";
3893               break;
3894             case OMP_CLAUSE_DEFAULT_PRIVATE:
3895               share_name = "private";
3896               break;
3897             default:
3898               gcc_unreachable ();
3899             }
3900           if (share_name)
3901             {
3902               error ("%qE is predetermined %qs for %qs",
3903                      t, share_name, name);
3904               remove = true;
3905             }
3906         }
3907
3908       /* We're interested in the base element, not arrays.  */
3909       inner_type = type = TREE_TYPE (t);
3910       while (TREE_CODE (inner_type) == ARRAY_TYPE)
3911         inner_type = TREE_TYPE (inner_type);
3912
3913       /* Check for special function availability by building a call to one.
3914          Save the results, because later we won't be in the right context
3915          for making these queries.  */
3916       if (CLASS_TYPE_P (inner_type)
3917           && (need_default_ctor || need_copy_ctor || need_copy_assignment)
3918           && !type_dependent_expression_p (t)
3919           && cxx_omp_create_clause_info (c, inner_type, need_default_ctor,
3920                                          need_copy_ctor, need_copy_assignment))
3921         remove = true;
3922
3923       if (remove)
3924         *pc = OMP_CLAUSE_CHAIN (c);
3925       else
3926         pc = &OMP_CLAUSE_CHAIN (c);
3927     }
3928
3929   bitmap_obstack_release (NULL);
3930   return clauses;
3931 }
3932
3933 /* For all variables in the tree_list VARS, mark them as thread local.  */
3934
3935 void
3936 finish_omp_threadprivate (tree vars)
3937 {
3938   tree t;
3939
3940   /* Mark every variable in VARS to be assigned thread local storage.  */
3941   for (t = vars; t; t = TREE_CHAIN (t))
3942     {
3943       tree v = TREE_PURPOSE (t);
3944
3945       if (error_operand_p (v))
3946         ;
3947       else if (TREE_CODE (v) != VAR_DECL)
3948         error ("%<threadprivate%> %qD is not file, namespace "
3949                "or block scope variable", v);
3950       /* If V had already been marked threadprivate, it doesn't matter
3951          whether it had been used prior to this point.  */
3952       else if (TREE_USED (v)
3953           && (DECL_LANG_SPECIFIC (v) == NULL
3954               || !CP_DECL_THREADPRIVATE_P (v)))
3955         error ("%qE declared %<threadprivate%> after first use", v);
3956       else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
3957         error ("automatic variable %qE cannot be %<threadprivate%>", v);
3958       else if (! COMPLETE_TYPE_P (TREE_TYPE (v)))
3959         error ("%<threadprivate%> %qE has incomplete type", v);
3960       else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v))
3961                && CP_DECL_CONTEXT (v) != current_class_type)
3962         error ("%<threadprivate%> %qE directive not "
3963                "in %qT definition", v, CP_DECL_CONTEXT (v));
3964       else
3965         {
3966           /* Allocate a LANG_SPECIFIC structure for V, if needed.  */
3967           if (DECL_LANG_SPECIFIC (v) == NULL)
3968             {
3969               retrofit_lang_decl (v);
3970
3971               /* Make sure that DECL_DISCRIMINATOR_P continues to be true
3972                  after the allocation of the lang_decl structure.  */
3973               if (DECL_DISCRIMINATOR_P (v))
3974                 DECL_LANG_SPECIFIC (v)->u.base.u2sel = 1;
3975             }
3976
3977           if (! DECL_THREAD_LOCAL_P (v))
3978             {
3979               DECL_TLS_MODEL (v) = decl_default_tls_model (v);
3980               /* If rtl has been already set for this var, call
3981                  make_decl_rtl once again, so that encode_section_info
3982                  has a chance to look at the new decl flags.  */
3983               if (DECL_RTL_SET_P (v))
3984                 make_decl_rtl (v);
3985             }
3986           CP_DECL_THREADPRIVATE_P (v) = 1;
3987         }
3988     }
3989 }
3990
3991 /* Build an OpenMP structured block.  */
3992
3993 tree
3994 begin_omp_structured_block (void)
3995 {
3996   return do_pushlevel (sk_omp);
3997 }
3998
3999 tree
4000 finish_omp_structured_block (tree block)
4001 {
4002   return do_poplevel (block);
4003 }
4004
4005 /* Similarly, except force the retention of the BLOCK.  */
4006
4007 tree
4008 begin_omp_parallel (void)
4009 {
4010   keep_next_level (true);
4011   return begin_omp_structured_block ();
4012 }
4013
4014 tree
4015 finish_omp_parallel (tree clauses, tree body)
4016 {
4017   tree stmt;
4018
4019   body = finish_omp_structured_block (body);
4020
4021   stmt = make_node (OMP_PARALLEL);
4022   TREE_TYPE (stmt) = void_type_node;
4023   OMP_PARALLEL_CLAUSES (stmt) = clauses;
4024   OMP_PARALLEL_BODY (stmt) = body;
4025
4026   return add_stmt (stmt);
4027 }
4028
4029 tree
4030 begin_omp_task (void)
4031 {
4032   keep_next_level (true);
4033   return begin_omp_structured_block ();
4034 }
4035
4036 tree
4037 finish_omp_task (tree clauses, tree body)
4038 {
4039   tree stmt;
4040
4041   body = finish_omp_structured_block (body);
4042
4043   stmt = make_node (OMP_TASK);
4044   TREE_TYPE (stmt) = void_type_node;
4045   OMP_TASK_CLAUSES (stmt) = clauses;
4046   OMP_TASK_BODY (stmt) = body;
4047
4048   return add_stmt (stmt);
4049 }
4050
4051 /* Helper function for finish_omp_for.  Convert Ith random access iterator
4052    into integral iterator.  Return FALSE if successful.  */
4053
4054 static bool
4055 handle_omp_for_class_iterator (int i, location_t locus, tree declv, tree initv,
4056                                tree condv, tree incrv, tree *body,
4057                                tree *pre_body, tree clauses)
4058 {
4059   tree diff, iter_init, iter_incr = NULL, last;
4060   tree incr_var = NULL, orig_pre_body, orig_body, c;
4061   tree decl = TREE_VEC_ELT (declv, i);
4062   tree init = TREE_VEC_ELT (initv, i);
4063   tree cond = TREE_VEC_ELT (condv, i);
4064   tree incr = TREE_VEC_ELT (incrv, i);
4065   tree iter = decl;
4066   location_t elocus = locus;
4067
4068   if (init && EXPR_HAS_LOCATION (init))
4069     elocus = EXPR_LOCATION (init);
4070
4071   switch (TREE_CODE (cond))
4072     {
4073     case GT_EXPR:
4074     case GE_EXPR:
4075     case LT_EXPR:
4076     case LE_EXPR:
4077       if (TREE_OPERAND (cond, 1) == iter)
4078         cond = build2 (swap_tree_comparison (TREE_CODE (cond)),
4079                        TREE_TYPE (cond), iter, TREE_OPERAND (cond, 0));
4080       if (TREE_OPERAND (cond, 0) != iter)
4081         cond = error_mark_node;
4082       else
4083         {
4084           tree tem = build_x_binary_op (TREE_CODE (cond), iter, ERROR_MARK,
4085                                         TREE_OPERAND (cond, 1), ERROR_MARK,
4086                                         NULL, tf_warning_or_error);
4087           if (error_operand_p (tem))
4088             return true;
4089         }
4090       break;
4091     default:
4092       cond = error_mark_node;
4093       break;
4094     }
4095   if (cond == error_mark_node)
4096     {
4097       error_at (elocus, "invalid controlling predicate");
4098       return true;
4099     }
4100   diff = build_x_binary_op (MINUS_EXPR, TREE_OPERAND (cond, 1),
4101                             ERROR_MARK, iter, ERROR_MARK, NULL,
4102                             tf_warning_or_error);
4103   if (error_operand_p (diff))
4104     return true;
4105   if (TREE_CODE (TREE_TYPE (diff)) != INTEGER_TYPE)
4106     {
4107       error_at (elocus, "difference between %qE and %qD does not have integer type",
4108                 TREE_OPERAND (cond, 1), iter);
4109       return true;
4110     }
4111
4112   switch (TREE_CODE (incr))
4113     {
4114     case PREINCREMENT_EXPR:
4115     case PREDECREMENT_EXPR:
4116     case POSTINCREMENT_EXPR:
4117     case POSTDECREMENT_EXPR:
4118       if (TREE_OPERAND (incr, 0) != iter)
4119         {
4120           incr = error_mark_node;
4121           break;
4122         }
4123       iter_incr = build_x_unary_op (TREE_CODE (incr), iter,
4124                                     tf_warning_or_error);
4125       if (error_operand_p (iter_incr))
4126         return true;
4127       else if (TREE_CODE (incr) == PREINCREMENT_EXPR
4128                || TREE_CODE (incr) == POSTINCREMENT_EXPR)
4129         incr = integer_one_node;
4130       else
4131         incr = integer_minus_one_node;
4132       break;
4133     case MODIFY_EXPR:
4134       if (TREE_OPERAND (incr, 0) != iter)
4135         incr = error_mark_node;
4136       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
4137                || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
4138         {
4139           tree rhs = TREE_OPERAND (incr, 1);
4140           if (TREE_OPERAND (rhs, 0) == iter)
4141             {
4142               if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 1)))
4143                   != INTEGER_TYPE)
4144                 incr = error_mark_node;
4145               else
4146                 {
4147                   iter_incr = build_x_modify_expr (iter, TREE_CODE (rhs),
4148                                                    TREE_OPERAND (rhs, 1),
4149                                                    tf_warning_or_error);
4150                   if (error_operand_p (iter_incr))
4151                     return true;
4152                   incr = TREE_OPERAND (rhs, 1);
4153                   incr = cp_convert (TREE_TYPE (diff), incr);
4154                   if (TREE_CODE (rhs) == MINUS_EXPR)
4155                     {
4156                       incr = build1 (NEGATE_EXPR, TREE_TYPE (diff), incr);
4157                       incr = fold_if_not_in_template (incr);
4158                     }
4159                   if (TREE_CODE (incr) != INTEGER_CST
4160                       && (TREE_CODE (incr) != NOP_EXPR
4161                           || (TREE_CODE (TREE_OPERAND (incr, 0))
4162                               != INTEGER_CST)))
4163                     iter_incr = NULL;
4164                 }
4165             }
4166           else if (TREE_OPERAND (rhs, 1) == iter)
4167             {
4168               if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 0))) != INTEGER_TYPE
4169                   || TREE_CODE (rhs) != PLUS_EXPR)
4170                 incr = error_mark_node;
4171               else
4172                 {
4173                   iter_incr = build_x_binary_op (PLUS_EXPR,
4174                                                  TREE_OPERAND (rhs, 0),
4175                                                  ERROR_MARK, iter,
4176                                                  ERROR_MARK, NULL,
4177                                                  tf_warning_or_error);
4178                   if (error_operand_p (iter_incr))
4179                     return true;
4180                   iter_incr = build_x_modify_expr (iter, NOP_EXPR,
4181                                                    iter_incr,
4182                                                    tf_warning_or_error);
4183                   if (error_operand_p (iter_incr))
4184                     return true;
4185                   incr = TREE_OPERAND (rhs, 0);
4186                   iter_incr = NULL;
4187                 }
4188             }
4189           else
4190             incr = error_mark_node;
4191         }
4192       else
4193         incr = error_mark_node;
4194       break;
4195     default:
4196       incr = error_mark_node;
4197       break;
4198     }
4199
4200   if (incr == error_mark_node)
4201     {
4202       error_at (elocus, "invalid increment expression");
4203       return true;
4204     }
4205
4206   incr = cp_convert (TREE_TYPE (diff), incr);
4207   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
4208     if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
4209         && OMP_CLAUSE_DECL (c) == iter)
4210       break;
4211
4212   decl = create_temporary_var (TREE_TYPE (diff));
4213   pushdecl (decl);
4214   add_decl_expr (decl);
4215   last = create_temporary_var (TREE_TYPE (diff));
4216   pushdecl (last);
4217   add_decl_expr (last);
4218   if (c && iter_incr == NULL)
4219     {
4220       incr_var = create_temporary_var (TREE_TYPE (diff));
4221       pushdecl (incr_var);
4222       add_decl_expr (incr_var);
4223     }
4224   gcc_assert (stmts_are_full_exprs_p ());
4225
4226   orig_pre_body = *pre_body;
4227   *pre_body = push_stmt_list ();
4228   if (orig_pre_body)
4229     add_stmt (orig_pre_body);
4230   if (init != NULL)
4231     finish_expr_stmt (build_x_modify_expr (iter, NOP_EXPR, init,
4232                                            tf_warning_or_error));
4233   init = build_int_cst (TREE_TYPE (diff), 0);
4234   if (c && iter_incr == NULL)
4235     {
4236       finish_expr_stmt (build_x_modify_expr (incr_var, NOP_EXPR,
4237                                              incr, tf_warning_or_error));
4238       incr = incr_var;
4239       iter_incr = build_x_modify_expr (iter, PLUS_EXPR, incr,
4240                                        tf_warning_or_error);
4241     }
4242   finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, init,
4243                                          tf_warning_or_error));
4244   *pre_body = pop_stmt_list (*pre_body);
4245
4246   cond = cp_build_binary_op (elocus,
4247                              TREE_CODE (cond), decl, diff,
4248                              tf_warning_or_error);
4249   incr = build_modify_expr (elocus, decl, NULL_TREE, PLUS_EXPR,
4250                             elocus, incr, NULL_TREE);
4251
4252   orig_body = *body;
4253   *body = push_stmt_list ();
4254   iter_init = build2 (MINUS_EXPR, TREE_TYPE (diff), decl, last);
4255   iter_init = build_x_modify_expr (iter, PLUS_EXPR, iter_init,
4256                                    tf_warning_or_error);
4257   iter_init = build1 (NOP_EXPR, void_type_node, iter_init);
4258   finish_expr_stmt (iter_init);
4259   finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, decl,
4260                                          tf_warning_or_error));
4261   add_stmt (orig_body);
4262   *body = pop_stmt_list (*body);
4263
4264   if (c)
4265     {
4266       OMP_CLAUSE_LASTPRIVATE_STMT (c) = push_stmt_list ();
4267       finish_expr_stmt (iter_incr);
4268       OMP_CLAUSE_LASTPRIVATE_STMT (c)
4269         = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (c));
4270     }
4271
4272   TREE_VEC_ELT (declv, i) = decl;
4273   TREE_VEC_ELT (initv, i) = init;
4274   TREE_VEC_ELT (condv, i) = cond;
4275   TREE_VEC_ELT (incrv, i) = incr;
4276
4277   return false;
4278 }
4279
4280 /* Build and validate an OMP_FOR statement.  CLAUSES, BODY, COND, INCR
4281    are directly for their associated operands in the statement.  DECL
4282    and INIT are a combo; if DECL is NULL then INIT ought to be a
4283    MODIFY_EXPR, and the DECL should be extracted.  PRE_BODY are
4284    optional statements that need to go before the loop into its
4285    sk_omp scope.  */
4286
4287 tree
4288 finish_omp_for (location_t locus, tree declv, tree initv, tree condv,
4289                 tree incrv, tree body, tree pre_body, tree clauses)
4290 {
4291   tree omp_for = NULL, orig_incr = NULL;
4292   tree decl, init, cond, incr;
4293   location_t elocus;
4294   int i;
4295
4296   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (initv));
4297   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (condv));
4298   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (incrv));
4299   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4300     {
4301       decl = TREE_VEC_ELT (declv, i);
4302       init = TREE_VEC_ELT (initv, i);
4303       cond = TREE_VEC_ELT (condv, i);
4304       incr = TREE_VEC_ELT (incrv, i);
4305       elocus = locus;
4306
4307       if (decl == NULL)
4308         {
4309           if (init != NULL)
4310             switch (TREE_CODE (init))
4311               {
4312               case MODIFY_EXPR:
4313                 decl = TREE_OPERAND (init, 0);
4314                 init = TREE_OPERAND (init, 1);
4315                 break;
4316               case MODOP_EXPR:
4317                 if (TREE_CODE (TREE_OPERAND (init, 1)) == NOP_EXPR)
4318                   {
4319                     decl = TREE_OPERAND (init, 0);
4320                     init = TREE_OPERAND (init, 2);
4321                   }
4322                 break;
4323               default:
4324                 break;
4325               }
4326
4327           if (decl == NULL)
4328             {
4329               error_at (locus,
4330                         "expected iteration declaration or initialization");
4331               return NULL;
4332             }
4333         }
4334
4335       if (init && EXPR_HAS_LOCATION (init))
4336         elocus = EXPR_LOCATION (init);
4337
4338       if (cond == NULL)
4339         {
4340           error_at (elocus, "missing controlling predicate");
4341           return NULL;
4342         }
4343
4344       if (incr == NULL)
4345         {
4346           error_at (elocus, "missing increment expression");
4347           return NULL;
4348         }
4349
4350       TREE_VEC_ELT (declv, i) = decl;
4351       TREE_VEC_ELT (initv, i) = init;
4352     }
4353
4354   if (dependent_omp_for_p (declv, initv, condv, incrv))
4355     {
4356       tree stmt;
4357
4358       stmt = make_node (OMP_FOR);
4359
4360       for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4361         {
4362           /* This is really just a place-holder.  We'll be decomposing this
4363              again and going through the cp_build_modify_expr path below when
4364              we instantiate the thing.  */
4365           TREE_VEC_ELT (initv, i)
4366             = build2 (MODIFY_EXPR, void_type_node, TREE_VEC_ELT (declv, i),
4367                       TREE_VEC_ELT (initv, i));
4368         }
4369
4370       TREE_TYPE (stmt) = void_type_node;
4371       OMP_FOR_INIT (stmt) = initv;
4372       OMP_FOR_COND (stmt) = condv;
4373       OMP_FOR_INCR (stmt) = incrv;
4374       OMP_FOR_BODY (stmt) = body;
4375       OMP_FOR_PRE_BODY (stmt) = pre_body;
4376       OMP_FOR_CLAUSES (stmt) = clauses;
4377
4378       SET_EXPR_LOCATION (stmt, locus);
4379       return add_stmt (stmt);
4380     }
4381
4382   if (processing_template_decl)
4383     orig_incr = make_tree_vec (TREE_VEC_LENGTH (incrv));
4384
4385   for (i = 0; i < TREE_VEC_LENGTH (declv); )
4386     {
4387       decl = TREE_VEC_ELT (declv, i);
4388       init = TREE_VEC_ELT (initv, i);
4389       cond = TREE_VEC_ELT (condv, i);
4390       incr = TREE_VEC_ELT (incrv, i);
4391       if (orig_incr)
4392         TREE_VEC_ELT (orig_incr, i) = incr;
4393       elocus = locus;
4394
4395       if (init && EXPR_HAS_LOCATION (init))
4396         elocus = EXPR_LOCATION (init);
4397
4398       if (!DECL_P (decl))
4399         {
4400           error_at (elocus, "expected iteration declaration or initialization");
4401           return NULL;
4402         }
4403
4404       if (incr && TREE_CODE (incr) == MODOP_EXPR)
4405         {
4406           if (orig_incr)
4407             TREE_VEC_ELT (orig_incr, i) = incr;
4408           incr = cp_build_modify_expr (TREE_OPERAND (incr, 0),
4409                                        TREE_CODE (TREE_OPERAND (incr, 1)),
4410                                        TREE_OPERAND (incr, 2),
4411                                        tf_warning_or_error);
4412         }
4413
4414       if (CLASS_TYPE_P (TREE_TYPE (decl)))
4415         {
4416           if (handle_omp_for_class_iterator (i, locus, declv, initv, condv,
4417                                              incrv, &body, &pre_body, clauses))
4418             return NULL;
4419           continue;
4420         }
4421
4422       if (!INTEGRAL_TYPE_P (TREE_TYPE (decl))
4423           && TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
4424         {
4425           error_at (elocus, "invalid type for iteration variable %qE", decl);
4426           return NULL;
4427         }
4428
4429       if (!processing_template_decl)
4430         {
4431           init = fold_build_cleanup_point_expr (TREE_TYPE (init), init);
4432           init = cp_build_modify_expr (decl, NOP_EXPR, init, tf_warning_or_error);
4433         }
4434       else
4435         init = build2 (MODIFY_EXPR, void_type_node, decl, init);
4436       if (cond
4437           && TREE_SIDE_EFFECTS (cond)
4438           && COMPARISON_CLASS_P (cond)
4439           && !processing_template_decl)
4440         {
4441           tree t = TREE_OPERAND (cond, 0);
4442           if (TREE_SIDE_EFFECTS (t)
4443               && t != decl
4444               && (TREE_CODE (t) != NOP_EXPR
4445                   || TREE_OPERAND (t, 0) != decl))
4446             TREE_OPERAND (cond, 0)
4447               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4448
4449           t = TREE_OPERAND (cond, 1);
4450           if (TREE_SIDE_EFFECTS (t)
4451               && t != decl
4452               && (TREE_CODE (t) != NOP_EXPR
4453                   || TREE_OPERAND (t, 0) != decl))
4454             TREE_OPERAND (cond, 1)
4455               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4456         }
4457       if (decl == error_mark_node || init == error_mark_node)
4458         return NULL;
4459
4460       TREE_VEC_ELT (declv, i) = decl;
4461       TREE_VEC_ELT (initv, i) = init;
4462       TREE_VEC_ELT (condv, i) = cond;
4463       TREE_VEC_ELT (incrv, i) = incr;
4464       i++;
4465     }
4466
4467   if (IS_EMPTY_STMT (pre_body))
4468     pre_body = NULL;
4469
4470   omp_for = c_finish_omp_for (locus, declv, initv, condv, incrv,
4471                               body, pre_body);
4472
4473   if (omp_for == NULL)
4474     return NULL;
4475
4476   for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INCR (omp_for)); i++)
4477     {
4478       decl = TREE_OPERAND (TREE_VEC_ELT (OMP_FOR_INIT (omp_for), i), 0);
4479       incr = TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i);
4480
4481       if (TREE_CODE (incr) != MODIFY_EXPR)
4482         continue;
4483
4484       if (TREE_SIDE_EFFECTS (TREE_OPERAND (incr, 1))
4485           && BINARY_CLASS_P (TREE_OPERAND (incr, 1))
4486           && !processing_template_decl)
4487         {
4488           tree t = TREE_OPERAND (TREE_OPERAND (incr, 1), 0);
4489           if (TREE_SIDE_EFFECTS (t)
4490               && t != decl
4491               && (TREE_CODE (t) != NOP_EXPR
4492                   || TREE_OPERAND (t, 0) != decl))
4493             TREE_OPERAND (TREE_OPERAND (incr, 1), 0)
4494               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4495
4496           t = TREE_OPERAND (TREE_OPERAND (incr, 1), 1);
4497           if (TREE_SIDE_EFFECTS (t)
4498               && t != decl
4499               && (TREE_CODE (t) != NOP_EXPR
4500                   || TREE_OPERAND (t, 0) != decl))
4501             TREE_OPERAND (TREE_OPERAND (incr, 1), 1)
4502               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4503         }
4504
4505       if (orig_incr)
4506         TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i) = TREE_VEC_ELT (orig_incr, i);
4507     }
4508   if (omp_for != NULL)
4509     OMP_FOR_CLAUSES (omp_for) = clauses;
4510   return omp_for;
4511 }
4512
4513 void
4514 finish_omp_atomic (enum tree_code code, tree lhs, tree rhs)
4515 {
4516   tree orig_lhs;
4517   tree orig_rhs;
4518   bool dependent_p;
4519   tree stmt;
4520
4521   orig_lhs = lhs;
4522   orig_rhs = rhs;
4523   dependent_p = false;
4524   stmt = NULL_TREE;
4525
4526   /* Even in a template, we can detect invalid uses of the atomic
4527      pragma if neither LHS nor RHS is type-dependent.  */
4528   if (processing_template_decl)
4529     {
4530       dependent_p = (type_dependent_expression_p (lhs)
4531                      || type_dependent_expression_p (rhs));
4532       if (!dependent_p)
4533         {
4534           lhs = build_non_dependent_expr (lhs);
4535           rhs = build_non_dependent_expr (rhs);
4536         }
4537     }
4538   if (!dependent_p)
4539     {
4540       stmt = c_finish_omp_atomic (input_location, code, lhs, rhs);
4541       if (stmt == error_mark_node)
4542         return;
4543     }
4544   if (processing_template_decl)
4545     stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node,
4546                    build2 (code, void_type_node, orig_lhs, orig_rhs));
4547   add_stmt (stmt);
4548 }
4549
4550 void
4551 finish_omp_barrier (void)
4552 {
4553   tree fn = built_in_decls[BUILT_IN_GOMP_BARRIER];
4554   VEC(tree,gc) *vec = make_tree_vector ();
4555   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4556   release_tree_vector (vec);
4557   finish_expr_stmt (stmt);
4558 }
4559
4560 void
4561 finish_omp_flush (void)
4562 {
4563   tree fn = built_in_decls[BUILT_IN_SYNCHRONIZE];
4564   VEC(tree,gc) *vec = make_tree_vector ();
4565   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4566   release_tree_vector (vec);
4567   finish_expr_stmt (stmt);
4568 }
4569
4570 void
4571 finish_omp_taskwait (void)
4572 {
4573   tree fn = built_in_decls[BUILT_IN_GOMP_TASKWAIT];
4574   VEC(tree,gc) *vec = make_tree_vector ();
4575   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4576   release_tree_vector (vec);
4577   finish_expr_stmt (stmt);
4578 }
4579 \f
4580 void
4581 init_cp_semantics (void)
4582 {
4583 }
4584 \f
4585 /* Build a STATIC_ASSERT for a static assertion with the condition
4586    CONDITION and the message text MESSAGE.  LOCATION is the location
4587    of the static assertion in the source code.  When MEMBER_P, this
4588    static assertion is a member of a class.  */
4589 void 
4590 finish_static_assert (tree condition, tree message, location_t location, 
4591                       bool member_p)
4592 {
4593   if (check_for_bare_parameter_packs (condition))
4594     condition = error_mark_node;
4595
4596   if (type_dependent_expression_p (condition) 
4597       || value_dependent_expression_p (condition))
4598     {
4599       /* We're in a template; build a STATIC_ASSERT and put it in
4600          the right place. */
4601       tree assertion;
4602
4603       assertion = make_node (STATIC_ASSERT);
4604       STATIC_ASSERT_CONDITION (assertion) = condition;
4605       STATIC_ASSERT_MESSAGE (assertion) = message;
4606       STATIC_ASSERT_SOURCE_LOCATION (assertion) = location;
4607
4608       if (member_p)
4609         maybe_add_class_template_decl_list (current_class_type, 
4610                                             assertion,
4611                                             /*friend_p=*/0);
4612       else
4613         add_stmt (assertion);
4614
4615       return;
4616     }
4617
4618   /* Fold the expression and convert it to a boolean value. */
4619   condition = fold_non_dependent_expr (condition);
4620   condition = cp_convert (boolean_type_node, condition);
4621
4622   if (TREE_CODE (condition) == INTEGER_CST && !integer_zerop (condition))
4623     /* Do nothing; the condition is satisfied. */
4624     ;
4625   else 
4626     {
4627       location_t saved_loc = input_location;
4628
4629       input_location = location;
4630       if (TREE_CODE (condition) == INTEGER_CST 
4631           && integer_zerop (condition))
4632         /* Report the error. */
4633         error ("static assertion failed: %E", message);
4634       else if (condition && condition != error_mark_node)
4635         error ("non-constant condition for static assertion");
4636       input_location = saved_loc;
4637     }
4638 }
4639 \f
4640 /* Returns decltype((EXPR)) for cases where we can drop the decltype and
4641    just return the type even though EXPR is a type-dependent expression.
4642    The ABI specifies which cases this applies to, which is a subset of the
4643    possible cases.  */
4644
4645 tree
4646 describable_type (tree expr)
4647 {
4648   tree type = NULL_TREE;
4649
4650   if (! type_dependent_expression_p (expr)
4651       && ! type_unknown_p (expr))
4652     {
4653       type = unlowered_expr_type (expr);
4654       if (real_lvalue_p (expr))
4655         type = build_reference_type (type);
4656     }
4657
4658   if (type)
4659     return type;
4660
4661   switch (TREE_CODE (expr))
4662     {
4663     case VAR_DECL:
4664     case PARM_DECL:
4665     case RESULT_DECL:
4666     case FUNCTION_DECL:
4667       /* Named rvalue reference becomes lvalue.  */
4668       type = build_reference_type (non_reference (TREE_TYPE (expr)));
4669       break;
4670
4671     case NEW_EXPR:
4672     case CONST_DECL:
4673     case TEMPLATE_PARM_INDEX:
4674     case CAST_EXPR:
4675     case STATIC_CAST_EXPR:
4676     case REINTERPRET_CAST_EXPR:
4677     case CONST_CAST_EXPR:
4678     case DYNAMIC_CAST_EXPR:
4679       type = TREE_TYPE (expr);
4680       break;
4681
4682     case INDIRECT_REF:
4683       {
4684         tree ptrtype = describable_type (TREE_OPERAND (expr, 0));
4685         if (ptrtype && POINTER_TYPE_P (ptrtype))
4686           type = build_reference_type (TREE_TYPE (ptrtype));
4687       }
4688       break;
4689
4690     default:
4691       if (TREE_CODE_CLASS (TREE_CODE (expr)) == tcc_constant)
4692         type = TREE_TYPE (expr);
4693       break;
4694     }
4695
4696   if (type && type_uses_auto (type))
4697     return NULL_TREE;
4698   else
4699     return type;
4700 }
4701
4702 /* Implements the C++0x decltype keyword. Returns the type of EXPR,
4703    suitable for use as a type-specifier.
4704
4705    ID_EXPRESSION_OR_MEMBER_ACCESS_P is true when EXPR was parsed as an
4706    id-expression or a class member access, FALSE when it was parsed as
4707    a full expression.  */
4708
4709 tree
4710 finish_decltype_type (tree expr, bool id_expression_or_member_access_p)
4711 {
4712   tree orig_expr = expr;
4713   tree type = NULL_TREE;
4714
4715   if (!expr || error_operand_p (expr))
4716     return error_mark_node;
4717
4718   if (TYPE_P (expr)
4719       || TREE_CODE (expr) == TYPE_DECL
4720       || (TREE_CODE (expr) == BIT_NOT_EXPR
4721           && TYPE_P (TREE_OPERAND (expr, 0))))
4722     {
4723       error ("argument to decltype must be an expression");
4724       return error_mark_node;
4725     }
4726
4727   if (type_dependent_expression_p (expr))
4728     {
4729       if (id_expression_or_member_access_p)
4730         {
4731           switch (TREE_CODE (expr))
4732             {
4733             case VAR_DECL:
4734             case PARM_DECL:
4735             case RESULT_DECL:
4736             case FUNCTION_DECL:
4737             case CONST_DECL:
4738             case TEMPLATE_PARM_INDEX:
4739               type = TREE_TYPE (expr);
4740               break;
4741
4742             default:
4743               break;
4744             }
4745         }
4746
4747       if (type && !type_uses_auto (type))
4748         return type;
4749
4750       type = cxx_make_type (DECLTYPE_TYPE);
4751       DECLTYPE_TYPE_EXPR (type) = expr;
4752       DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type)
4753         = id_expression_or_member_access_p;
4754       SET_TYPE_STRUCTURAL_EQUALITY (type);
4755
4756       return type;
4757     }
4758
4759   /* The type denoted by decltype(e) is defined as follows:  */
4760
4761   expr = resolve_nondeduced_context (expr);
4762   if (id_expression_or_member_access_p)
4763     {
4764       /* If e is an id-expression or a class member access (5.2.5
4765          [expr.ref]), decltype(e) is defined as the type of the entity
4766          named by e. If there is no such entity, or e names a set of
4767          overloaded functions, the program is ill-formed.  */
4768       if (TREE_CODE (expr) == IDENTIFIER_NODE)
4769         expr = lookup_name (expr);
4770
4771       if (TREE_CODE (expr) == INDIRECT_REF)
4772         /* This can happen when the expression is, e.g., "a.b". Just
4773            look at the underlying operand.  */
4774         expr = TREE_OPERAND (expr, 0);
4775
4776       if (TREE_CODE (expr) == OFFSET_REF
4777           || TREE_CODE (expr) == MEMBER_REF)
4778         /* We're only interested in the field itself. If it is a
4779            BASELINK, we will need to see through it in the next
4780            step.  */
4781         expr = TREE_OPERAND (expr, 1);
4782
4783       if (TREE_CODE (expr) == BASELINK)
4784         /* See through BASELINK nodes to the underlying functions.  */
4785         expr = BASELINK_FUNCTIONS (expr);
4786
4787       if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
4788         expr = TREE_OPERAND (expr, 0);
4789
4790       if (TREE_CODE (expr) == OVERLOAD)
4791         {
4792           if (OVL_CHAIN (expr)
4793               || TREE_CODE (OVL_FUNCTION (expr)) == TEMPLATE_DECL)
4794             {
4795               error ("%qE refers to a set of overloaded functions", orig_expr);
4796               return error_mark_node;
4797             }
4798           else
4799             /* An overload set containing only one function: just look
4800                at that function.  */
4801             expr = OVL_FUNCTION (expr);
4802         }
4803
4804       switch (TREE_CODE (expr))
4805         {
4806         case FIELD_DECL:
4807           if (DECL_BIT_FIELD_TYPE (expr))
4808             {
4809               type = DECL_BIT_FIELD_TYPE (expr);
4810               break;
4811             }
4812           /* Fall through for fields that aren't bitfields.  */
4813
4814         case FUNCTION_DECL:
4815         case VAR_DECL:
4816         case CONST_DECL:
4817         case PARM_DECL:
4818         case RESULT_DECL:
4819         case TEMPLATE_PARM_INDEX:
4820           type = TREE_TYPE (expr);
4821           break;
4822
4823         case ERROR_MARK:
4824           type = error_mark_node;
4825           break;
4826
4827         case COMPONENT_REF:
4828           type = is_bitfield_expr_with_lowered_type (expr);
4829           if (!type)
4830             type = TREE_TYPE (TREE_OPERAND (expr, 1));
4831           break;
4832
4833         case BIT_FIELD_REF:
4834           gcc_unreachable ();
4835
4836         case INTEGER_CST:
4837           /* We can get here when the id-expression refers to an
4838              enumerator.  */
4839           type = TREE_TYPE (expr);
4840           break;
4841
4842         default:
4843           gcc_assert (TYPE_P (expr) || DECL_P (expr)
4844                       || TREE_CODE (expr) == SCOPE_REF);
4845           error ("argument to decltype must be an expression");
4846           return error_mark_node;
4847         }
4848     }
4849   else
4850     {
4851       /* Expressions of reference type are sometimes wrapped in
4852          INDIRECT_REFs.  INDIRECT_REFs are just internal compiler
4853          representation, not part of the language, so we have to look
4854          through them.  */
4855       if (TREE_CODE (expr) == INDIRECT_REF
4856           && TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0)))
4857           == REFERENCE_TYPE)
4858         expr = TREE_OPERAND (expr, 0);
4859
4860       if (TREE_CODE (expr) == CALL_EXPR)
4861         {
4862           /* If e is a function call (5.2.2 [expr.call]) or an
4863            invocation of an overloaded operator (parentheses around e
4864            are ignored), decltype(e) is defined as the return type of
4865            that function.  */
4866           tree fndecl = get_callee_fndecl (expr);
4867           if (fndecl && fndecl != error_mark_node)
4868             type = TREE_TYPE (TREE_TYPE (fndecl));
4869           else 
4870             {
4871               tree target_type = TREE_TYPE (CALL_EXPR_FN (expr));
4872               if ((TREE_CODE (target_type) == REFERENCE_TYPE
4873                    || TREE_CODE (target_type) == POINTER_TYPE)
4874                   && (TREE_CODE (TREE_TYPE (target_type)) == FUNCTION_TYPE
4875                       || TREE_CODE (TREE_TYPE (target_type)) == METHOD_TYPE))
4876                 type = TREE_TYPE (TREE_TYPE (target_type));
4877               else
4878                 sorry ("unable to determine the declared type of expression %<%E%>",
4879                        expr);
4880             }
4881         }
4882       else 
4883         {
4884           type = is_bitfield_expr_with_lowered_type (expr);
4885           if (type)
4886             {
4887               /* Bitfields are special, because their type encodes the
4888                  number of bits they store.  If the expression referenced a
4889                  bitfield, TYPE now has the declared type of that
4890                  bitfield.  */
4891               type = cp_build_qualified_type (type, 
4892                                               cp_type_quals (TREE_TYPE (expr)));
4893               
4894               if (real_lvalue_p (expr))
4895                 type = build_reference_type (type);
4896             }
4897           /* Within a lambda-expression:
4898
4899              Every occurrence of decltype((x)) where x is a possibly
4900              parenthesized id-expression that names an entity of
4901              automatic storage duration is treated as if x were
4902              transformed into an access to a corresponding data member
4903              of the closure type that would have been declared if x
4904              were a use of the denoted entity.  */
4905           else if (outer_automatic_var_p (expr)
4906                    && current_function_decl
4907                    && LAMBDA_FUNCTION_P (current_function_decl))
4908             type = capture_decltype (expr);
4909           else
4910             {
4911               /* Otherwise, where T is the type of e, if e is an lvalue,
4912                  decltype(e) is defined as T&, otherwise decltype(e) is
4913                  defined as T.  */
4914               type = TREE_TYPE (expr);
4915               if (type == error_mark_node)
4916                 return error_mark_node;
4917               else if (expr == current_class_ptr)
4918                 /* If the expression is just "this", we want the
4919                    cv-unqualified pointer for the "this" type.  */
4920                 type = TYPE_MAIN_VARIANT (type);
4921               else if (real_lvalue_p (expr))
4922                 {
4923                   if (TREE_CODE (type) != REFERENCE_TYPE)
4924                     type = build_reference_type (type);
4925                 }
4926               else
4927                 type = non_reference (type);
4928             }
4929         }
4930     }
4931
4932   if (!type || type == unknown_type_node)
4933     {
4934       error ("type of %qE is unknown", expr);
4935       return error_mark_node;
4936     }
4937
4938   return type;
4939 }
4940
4941 /* Called from trait_expr_value to evaluate either __has_nothrow_assign or 
4942    __has_nothrow_copy, depending on assign_p.  */
4943
4944 static bool
4945 classtype_has_nothrow_assign_or_copy_p (tree type, bool assign_p)
4946 {
4947   tree fns;
4948
4949   if (assign_p)
4950     {
4951       int ix;
4952       ix = lookup_fnfields_1 (type, ansi_assopname (NOP_EXPR));
4953       if (ix < 0)
4954         return false;
4955       fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), ix);
4956     } 
4957   else if (TYPE_HAS_INIT_REF (type))
4958     {
4959       /* If construction of the copy constructor was postponed, create
4960          it now.  */
4961       if (CLASSTYPE_LAZY_COPY_CTOR (type))
4962         lazily_declare_fn (sfk_copy_constructor, type);
4963       if (CLASSTYPE_LAZY_MOVE_CTOR (type))
4964         lazily_declare_fn (sfk_move_constructor, type);
4965       fns = CLASSTYPE_CONSTRUCTORS (type);
4966     }
4967   else
4968     return false;
4969
4970   for (; fns; fns = OVL_NEXT (fns))
4971     {
4972       tree fn = OVL_CURRENT (fns);
4973  
4974       if (assign_p)
4975         {
4976           if (copy_fn_p (fn) == 0)
4977             continue;
4978         }
4979       else if (copy_fn_p (fn) <= 0)
4980         continue;
4981
4982       if (!TYPE_NOTHROW_P (TREE_TYPE (fn)))
4983         return false;
4984     }
4985
4986   return true;
4987 }
4988
4989 /* Actually evaluates the trait.  */
4990
4991 static bool
4992 trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
4993 {
4994   enum tree_code type_code1;
4995   tree t;
4996
4997   type_code1 = TREE_CODE (type1);
4998
4999   switch (kind)
5000     {
5001     case CPTK_HAS_NOTHROW_ASSIGN:
5002       type1 = strip_array_types (type1);
5003       return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5004               && (trait_expr_value (CPTK_HAS_TRIVIAL_ASSIGN, type1, type2)
5005                   || (CLASS_TYPE_P (type1)
5006                       && classtype_has_nothrow_assign_or_copy_p (type1,
5007                                                                  true))));
5008
5009     case CPTK_HAS_TRIVIAL_ASSIGN:
5010       /* ??? The standard seems to be missing the "or array of such a class
5011          type" wording for this trait.  */
5012       type1 = strip_array_types (type1);
5013       return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5014               && (trivial_type_p (type1)
5015                     || (CLASS_TYPE_P (type1)
5016                         && TYPE_HAS_TRIVIAL_ASSIGN_REF (type1))));
5017
5018     case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5019       type1 = strip_array_types (type1);
5020       return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2) 
5021               || (CLASS_TYPE_P (type1)
5022                   && (t = locate_ctor (type1, NULL))
5023                   && TYPE_NOTHROW_P (TREE_TYPE (t))));
5024
5025     case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5026       type1 = strip_array_types (type1);
5027       return (trivial_type_p (type1)
5028               || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_DFLT (type1)));
5029
5030     case CPTK_HAS_NOTHROW_COPY:
5031       type1 = strip_array_types (type1);
5032       return (trait_expr_value (CPTK_HAS_TRIVIAL_COPY, type1, type2)
5033               || (CLASS_TYPE_P (type1)
5034                   && classtype_has_nothrow_assign_or_copy_p (type1, false)));
5035
5036     case CPTK_HAS_TRIVIAL_COPY:
5037       /* ??? The standard seems to be missing the "or array of such a class
5038          type" wording for this trait.  */
5039       type1 = strip_array_types (type1);
5040       return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5041               || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_INIT_REF (type1)));
5042
5043     case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5044       type1 = strip_array_types (type1);
5045       return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5046               || (CLASS_TYPE_P (type1)
5047                   && TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
5048
5049     case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5050       return (CLASS_TYPE_P (type1)
5051               && (t = locate_dtor (type1, NULL)) && DECL_VIRTUAL_P (t));
5052
5053     case CPTK_IS_ABSTRACT:
5054       return (CLASS_TYPE_P (type1) && CLASSTYPE_PURE_VIRTUALS (type1));
5055
5056     case CPTK_IS_BASE_OF:
5057       return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5058               && DERIVED_FROM_P (type1, type2));
5059
5060     case CPTK_IS_CLASS:
5061       return (NON_UNION_CLASS_TYPE_P (type1));
5062
5063     case CPTK_IS_CONVERTIBLE_TO:
5064       /* TODO  */
5065       return false;
5066
5067     case CPTK_IS_EMPTY:
5068       return (NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1));
5069
5070     case CPTK_IS_ENUM:
5071       return (type_code1 == ENUMERAL_TYPE);
5072
5073     case CPTK_IS_POD:
5074       return (pod_type_p (type1));
5075
5076     case CPTK_IS_POLYMORPHIC:
5077       return (CLASS_TYPE_P (type1) && TYPE_POLYMORPHIC_P (type1));
5078
5079     case CPTK_IS_STD_LAYOUT:
5080       return (std_layout_type_p (type1));
5081
5082     case CPTK_IS_TRIVIAL:
5083       return (trivial_type_p (type1));
5084
5085     case CPTK_IS_UNION:
5086       return (type_code1 == UNION_TYPE);
5087
5088     default:
5089       gcc_unreachable ();
5090       return false;
5091     }
5092 }
5093
5094 /* Returns true if TYPE is a complete type, an array of unknown bound,
5095    or (possibly cv-qualified) void, returns false otherwise.  */
5096
5097 static bool
5098 check_trait_type (tree type)
5099 {
5100   if (COMPLETE_TYPE_P (type))
5101     return true;
5102
5103   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
5104     return true;
5105
5106   if (VOID_TYPE_P (type))
5107     return true;
5108
5109   return false;
5110 }
5111
5112 /* Process a trait expression.  */
5113
5114 tree
5115 finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
5116 {
5117   gcc_assert (kind == CPTK_HAS_NOTHROW_ASSIGN
5118               || kind == CPTK_HAS_NOTHROW_CONSTRUCTOR
5119               || kind == CPTK_HAS_NOTHROW_COPY
5120               || kind == CPTK_HAS_TRIVIAL_ASSIGN
5121               || kind == CPTK_HAS_TRIVIAL_CONSTRUCTOR
5122               || kind == CPTK_HAS_TRIVIAL_COPY
5123               || kind == CPTK_HAS_TRIVIAL_DESTRUCTOR
5124               || kind == CPTK_HAS_VIRTUAL_DESTRUCTOR          
5125               || kind == CPTK_IS_ABSTRACT
5126               || kind == CPTK_IS_BASE_OF
5127               || kind == CPTK_IS_CLASS
5128               || kind == CPTK_IS_CONVERTIBLE_TO
5129               || kind == CPTK_IS_EMPTY
5130               || kind == CPTK_IS_ENUM
5131               || kind == CPTK_IS_POD
5132               || kind == CPTK_IS_POLYMORPHIC
5133               || kind == CPTK_IS_STD_LAYOUT
5134               || kind == CPTK_IS_TRIVIAL
5135               || kind == CPTK_IS_UNION);
5136
5137   if (kind == CPTK_IS_CONVERTIBLE_TO)
5138     {
5139       sorry ("__is_convertible_to");
5140       return error_mark_node;
5141     }
5142
5143   if (type1 == error_mark_node
5144       || ((kind == CPTK_IS_BASE_OF || kind == CPTK_IS_CONVERTIBLE_TO)
5145           && type2 == error_mark_node))
5146     return error_mark_node;
5147
5148   if (processing_template_decl)
5149     {
5150       tree trait_expr = make_node (TRAIT_EXPR);
5151       TREE_TYPE (trait_expr) = boolean_type_node;
5152       TRAIT_EXPR_TYPE1 (trait_expr) = type1;
5153       TRAIT_EXPR_TYPE2 (trait_expr) = type2;
5154       TRAIT_EXPR_KIND (trait_expr) = kind;
5155       return trait_expr;
5156     }
5157
5158   complete_type (type1);
5159   if (type2)
5160     complete_type (type2);
5161
5162   switch (kind)
5163     {
5164     case CPTK_HAS_NOTHROW_ASSIGN:
5165     case CPTK_HAS_TRIVIAL_ASSIGN:
5166     case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5167     case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5168     case CPTK_HAS_NOTHROW_COPY:
5169     case CPTK_HAS_TRIVIAL_COPY:
5170     case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5171     case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5172     case CPTK_IS_ABSTRACT:
5173     case CPTK_IS_EMPTY:
5174     case CPTK_IS_POD:
5175     case CPTK_IS_POLYMORPHIC:
5176     case CPTK_IS_STD_LAYOUT:
5177     case CPTK_IS_TRIVIAL:
5178       if (!check_trait_type (type1))
5179         {
5180           error ("incomplete type %qT not allowed", type1);
5181           return error_mark_node;
5182         }
5183       break;
5184
5185     case CPTK_IS_BASE_OF:
5186       if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5187           && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
5188           && !COMPLETE_TYPE_P (type2))
5189         {
5190           error ("incomplete type %qT not allowed", type2);
5191           return error_mark_node;
5192         }
5193       break;
5194
5195     case CPTK_IS_CLASS:
5196     case CPTK_IS_ENUM:
5197     case CPTK_IS_UNION:
5198       break;
5199     
5200     case CPTK_IS_CONVERTIBLE_TO:
5201     default:
5202       gcc_unreachable ();
5203     }
5204
5205   return (trait_expr_value (kind, type1, type2)
5206           ? boolean_true_node : boolean_false_node);
5207 }
5208
5209 /* Do-nothing variants of functions to handle pragma FLOAT_CONST_DECIMAL64,
5210    which is ignored for C++.  */
5211
5212 void
5213 set_float_const_decimal64 (void)
5214 {
5215 }
5216
5217 void
5218 clear_float_const_decimal64 (void)
5219 {
5220 }
5221
5222 bool
5223 float_const_decimal64_p (void)
5224 {
5225   return 0;
5226 }
5227
5228 /* Return true if T is a literal type.   */
5229
5230 bool
5231 literal_type_p (tree t)
5232 {
5233   if (SCALAR_TYPE_P (t))
5234     return true;
5235   if (CLASS_TYPE_P (t))
5236     return CLASSTYPE_LITERAL_P (t);
5237   if (TREE_CODE (t) == ARRAY_TYPE)
5238     return literal_type_p (strip_array_types (t));
5239   return false;
5240 }
5241
5242
5243 /* If DECL is a variable declared `constexpr', require its type
5244    be literal.  Return the DECL if OK, otherwise NULL.  */
5245
5246 tree
5247 ensure_literal_type_for_constexpr_object (tree decl)
5248 {
5249   tree type = TREE_TYPE (decl);
5250   if (TREE_CODE (decl) == VAR_DECL && DECL_DECLARED_CONSTEXPR_P (decl)
5251       && !processing_template_decl && !literal_type_p (type))
5252     {
5253       error ("the type %qT of constexpr variable %qD is not literal",
5254              type, decl);
5255       return NULL;
5256     }
5257   return decl;
5258 }
5259
5260 /* Return non-null if FUN certainly designates a valid constexpr function
5261    declaration.  Otherwise return NULL.  Issue appropriate diagnostics
5262    if necessary.  Note that we only check the declaration, not the body
5263    of the function.  */
5264
5265 tree
5266 validate_constexpr_fundecl (tree fun)
5267 {
5268   tree rettype = NULL;
5269   tree parm = NULL;
5270
5271   /* Don't bother if FUN is not marked constexpr.  */
5272   if (!DECL_DECLARED_CONSTEXPR_P (fun))
5273     return NULL;
5274
5275   /* For a function template, we have absolutely no guarantee that all
5276      instantiations will be constexpr.  */
5277   if (TREE_CODE (fun) == TEMPLATE_DECL)
5278     return NULL;
5279   
5280   parm = FUNCTION_FIRST_USER_PARM (fun);
5281   for (; parm != NULL; parm = TREE_CHAIN (parm))
5282     {
5283       tree type = TREE_TYPE (parm);
5284       if (dependent_type_p (type))
5285         return NULL;
5286       if (!literal_type_p (type))
5287         {
5288            error ("parameter %q#D is not of literal type", parm);
5289           return NULL;
5290         }
5291     }
5292
5293   if (DECL_CONSTRUCTOR_P (fun))
5294     return fun;
5295
5296   rettype = TREE_TYPE (TREE_TYPE (fun));
5297   if (dependent_type_p (rettype))
5298     return NULL;
5299   if (!literal_type_p (rettype))
5300     {
5301       error ("return type %qT of function %qD is not a literal type",
5302              TREE_TYPE (TREE_TYPE (fun)), fun);
5303       return NULL;
5304     }
5305   return fun;
5306 }
5307
5308
5309 /* Constructor for a lambda expression.  */
5310
5311 tree
5312 build_lambda_expr (void)
5313 {
5314   tree lambda = make_node (LAMBDA_EXPR);
5315   LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) = CPLD_NONE;
5316   LAMBDA_EXPR_CAPTURE_LIST         (lambda) = NULL_TREE;
5317   LAMBDA_EXPR_THIS_CAPTURE         (lambda) = NULL_TREE;
5318   LAMBDA_EXPR_RETURN_TYPE          (lambda) = NULL_TREE;
5319   LAMBDA_EXPR_MUTABLE_P            (lambda) = false;
5320   return lambda;
5321 }
5322
5323 /* Create the closure object for a LAMBDA_EXPR.  */
5324
5325 tree
5326 build_lambda_object (tree lambda_expr)
5327 {
5328   /* Build aggregate constructor call.
5329      - cp_parser_braced_list
5330      - cp_parser_functional_cast  */
5331   VEC(constructor_elt,gc) *elts = NULL;
5332   tree node, expr, type;
5333   location_t saved_loc;
5334
5335   if (processing_template_decl)
5336     return lambda_expr;
5337
5338   /* Make sure any error messages refer to the lambda-introducer.  */
5339   saved_loc = input_location;
5340   input_location = LAMBDA_EXPR_LOCATION (lambda_expr);
5341
5342   for (node = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
5343        node;
5344        node = TREE_CHAIN (node))
5345     {
5346       tree field = TREE_PURPOSE (node);
5347       tree val = TREE_VALUE (node);
5348
5349       /* Mere mortals can't copy arrays with aggregate initialization, so
5350          do some magic to make it work here.  */
5351       if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
5352         val = build_array_copy (val);
5353       else if (DECL_NORMAL_CAPTURE_P (field)
5354                && TREE_CODE (TREE_TYPE (field)) != REFERENCE_TYPE)
5355         {
5356           /* "the entities that are captured by copy are used to
5357              direct-initialize each corresponding non-static data
5358              member of the resulting closure object."
5359
5360              There's normally no way to express direct-initialization
5361              from an element of a CONSTRUCTOR, so we build up a special
5362              TARGET_EXPR to bypass the usual copy-initialization.  */
5363           val = force_rvalue (val);
5364           if (TREE_CODE (val) == TARGET_EXPR)
5365             TARGET_EXPR_DIRECT_INIT_P (val) = true;
5366         }
5367
5368       CONSTRUCTOR_APPEND_ELT (elts, DECL_NAME (field), val);
5369     }
5370
5371   expr = build_constructor (init_list_type_node, elts);
5372   CONSTRUCTOR_IS_DIRECT_INIT (expr) = 1;
5373
5374   /* N2927: "[The closure] class type is not an aggregate."
5375      But we briefly treat it as an aggregate to make this simpler.  */
5376   type = TREE_TYPE (lambda_expr);
5377   CLASSTYPE_NON_AGGREGATE (type) = 0;
5378   expr = finish_compound_literal (type, expr);
5379   CLASSTYPE_NON_AGGREGATE (type) = 1;
5380
5381   input_location = saved_loc;
5382   return expr;
5383 }
5384
5385 /* Return an initialized RECORD_TYPE for LAMBDA.
5386    LAMBDA must have its explicit captures already.  */
5387
5388 tree
5389 begin_lambda_type (tree lambda)
5390 {
5391   tree type;
5392
5393   {
5394     /* Unique name.  This is just like an unnamed class, but we cannot use
5395        make_anon_name because of certain checks against TYPE_ANONYMOUS_P.  */
5396     tree name;
5397     name = make_lambda_name ();
5398
5399     /* Create the new RECORD_TYPE for this lambda.  */
5400     type = xref_tag (/*tag_code=*/record_type,
5401                      name,
5402                      /*scope=*/ts_within_enclosing_non_class,
5403                      /*template_header_p=*/false);
5404   }
5405
5406   /* Designate it as a struct so that we can use aggregate initialization.  */
5407   CLASSTYPE_DECLARED_CLASS (type) = false;
5408
5409   /* Clear base types.  */
5410   xref_basetypes (type, /*bases=*/NULL_TREE);
5411
5412   /* Start the class.  */
5413   type = begin_class_definition (type, /*attributes=*/NULL_TREE);
5414
5415   /* Cross-reference the expression and the type.  */
5416   TREE_TYPE (lambda) = type;
5417   CLASSTYPE_LAMBDA_EXPR (type) = lambda;
5418
5419   return type;
5420 }
5421
5422 /* Returns the type to use for the return type of the operator() of a
5423    closure class.  */
5424
5425 tree
5426 lambda_return_type (tree expr)
5427 {
5428   tree type;
5429   if (type_dependent_expression_p (expr))
5430     {
5431       type = cxx_make_type (DECLTYPE_TYPE);
5432       DECLTYPE_TYPE_EXPR (type) = expr;
5433       DECLTYPE_FOR_LAMBDA_RETURN (type) = true;
5434       SET_TYPE_STRUCTURAL_EQUALITY (type);
5435     }
5436   else
5437     type = type_decays_to (unlowered_expr_type (expr));
5438   return type;
5439 }
5440
5441 /* Given a LAMBDA_EXPR or closure type LAMBDA, return the op() of the
5442    closure type.  */
5443
5444 tree
5445 lambda_function (tree lambda)
5446 {
5447   tree type;
5448   if (TREE_CODE (lambda) == LAMBDA_EXPR)
5449     type = TREE_TYPE (lambda);
5450   else
5451     type = lambda;
5452   gcc_assert (LAMBDA_TYPE_P (type));
5453   /* Don't let debug_tree cause instantiation.  */
5454   if (CLASSTYPE_TEMPLATE_INSTANTIATION (type) && !COMPLETE_TYPE_P (type))
5455     return NULL_TREE;
5456   lambda = lookup_member (type, ansi_opname (CALL_EXPR),
5457                           /*protect=*/0, /*want_type=*/false);
5458   if (lambda)
5459     lambda = BASELINK_FUNCTIONS (lambda);
5460   return lambda;
5461 }
5462
5463 /* Returns the type to use for the FIELD_DECL corresponding to the
5464    capture of EXPR.
5465    The caller should add REFERENCE_TYPE for capture by reference.  */
5466
5467 tree
5468 lambda_capture_field_type (tree expr)
5469 {
5470   tree type;
5471   if (type_dependent_expression_p (expr))
5472     {
5473       type = cxx_make_type (DECLTYPE_TYPE);
5474       DECLTYPE_TYPE_EXPR (type) = expr;
5475       DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true;
5476       SET_TYPE_STRUCTURAL_EQUALITY (type);
5477     }
5478   else
5479     type = non_reference (unlowered_expr_type (expr));
5480   return type;
5481 }
5482
5483 /* Recompute the return type for LAMBDA with body of the form:
5484      { return EXPR ; }  */
5485
5486 void
5487 apply_lambda_return_type (tree lambda, tree return_type)
5488 {
5489   tree fco = lambda_function (lambda);
5490   tree result;
5491
5492   LAMBDA_EXPR_RETURN_TYPE (lambda) = return_type;
5493
5494   /* If we got a DECLTYPE_TYPE, don't stick it in the function yet,
5495      it would interfere with instantiating the closure type.  */
5496   if (dependent_type_p (return_type))
5497     return;
5498   if (return_type == error_mark_node)
5499     return;
5500
5501   /* TREE_TYPE (FUNCTION_DECL) == METHOD_TYPE
5502      TREE_TYPE (METHOD_TYPE)   == return-type  */
5503   TREE_TYPE (TREE_TYPE (fco)) = return_type;
5504
5505   result = DECL_RESULT (fco);
5506   if (result == NULL_TREE)
5507     return;
5508
5509   /* We already have a DECL_RESULT from start_preparsed_function.
5510      Now we need to redo the work it and allocate_struct_function
5511      did to reflect the new type.  */
5512   result = build_decl (input_location, RESULT_DECL, NULL_TREE,
5513                        TYPE_MAIN_VARIANT (return_type));
5514   DECL_ARTIFICIAL (result) = 1;
5515   DECL_IGNORED_P (result) = 1;
5516   cp_apply_type_quals_to_decl (cp_type_quals (return_type),
5517                                result);
5518
5519   DECL_RESULT (fco) = result;
5520
5521   if (!processing_template_decl && aggregate_value_p (result, fco))
5522     {
5523 #ifdef PCC_STATIC_STRUCT_RETURN
5524       cfun->returns_pcc_struct = 1;
5525 #endif
5526       cfun->returns_struct = 1;
5527     }
5528
5529 }
5530
5531 /* DECL is a local variable or parameter from the surrounding scope of a
5532    lambda-expression.  Returns the decltype for a use of the capture field
5533    for DECL even if it hasn't been captured yet.  */
5534
5535 static tree
5536 capture_decltype (tree decl)
5537 {
5538   tree lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
5539   /* FIXME do lookup instead of list walk? */
5540   tree cap = value_member (decl, LAMBDA_EXPR_CAPTURE_LIST (lam));
5541   tree type;
5542
5543   if (cap)
5544     type = TREE_TYPE (TREE_PURPOSE (cap));
5545   else
5546     switch (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam))
5547       {
5548       case CPLD_NONE:
5549         error ("%qD is not captured", decl);
5550         return error_mark_node;
5551
5552       case CPLD_COPY:
5553         type = TREE_TYPE (decl);
5554         if (TREE_CODE (type) == REFERENCE_TYPE
5555             && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
5556           type = TREE_TYPE (type);
5557         break;
5558
5559       case CPLD_REFERENCE:
5560         type = TREE_TYPE (decl);
5561         if (TREE_CODE (type) != REFERENCE_TYPE)
5562           type = build_reference_type (TREE_TYPE (decl));
5563         break;
5564
5565       default:
5566         gcc_unreachable ();
5567       }
5568
5569   if (TREE_CODE (type) != REFERENCE_TYPE)
5570     {
5571       if (!LAMBDA_EXPR_MUTABLE_P (lam))
5572         type = cp_build_qualified_type (type, (TYPE_QUALS (type)
5573                                                |TYPE_QUAL_CONST));
5574       type = build_reference_type (type);
5575     }
5576   return type;
5577 }
5578
5579 /* From an ID and INITIALIZER, create a capture (by reference if
5580    BY_REFERENCE_P is true), add it to the capture-list for LAMBDA,
5581    and return it.  */
5582
5583 tree
5584 add_capture (tree lambda, tree id, tree initializer, bool by_reference_p,
5585              bool explicit_init_p)
5586 {
5587   tree type;
5588   tree member;
5589
5590   type = lambda_capture_field_type (initializer);
5591   if (by_reference_p)
5592     {
5593       type = build_reference_type (type);
5594       if (!real_lvalue_p (initializer))
5595         error ("cannot capture %qE by reference", initializer);
5596     }
5597
5598   /* Make member variable.  */
5599   member = build_lang_decl (FIELD_DECL, id, type);
5600   if (!explicit_init_p)
5601     /* Normal captures are invisible to name lookup but uses are replaced
5602        with references to the capture field; we implement this by only
5603        really making them invisible in unevaluated context; see
5604        qualify_lookup.  For now, let's make explicitly initialized captures
5605        always visible.  */
5606     DECL_NORMAL_CAPTURE_P (member) = true;
5607
5608   /* Add it to the appropriate closure class.  */
5609   finish_member_declaration (member);
5610
5611   LAMBDA_EXPR_CAPTURE_LIST (lambda)
5612     = tree_cons (member, initializer, LAMBDA_EXPR_CAPTURE_LIST (lambda));
5613
5614   if (id == get_identifier ("__this"))
5615     {
5616       if (LAMBDA_EXPR_CAPTURES_THIS_P (lambda))
5617         error ("already captured %<this%> in lambda expression");
5618       LAMBDA_EXPR_THIS_CAPTURE (lambda) = member;
5619     }
5620
5621   return member;
5622 }
5623
5624 /* Given a FIELD_DECL decl belonging to a closure type, return a
5625    COMPONENT_REF of it relative to the 'this' parameter of the op() for
5626    that type.  */
5627
5628 static tree
5629 thisify_lambda_field (tree decl)
5630 {
5631   tree context = lambda_function (DECL_CONTEXT (decl));
5632   tree object = cp_build_indirect_ref (DECL_ARGUMENTS (context),
5633                                        /*errorstring*/"",
5634                                        tf_warning_or_error);
5635   return finish_non_static_data_member (decl, object,
5636                                         /*qualifying_scope*/NULL_TREE);
5637 }
5638
5639 /* Similar to add_capture, except this works on a stack of nested lambdas.
5640    BY_REFERENCE_P in this case is derived from the default capture mode.
5641    Returns the capture for the lambda at the bottom of the stack.  */
5642
5643 tree
5644 add_default_capture (tree lambda_stack, tree id, tree initializer)
5645 {
5646   bool this_capture_p = (id == get_identifier ("__this"));
5647
5648   tree member = NULL_TREE;
5649
5650   tree saved_class_type = current_class_type;
5651
5652   tree node;
5653
5654   for (node = lambda_stack;
5655        node;
5656        node = TREE_CHAIN (node))
5657     {
5658       tree lambda = TREE_VALUE (node);
5659
5660       current_class_type = TREE_TYPE (lambda);
5661       member = add_capture (lambda,
5662                             id,
5663                             initializer,
5664                             /*by_reference_p=*/
5665                             (!this_capture_p
5666                              && (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda)
5667                                  == CPLD_REFERENCE)),
5668                             /*explicit_init_p=*/false);
5669       initializer = thisify_lambda_field (member);
5670     }
5671
5672   current_class_type = saved_class_type;
5673
5674   return member;
5675 }
5676
5677 /* Return the capture pertaining to a use of 'this' in LAMBDA, in the form of an
5678    INDIRECT_REF, possibly adding it through default capturing.  */
5679
5680 tree
5681 lambda_expr_this_capture (tree lambda)
5682 {
5683   tree result;
5684
5685   tree this_capture = LAMBDA_EXPR_THIS_CAPTURE (lambda);
5686
5687   /* Try to default capture 'this' if we can.  */
5688   if (!this_capture
5689       && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE)
5690     {
5691       tree containing_function = TYPE_CONTEXT (TREE_TYPE (lambda));
5692       tree lambda_stack = tree_cons (NULL_TREE, lambda, NULL_TREE);
5693       tree init = NULL_TREE;
5694
5695       /* If we are in a lambda function, we can move out until we hit:
5696            1. a non-lambda function,
5697            2. a lambda function capturing 'this', or
5698            3. a non-default capturing lambda function.  */
5699       while (LAMBDA_FUNCTION_P (containing_function))
5700         {
5701           tree lambda
5702             = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (containing_function));
5703
5704           if (LAMBDA_EXPR_THIS_CAPTURE (lambda))
5705             {
5706               /* An outer lambda has already captured 'this'.  */
5707               tree cap = LAMBDA_EXPR_THIS_CAPTURE (lambda);
5708               init = thisify_lambda_field (cap);
5709               break;
5710             }
5711
5712           if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_NONE)
5713             /* An outer lambda won't let us capture 'this'.  */
5714             break;
5715
5716           lambda_stack = tree_cons (NULL_TREE,
5717                                     lambda,
5718                                     lambda_stack);
5719
5720           containing_function = decl_function_context (containing_function);
5721         }
5722
5723       if (!init && DECL_NONSTATIC_MEMBER_FUNCTION_P (containing_function)
5724           && !LAMBDA_FUNCTION_P (containing_function))
5725         /* First parameter is 'this'.  */
5726         init = DECL_ARGUMENTS (containing_function);
5727
5728       if (init)
5729         this_capture = add_default_capture (lambda_stack,
5730                                             /*id=*/get_identifier ("__this"),
5731                                             init);
5732     }
5733
5734   if (!this_capture)
5735     {
5736       error ("%<this%> was not captured for this lambda function");
5737       result = error_mark_node;
5738     }
5739   else
5740     {
5741       /* To make sure that current_class_ref is for the lambda.  */
5742       gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)) == TREE_TYPE (lambda));
5743
5744       result = finish_non_static_data_member (this_capture,
5745                                               current_class_ref,
5746                                               /*qualifying_scope=*/NULL_TREE);
5747
5748       /* If 'this' is captured, each use of 'this' is transformed into an
5749          access to the corresponding unnamed data member of the closure
5750          type cast (_expr.cast_ 5.4) to the type of 'this'. [ The cast
5751          ensures that the transformed expression is an rvalue. ] */
5752       result = rvalue (result);
5753     }
5754
5755   return result;
5756 }
5757
5758 /* If the closure TYPE has a static op(), also add a conversion to function
5759    pointer.  */
5760
5761 void
5762 maybe_add_lambda_conv_op (tree type)
5763 {
5764   bool nested = (current_function_decl != NULL_TREE);
5765   tree callop = lambda_function (type);
5766   tree rettype, name, fntype, fn, body, compound_stmt;
5767
5768   if (!DECL_STATIC_FUNCTION_P (callop))
5769     return;
5770
5771   rettype = build_pointer_type (TREE_TYPE (callop));
5772   name = mangle_conv_op_name_for_type (rettype);
5773   fntype = build_function_type (rettype, void_list_node);
5774   fn = build_lang_decl (FUNCTION_DECL, name, fntype);
5775   DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
5776
5777   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
5778       && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
5779     DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
5780
5781   SET_OVERLOADED_OPERATOR_CODE (fn, TYPE_EXPR);
5782   grokclassfn (type, fn, NO_SPECIAL);
5783   set_linkage_according_to_type (type, fn);
5784   rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
5785   DECL_IN_AGGR_P (fn) = 1;
5786   DECL_ARTIFICIAL (fn) = 1;
5787   DECL_NOT_REALLY_EXTERN (fn) = 1;
5788   DECL_DECLARED_INLINE_P (fn) = 1;
5789   DECL_STATIC_FUNCTION_P (fn) = 1;
5790
5791   add_method (type, fn, NULL_TREE);
5792
5793   if (nested)
5794     push_function_context ();
5795   start_preparsed_function (fn, NULL_TREE,
5796                             SF_PRE_PARSED | SF_INCLASS_INLINE);
5797   body = begin_function_body ();
5798   compound_stmt = begin_compound_stmt (0);
5799
5800   finish_return_stmt (decay_conversion (callop));
5801
5802   finish_compound_stmt (compound_stmt);
5803   finish_function_body (body);
5804
5805   expand_or_defer_fn (finish_function (2));
5806   if (nested)
5807     pop_function_context ();
5808 }
5809 #include "gt-cp-semantics.h"