OSDN Git Service

Correct conversion/overflow behavior.
[pf3gnuchains/gcc-fork.git] / gcc / cp / semantics.c
1 /* Perform the semantic phase of parsing, i.e., the process of
2    building tree structure, checking semantic consistency, and
3    building RTL.  These routines are used both during actual parsing
4    and during the instantiation of template functions.
5
6    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
7                  2008, 2009, 2010 Free Software Foundation, Inc.
8    Written by Mark Mitchell (mmitchell@usa.net) based on code found
9    formerly in parse.y and pt.c.
10
11    This file is part of GCC.
12
13    GCC is free software; you can redistribute it and/or modify it
14    under the terms of the GNU General Public License as published by
15    the Free Software Foundation; either version 3, or (at your option)
16    any later version.
17
18    GCC is distributed in the hope that it will be useful, but
19    WITHOUT ANY WARRANTY; without even the implied warranty of
20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21    General Public License for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with GCC; see the file COPYING3.  If not see
25 <http://www.gnu.org/licenses/>.  */
26
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include "tree.h"
32 #include "cp-tree.h"
33 #include "c-family/c-common.h"
34 #include "tree-inline.h"
35 #include "tree-mudflap.h"
36 #include "toplev.h"
37 #include "flags.h"
38 #include "output.h"
39 #include "timevar.h"
40 #include "diagnostic.h"
41 #include "cgraph.h"
42 #include "tree-iterator.h"
43 #include "vec.h"
44 #include "target.h"
45 #include "gimple.h"
46 #include "bitmap.h"
47
48 /* There routines provide a modular interface to perform many parsing
49    operations.  They may therefore be used during actual parsing, or
50    during template instantiation, which may be regarded as a
51    degenerate form of parsing.  */
52
53 static tree maybe_convert_cond (tree);
54 static tree finalize_nrv_r (tree *, int *, void *);
55 static tree capture_decltype (tree);
56 static tree thisify_lambda_field (tree);
57
58
59 /* Deferred Access Checking Overview
60    ---------------------------------
61
62    Most C++ expressions and declarations require access checking
63    to be performed during parsing.  However, in several cases,
64    this has to be treated differently.
65
66    For member declarations, access checking has to be deferred
67    until more information about the declaration is known.  For
68    example:
69
70      class A {
71          typedef int X;
72        public:
73          X f();
74      };
75
76      A::X A::f();
77      A::X g();
78
79    When we are parsing the function return type `A::X', we don't
80    really know if this is allowed until we parse the function name.
81
82    Furthermore, some contexts require that access checking is
83    never performed at all.  These include class heads, and template
84    instantiations.
85
86    Typical use of access checking functions is described here:
87
88    1. When we enter a context that requires certain access checking
89       mode, the function `push_deferring_access_checks' is called with
90       DEFERRING argument specifying the desired mode.  Access checking
91       may be performed immediately (dk_no_deferred), deferred
92       (dk_deferred), or not performed (dk_no_check).
93
94    2. When a declaration such as a type, or a variable, is encountered,
95       the function `perform_or_defer_access_check' is called.  It
96       maintains a VEC of all deferred checks.
97
98    3. The global `current_class_type' or `current_function_decl' is then
99       setup by the parser.  `enforce_access' relies on these information
100       to check access.
101
102    4. Upon exiting the context mentioned in step 1,
103       `perform_deferred_access_checks' is called to check all declaration
104       stored in the VEC. `pop_deferring_access_checks' is then
105       called to restore the previous access checking mode.
106
107       In case of parsing error, we simply call `pop_deferring_access_checks'
108       without `perform_deferred_access_checks'.  */
109
110 typedef struct GTY(()) deferred_access {
111   /* A VEC representing name-lookups for which we have deferred
112      checking access controls.  We cannot check the accessibility of
113      names used in a decl-specifier-seq until we know what is being
114      declared because code like:
115
116        class A {
117          class B {};
118          B* f();
119        }
120
121        A::B* A::f() { return 0; }
122
123      is valid, even though `A::B' is not generally accessible.  */
124   VEC (deferred_access_check,gc)* GTY(()) deferred_access_checks;
125
126   /* The current mode of access checks.  */
127   enum deferring_kind deferring_access_checks_kind;
128
129 } deferred_access;
130 DEF_VEC_O (deferred_access);
131 DEF_VEC_ALLOC_O (deferred_access,gc);
132
133 /* Data for deferred access checking.  */
134 static GTY(()) VEC(deferred_access,gc) *deferred_access_stack;
135 static GTY(()) unsigned deferred_access_no_check;
136
137 /* Save the current deferred access states and start deferred
138    access checking iff DEFER_P is true.  */
139
140 void
141 push_deferring_access_checks (deferring_kind deferring)
142 {
143   /* For context like template instantiation, access checking
144      disabling applies to all nested context.  */
145   if (deferred_access_no_check || deferring == dk_no_check)
146     deferred_access_no_check++;
147   else
148     {
149       deferred_access *ptr;
150
151       ptr = VEC_safe_push (deferred_access, gc, deferred_access_stack, NULL);
152       ptr->deferred_access_checks = NULL;
153       ptr->deferring_access_checks_kind = deferring;
154     }
155 }
156
157 /* Resume deferring access checks again after we stopped doing
158    this previously.  */
159
160 void
161 resume_deferring_access_checks (void)
162 {
163   if (!deferred_access_no_check)
164     VEC_last (deferred_access, deferred_access_stack)
165       ->deferring_access_checks_kind = dk_deferred;
166 }
167
168 /* Stop deferring access checks.  */
169
170 void
171 stop_deferring_access_checks (void)
172 {
173   if (!deferred_access_no_check)
174     VEC_last (deferred_access, deferred_access_stack)
175       ->deferring_access_checks_kind = dk_no_deferred;
176 }
177
178 /* Discard the current deferred access checks and restore the
179    previous states.  */
180
181 void
182 pop_deferring_access_checks (void)
183 {
184   if (deferred_access_no_check)
185     deferred_access_no_check--;
186   else
187     VEC_pop (deferred_access, deferred_access_stack);
188 }
189
190 /* Returns a TREE_LIST representing the deferred checks.
191    The TREE_PURPOSE of each node is the type through which the
192    access occurred; the TREE_VALUE is the declaration named.
193    */
194
195 VEC (deferred_access_check,gc)*
196 get_deferred_access_checks (void)
197 {
198   if (deferred_access_no_check)
199     return NULL;
200   else
201     return (VEC_last (deferred_access, deferred_access_stack)
202             ->deferred_access_checks);
203 }
204
205 /* Take current deferred checks and combine with the
206    previous states if we also defer checks previously.
207    Otherwise perform checks now.  */
208
209 void
210 pop_to_parent_deferring_access_checks (void)
211 {
212   if (deferred_access_no_check)
213     deferred_access_no_check--;
214   else
215     {
216       VEC (deferred_access_check,gc) *checks;
217       deferred_access *ptr;
218
219       checks = (VEC_last (deferred_access, deferred_access_stack)
220                 ->deferred_access_checks);
221
222       VEC_pop (deferred_access, deferred_access_stack);
223       ptr = VEC_last (deferred_access, deferred_access_stack);
224       if (ptr->deferring_access_checks_kind == dk_no_deferred)
225         {
226           /* Check access.  */
227           perform_access_checks (checks);
228         }
229       else
230         {
231           /* Merge with parent.  */
232           int i, j;
233           deferred_access_check *chk, *probe;
234
235           FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
236             {
237               FOR_EACH_VEC_ELT (deferred_access_check,
238                                 ptr->deferred_access_checks, j, probe)
239                 {
240                   if (probe->binfo == chk->binfo &&
241                       probe->decl == chk->decl &&
242                       probe->diag_decl == chk->diag_decl)
243                     goto found;
244                 }
245               /* Insert into parent's checks.  */
246               VEC_safe_push (deferred_access_check, gc,
247                              ptr->deferred_access_checks, chk);
248             found:;
249             }
250         }
251     }
252 }
253
254 /* Perform the access checks in CHECKS.  The TREE_PURPOSE of each node
255    is the BINFO indicating the qualifying scope used to access the
256    DECL node stored in the TREE_VALUE of the node.  */
257
258 void
259 perform_access_checks (VEC (deferred_access_check,gc)* checks)
260 {
261   int i;
262   deferred_access_check *chk;
263
264   if (!checks)
265     return;
266
267   FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
268     enforce_access (chk->binfo, chk->decl, chk->diag_decl);
269 }
270
271 /* Perform the deferred access checks.
272
273    After performing the checks, we still have to keep the list
274    `deferred_access_stack->deferred_access_checks' since we may want
275    to check access for them again later in a different context.
276    For example:
277
278      class A {
279        typedef int X;
280        static X a;
281      };
282      A::X A::a, x;      // No error for `A::a', error for `x'
283
284    We have to perform deferred access of `A::X', first with `A::a',
285    next with `x'.  */
286
287 void
288 perform_deferred_access_checks (void)
289 {
290   perform_access_checks (get_deferred_access_checks ());
291 }
292
293 /* Defer checking the accessibility of DECL, when looked up in
294    BINFO. DIAG_DECL is the declaration to use to print diagnostics.  */
295
296 void
297 perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl)
298 {
299   int i;
300   deferred_access *ptr;
301   deferred_access_check *chk;
302   deferred_access_check *new_access;
303
304
305   /* Exit if we are in a context that no access checking is performed.
306      */
307   if (deferred_access_no_check)
308     return;
309
310   gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
311
312   ptr = VEC_last (deferred_access, deferred_access_stack);
313
314   /* If we are not supposed to defer access checks, just check now.  */
315   if (ptr->deferring_access_checks_kind == dk_no_deferred)
316     {
317       enforce_access (binfo, decl, diag_decl);
318       return;
319     }
320
321   /* See if we are already going to perform this check.  */
322   FOR_EACH_VEC_ELT  (deferred_access_check,
323                      ptr->deferred_access_checks, i, chk)
324     {
325       if (chk->decl == decl && chk->binfo == binfo &&
326           chk->diag_decl == diag_decl)
327         {
328           return;
329         }
330     }
331   /* If not, record the check.  */
332   new_access =
333     VEC_safe_push (deferred_access_check, gc,
334                    ptr->deferred_access_checks, 0);
335   new_access->binfo = binfo;
336   new_access->decl = decl;
337   new_access->diag_decl = diag_decl;
338 }
339
340 /* Used by build_over_call in LOOKUP_SPECULATIVE mode: return whether DECL
341    is accessible in BINFO, and possibly complain if not.  If we're not
342    checking access, everything is accessible.  */
343
344 bool
345 speculative_access_check (tree binfo, tree decl, tree diag_decl,
346                           bool complain)
347 {
348   if (deferred_access_no_check)
349     return true;
350
351   /* If we're checking for implicit delete, we don't want access
352      control errors.  */
353   if (!accessible_p (binfo, decl, true))
354     {
355       /* Unless we're under maybe_explain_implicit_delete.  */
356       if (complain)
357         enforce_access (binfo, decl, diag_decl);
358       return false;
359     }
360
361   return true;
362 }
363
364 /* Returns nonzero if the current statement is a full expression,
365    i.e. temporaries created during that statement should be destroyed
366    at the end of the statement.  */
367
368 int
369 stmts_are_full_exprs_p (void)
370 {
371   return current_stmt_tree ()->stmts_are_full_exprs_p;
372 }
373
374 /* T is a statement.  Add it to the statement-tree.  This is the C++
375    version.  The C/ObjC frontends have a slightly different version of
376    this function.  */
377
378 tree
379 add_stmt (tree t)
380 {
381   enum tree_code code = TREE_CODE (t);
382
383   if (EXPR_P (t) && code != LABEL_EXPR)
384     {
385       if (!EXPR_HAS_LOCATION (t))
386         SET_EXPR_LOCATION (t, input_location);
387
388       /* When we expand a statement-tree, we must know whether or not the
389          statements are full-expressions.  We record that fact here.  */
390       STMT_IS_FULL_EXPR_P (t) = stmts_are_full_exprs_p ();
391     }
392
393   /* Add T to the statement-tree.  Non-side-effect statements need to be
394      recorded during statement expressions.  */
395   append_to_statement_list_force (t, &cur_stmt_list);
396
397   return t;
398 }
399
400 /* Returns the stmt_tree to which statements are currently being added.  */
401
402 stmt_tree
403 current_stmt_tree (void)
404 {
405   return (cfun
406           ? &cfun->language->base.x_stmt_tree
407           : &scope_chain->x_stmt_tree);
408 }
409
410 /* If statements are full expressions, wrap STMT in a CLEANUP_POINT_EXPR.  */
411
412 static tree
413 maybe_cleanup_point_expr (tree expr)
414 {
415   if (!processing_template_decl && stmts_are_full_exprs_p ())
416     expr = fold_build_cleanup_point_expr (TREE_TYPE (expr), expr);
417   return expr;
418 }
419
420 /* Like maybe_cleanup_point_expr except have the type of the new expression be
421    void so we don't need to create a temporary variable to hold the inner
422    expression.  The reason why we do this is because the original type might be
423    an aggregate and we cannot create a temporary variable for that type.  */
424
425 static tree
426 maybe_cleanup_point_expr_void (tree expr)
427 {
428   if (!processing_template_decl && stmts_are_full_exprs_p ())
429     expr = fold_build_cleanup_point_expr (void_type_node, expr);
430   return expr;
431 }
432
433
434
435 /* Create a declaration statement for the declaration given by the DECL.  */
436
437 void
438 add_decl_expr (tree decl)
439 {
440   tree r = build_stmt (input_location, DECL_EXPR, decl);
441   if (DECL_INITIAL (decl)
442       || (DECL_SIZE (decl) && TREE_SIDE_EFFECTS (DECL_SIZE (decl))))
443     r = maybe_cleanup_point_expr_void (r);
444   add_stmt (r);
445 }
446
447 /* Finish a scope.  */
448
449 tree
450 do_poplevel (tree stmt_list)
451 {
452   tree block = NULL;
453
454   if (stmts_are_full_exprs_p ())
455     block = poplevel (kept_level_p (), 1, 0);
456
457   stmt_list = pop_stmt_list (stmt_list);
458
459   if (!processing_template_decl)
460     {
461       stmt_list = c_build_bind_expr (input_location, block, stmt_list);
462       /* ??? See c_end_compound_stmt re statement expressions.  */
463     }
464
465   return stmt_list;
466 }
467
468 /* Begin a new scope.  */
469
470 static tree
471 do_pushlevel (scope_kind sk)
472 {
473   tree ret = push_stmt_list ();
474   if (stmts_are_full_exprs_p ())
475     begin_scope (sk, NULL);
476   return ret;
477 }
478
479 /* Queue a cleanup.  CLEANUP is an expression/statement to be executed
480    when the current scope is exited.  EH_ONLY is true when this is not
481    meant to apply to normal control flow transfer.  */
482
483 void
484 push_cleanup (tree decl, tree cleanup, bool eh_only)
485 {
486   tree stmt = build_stmt (input_location, CLEANUP_STMT, NULL, cleanup, decl);
487   CLEANUP_EH_ONLY (stmt) = eh_only;
488   add_stmt (stmt);
489   CLEANUP_BODY (stmt) = push_stmt_list ();
490 }
491
492 /* Begin a conditional that might contain a declaration.  When generating
493    normal code, we want the declaration to appear before the statement
494    containing the conditional.  When generating template code, we want the
495    conditional to be rendered as the raw DECL_EXPR.  */
496
497 static void
498 begin_cond (tree *cond_p)
499 {
500   if (processing_template_decl)
501     *cond_p = push_stmt_list ();
502 }
503
504 /* Finish such a conditional.  */
505
506 static void
507 finish_cond (tree *cond_p, tree expr)
508 {
509   if (processing_template_decl)
510     {
511       tree cond = pop_stmt_list (*cond_p);
512       if (TREE_CODE (cond) == DECL_EXPR)
513         expr = cond;
514
515       if (check_for_bare_parameter_packs (expr))
516         *cond_p = error_mark_node;
517     }
518   *cond_p = expr;
519 }
520
521 /* If *COND_P specifies a conditional with a declaration, transform the
522    loop such that
523             while (A x = 42) { }
524             for (; A x = 42;) { }
525    becomes
526             while (true) { A x = 42; if (!x) break; }
527             for (;;) { A x = 42; if (!x) break; }
528    The statement list for BODY will be empty if the conditional did
529    not declare anything.  */
530
531 static void
532 simplify_loop_decl_cond (tree *cond_p, tree body)
533 {
534   tree cond, if_stmt;
535
536   if (!TREE_SIDE_EFFECTS (body))
537     return;
538
539   cond = *cond_p;
540   *cond_p = boolean_true_node;
541
542   if_stmt = begin_if_stmt ();
543   cond = cp_build_unary_op (TRUTH_NOT_EXPR, cond, 0, tf_warning_or_error);
544   finish_if_stmt_cond (cond, if_stmt);
545   finish_break_stmt ();
546   finish_then_clause (if_stmt);
547   finish_if_stmt (if_stmt);
548 }
549
550 /* Finish a goto-statement.  */
551
552 tree
553 finish_goto_stmt (tree destination)
554 {
555   if (TREE_CODE (destination) == IDENTIFIER_NODE)
556     destination = lookup_label (destination);
557
558   /* We warn about unused labels with -Wunused.  That means we have to
559      mark the used labels as used.  */
560   if (TREE_CODE (destination) == LABEL_DECL)
561     TREE_USED (destination) = 1;
562   else
563     {
564       destination = mark_rvalue_use (destination);
565       if (!processing_template_decl)
566         {
567           destination = cp_convert (ptr_type_node, destination);
568           if (error_operand_p (destination))
569             return NULL_TREE;
570         }
571       /* We don't inline calls to functions with computed gotos.
572          Those functions are typically up to some funny business,
573          and may be depending on the labels being at particular
574          addresses, or some such.  */
575       DECL_UNINLINABLE (current_function_decl) = 1;
576     }
577
578   check_goto (destination);
579
580   return add_stmt (build_stmt (input_location, GOTO_EXPR, destination));
581 }
582
583 /* COND is the condition-expression for an if, while, etc.,
584    statement.  Convert it to a boolean value, if appropriate.
585    In addition, verify sequence points if -Wsequence-point is enabled.  */
586
587 static tree
588 maybe_convert_cond (tree cond)
589 {
590   /* Empty conditions remain empty.  */
591   if (!cond)
592     return NULL_TREE;
593
594   /* Wait until we instantiate templates before doing conversion.  */
595   if (processing_template_decl)
596     return cond;
597
598   if (warn_sequence_point)
599     verify_sequence_points (cond);
600
601   /* Do the conversion.  */
602   cond = convert_from_reference (cond);
603
604   if (TREE_CODE (cond) == MODIFY_EXPR
605       && !TREE_NO_WARNING (cond)
606       && warn_parentheses)
607     {
608       warning (OPT_Wparentheses,
609                "suggest parentheses around assignment used as truth value");
610       TREE_NO_WARNING (cond) = 1;
611     }
612
613   return condition_conversion (cond);
614 }
615
616 /* Finish an expression-statement, whose EXPRESSION is as indicated.  */
617
618 tree
619 finish_expr_stmt (tree expr)
620 {
621   tree r = NULL_TREE;
622
623   if (expr != NULL_TREE)
624     {
625       if (!processing_template_decl)
626         {
627           if (warn_sequence_point)
628             verify_sequence_points (expr);
629           expr = convert_to_void (expr, ICV_STATEMENT, tf_warning_or_error);
630         }
631       else if (!type_dependent_expression_p (expr))
632         convert_to_void (build_non_dependent_expr (expr), ICV_STATEMENT, 
633                          tf_warning_or_error);
634
635       if (check_for_bare_parameter_packs (expr))
636         expr = error_mark_node;
637
638       /* Simplification of inner statement expressions, compound exprs,
639          etc can result in us already having an EXPR_STMT.  */
640       if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
641         {
642           if (TREE_CODE (expr) != EXPR_STMT)
643             expr = build_stmt (input_location, EXPR_STMT, expr);
644           expr = maybe_cleanup_point_expr_void (expr);
645         }
646
647       r = add_stmt (expr);
648     }
649
650   finish_stmt ();
651
652   return r;
653 }
654
655
656 /* Begin an if-statement.  Returns a newly created IF_STMT if
657    appropriate.  */
658
659 tree
660 begin_if_stmt (void)
661 {
662   tree r, scope;
663   scope = do_pushlevel (sk_block);
664   r = build_stmt (input_location, IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
665   TREE_CHAIN (r) = scope;
666   begin_cond (&IF_COND (r));
667   return r;
668 }
669
670 /* Process the COND of an if-statement, which may be given by
671    IF_STMT.  */
672
673 void
674 finish_if_stmt_cond (tree cond, tree if_stmt)
675 {
676   finish_cond (&IF_COND (if_stmt), maybe_convert_cond (cond));
677   add_stmt (if_stmt);
678   THEN_CLAUSE (if_stmt) = push_stmt_list ();
679 }
680
681 /* Finish the then-clause of an if-statement, which may be given by
682    IF_STMT.  */
683
684 tree
685 finish_then_clause (tree if_stmt)
686 {
687   THEN_CLAUSE (if_stmt) = pop_stmt_list (THEN_CLAUSE (if_stmt));
688   return if_stmt;
689 }
690
691 /* Begin the else-clause of an if-statement.  */
692
693 void
694 begin_else_clause (tree if_stmt)
695 {
696   ELSE_CLAUSE (if_stmt) = push_stmt_list ();
697 }
698
699 /* Finish the else-clause of an if-statement, which may be given by
700    IF_STMT.  */
701
702 void
703 finish_else_clause (tree if_stmt)
704 {
705   ELSE_CLAUSE (if_stmt) = pop_stmt_list (ELSE_CLAUSE (if_stmt));
706 }
707
708 /* Finish an if-statement.  */
709
710 void
711 finish_if_stmt (tree if_stmt)
712 {
713   tree scope = TREE_CHAIN (if_stmt);
714   TREE_CHAIN (if_stmt) = NULL;
715   add_stmt (do_poplevel (scope));
716   finish_stmt ();
717 }
718
719 /* Begin a while-statement.  Returns a newly created WHILE_STMT if
720    appropriate.  */
721
722 tree
723 begin_while_stmt (void)
724 {
725   tree r;
726   r = build_stmt (input_location, WHILE_STMT, NULL_TREE, NULL_TREE);
727   add_stmt (r);
728   WHILE_BODY (r) = do_pushlevel (sk_block);
729   begin_cond (&WHILE_COND (r));
730   return r;
731 }
732
733 /* Process the COND of a while-statement, which may be given by
734    WHILE_STMT.  */
735
736 void
737 finish_while_stmt_cond (tree cond, tree while_stmt)
738 {
739   finish_cond (&WHILE_COND (while_stmt), maybe_convert_cond (cond));
740   simplify_loop_decl_cond (&WHILE_COND (while_stmt), WHILE_BODY (while_stmt));
741 }
742
743 /* Finish a while-statement, which may be given by WHILE_STMT.  */
744
745 void
746 finish_while_stmt (tree while_stmt)
747 {
748   WHILE_BODY (while_stmt) = do_poplevel (WHILE_BODY (while_stmt));
749   finish_stmt ();
750 }
751
752 /* Begin a do-statement.  Returns a newly created DO_STMT if
753    appropriate.  */
754
755 tree
756 begin_do_stmt (void)
757 {
758   tree r = build_stmt (input_location, DO_STMT, NULL_TREE, NULL_TREE);
759   add_stmt (r);
760   DO_BODY (r) = push_stmt_list ();
761   return r;
762 }
763
764 /* Finish the body of a do-statement, which may be given by DO_STMT.  */
765
766 void
767 finish_do_body (tree do_stmt)
768 {
769   tree body = DO_BODY (do_stmt) = pop_stmt_list (DO_BODY (do_stmt));
770
771   if (TREE_CODE (body) == STATEMENT_LIST && STATEMENT_LIST_TAIL (body))
772     body = STATEMENT_LIST_TAIL (body)->stmt;
773
774   if (IS_EMPTY_STMT (body))
775     warning (OPT_Wempty_body,
776             "suggest explicit braces around empty body in %<do%> statement");
777 }
778
779 /* Finish a do-statement, which may be given by DO_STMT, and whose
780    COND is as indicated.  */
781
782 void
783 finish_do_stmt (tree cond, tree do_stmt)
784 {
785   cond = maybe_convert_cond (cond);
786   DO_COND (do_stmt) = cond;
787   finish_stmt ();
788 }
789
790 /* Finish a return-statement.  The EXPRESSION returned, if any, is as
791    indicated.  */
792
793 tree
794 finish_return_stmt (tree expr)
795 {
796   tree r;
797   bool no_warning;
798
799   expr = check_return_expr (expr, &no_warning);
800
801   if (flag_openmp && !check_omp_return ())
802     return error_mark_node;
803   if (!processing_template_decl)
804     {
805       if (warn_sequence_point)
806         verify_sequence_points (expr);
807       
808       if (DECL_DESTRUCTOR_P (current_function_decl)
809           || (DECL_CONSTRUCTOR_P (current_function_decl)
810               && targetm.cxx.cdtor_returns_this ()))
811         {
812           /* Similarly, all destructors must run destructors for
813              base-classes before returning.  So, all returns in a
814              destructor get sent to the DTOR_LABEL; finish_function emits
815              code to return a value there.  */
816           return finish_goto_stmt (cdtor_label);
817         }
818     }
819
820   r = build_stmt (input_location, RETURN_EXPR, expr);
821   TREE_NO_WARNING (r) |= no_warning;
822   r = maybe_cleanup_point_expr_void (r);
823   r = add_stmt (r);
824   finish_stmt ();
825
826   return r;
827 }
828
829 /* Begin a for-statement.  Returns a new FOR_STMT if appropriate.  */
830
831 tree
832 begin_for_stmt (void)
833 {
834   tree r;
835
836   r = build_stmt (input_location, FOR_STMT, NULL_TREE, NULL_TREE,
837                   NULL_TREE, NULL_TREE);
838
839   if (flag_new_for_scope > 0)
840     TREE_CHAIN (r) = do_pushlevel (sk_for);
841
842   if (processing_template_decl)
843     FOR_INIT_STMT (r) = push_stmt_list ();
844
845   return r;
846 }
847
848 /* Finish the for-init-statement of a for-statement, which may be
849    given by FOR_STMT.  */
850
851 void
852 finish_for_init_stmt (tree for_stmt)
853 {
854   if (processing_template_decl)
855     FOR_INIT_STMT (for_stmt) = pop_stmt_list (FOR_INIT_STMT (for_stmt));
856   add_stmt (for_stmt);
857   FOR_BODY (for_stmt) = do_pushlevel (sk_block);
858   begin_cond (&FOR_COND (for_stmt));
859 }
860
861 /* Finish the COND of a for-statement, which may be given by
862    FOR_STMT.  */
863
864 void
865 finish_for_cond (tree cond, tree for_stmt)
866 {
867   finish_cond (&FOR_COND (for_stmt), maybe_convert_cond (cond));
868   simplify_loop_decl_cond (&FOR_COND (for_stmt), FOR_BODY (for_stmt));
869 }
870
871 /* Finish the increment-EXPRESSION in a for-statement, which may be
872    given by FOR_STMT.  */
873
874 void
875 finish_for_expr (tree expr, tree for_stmt)
876 {
877   if (!expr)
878     return;
879   /* If EXPR is an overloaded function, issue an error; there is no
880      context available to use to perform overload resolution.  */
881   if (type_unknown_p (expr))
882     {
883       cxx_incomplete_type_error (expr, TREE_TYPE (expr));
884       expr = error_mark_node;
885     }
886   if (!processing_template_decl)
887     {
888       if (warn_sequence_point)
889         verify_sequence_points (expr);
890       expr = convert_to_void (expr, ICV_THIRD_IN_FOR,
891                               tf_warning_or_error);
892     }
893   else if (!type_dependent_expression_p (expr))
894     convert_to_void (build_non_dependent_expr (expr), ICV_THIRD_IN_FOR,
895                      tf_warning_or_error);
896   expr = maybe_cleanup_point_expr_void (expr);
897   if (check_for_bare_parameter_packs (expr))
898     expr = error_mark_node;
899   FOR_EXPR (for_stmt) = expr;
900 }
901
902 /* Finish the body of a for-statement, which may be given by
903    FOR_STMT.  The increment-EXPR for the loop must be
904    provided.
905    It can also finish RANGE_FOR_STMT. */
906
907 void
908 finish_for_stmt (tree for_stmt)
909 {
910   if (TREE_CODE (for_stmt) == RANGE_FOR_STMT)
911     RANGE_FOR_BODY (for_stmt) = do_poplevel (RANGE_FOR_BODY (for_stmt));
912   else
913     FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt));
914
915   /* Pop the scope for the body of the loop.  */
916   if (flag_new_for_scope > 0)
917     {
918       tree scope = TREE_CHAIN (for_stmt);
919       TREE_CHAIN (for_stmt) = NULL;
920       add_stmt (do_poplevel (scope));
921     }
922
923   finish_stmt ();
924 }
925
926 /* Begin a range-for-statement.  Returns a new RANGE_FOR_STMT.
927    To finish it call finish_for_stmt(). */
928
929 tree
930 begin_range_for_stmt (void)
931 {
932   tree r;
933
934   r = build_stmt (input_location, RANGE_FOR_STMT,
935                   NULL_TREE, NULL_TREE, NULL_TREE);
936
937   if (flag_new_for_scope > 0)
938     TREE_CHAIN (r) = do_pushlevel (sk_for);
939
940   return r;
941 }
942
943 /* Finish the head of a range-based for statement, which may
944    be given by RANGE_FOR_STMT. DECL must be the declaration
945    and EXPR must be the loop expression. */
946
947 void
948 finish_range_for_decl (tree range_for_stmt, tree decl, tree expr)
949 {
950   RANGE_FOR_DECL (range_for_stmt) = decl;
951   RANGE_FOR_EXPR (range_for_stmt) = expr;
952   add_stmt (range_for_stmt);
953   RANGE_FOR_BODY (range_for_stmt) = do_pushlevel (sk_block);
954 }
955
956 /* Finish a break-statement.  */
957
958 tree
959 finish_break_stmt (void)
960 {
961   return add_stmt (build_stmt (input_location, BREAK_STMT));
962 }
963
964 /* Finish a continue-statement.  */
965
966 tree
967 finish_continue_stmt (void)
968 {
969   return add_stmt (build_stmt (input_location, CONTINUE_STMT));
970 }
971
972 /* Begin a switch-statement.  Returns a new SWITCH_STMT if
973    appropriate.  */
974
975 tree
976 begin_switch_stmt (void)
977 {
978   tree r, scope;
979
980   r = build_stmt (input_location, SWITCH_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
981
982   scope = do_pushlevel (sk_block);
983   TREE_CHAIN (r) = scope;
984   begin_cond (&SWITCH_STMT_COND (r));
985
986   return r;
987 }
988
989 /* Finish the cond of a switch-statement.  */
990
991 void
992 finish_switch_cond (tree cond, tree switch_stmt)
993 {
994   tree orig_type = NULL;
995   if (!processing_template_decl)
996     {
997       /* Convert the condition to an integer or enumeration type.  */
998       cond = build_expr_type_conversion (WANT_INT | WANT_ENUM, cond, true);
999       if (cond == NULL_TREE)
1000         {
1001           error ("switch quantity not an integer");
1002           cond = error_mark_node;
1003         }
1004       orig_type = TREE_TYPE (cond);
1005       if (cond != error_mark_node)
1006         {
1007           /* [stmt.switch]
1008
1009              Integral promotions are performed.  */
1010           cond = perform_integral_promotions (cond);
1011           cond = maybe_cleanup_point_expr (cond);
1012         }
1013     }
1014   if (check_for_bare_parameter_packs (cond))
1015     cond = error_mark_node;
1016   else if (!processing_template_decl && warn_sequence_point)
1017     verify_sequence_points (cond);
1018
1019   finish_cond (&SWITCH_STMT_COND (switch_stmt), cond);
1020   SWITCH_STMT_TYPE (switch_stmt) = orig_type;
1021   add_stmt (switch_stmt);
1022   push_switch (switch_stmt);
1023   SWITCH_STMT_BODY (switch_stmt) = push_stmt_list ();
1024 }
1025
1026 /* Finish the body of a switch-statement, which may be given by
1027    SWITCH_STMT.  The COND to switch on is indicated.  */
1028
1029 void
1030 finish_switch_stmt (tree switch_stmt)
1031 {
1032   tree scope;
1033
1034   SWITCH_STMT_BODY (switch_stmt) =
1035     pop_stmt_list (SWITCH_STMT_BODY (switch_stmt));
1036   pop_switch ();
1037   finish_stmt ();
1038
1039   scope = TREE_CHAIN (switch_stmt);
1040   TREE_CHAIN (switch_stmt) = NULL;
1041   add_stmt (do_poplevel (scope));
1042 }
1043
1044 /* Begin a try-block.  Returns a newly-created TRY_BLOCK if
1045    appropriate.  */
1046
1047 tree
1048 begin_try_block (void)
1049 {
1050   tree r = build_stmt (input_location, TRY_BLOCK, NULL_TREE, NULL_TREE);
1051   add_stmt (r);
1052   TRY_STMTS (r) = push_stmt_list ();
1053   return r;
1054 }
1055
1056 /* Likewise, for a function-try-block.  The block returned in
1057    *COMPOUND_STMT is an artificial outer scope, containing the
1058    function-try-block.  */
1059
1060 tree
1061 begin_function_try_block (tree *compound_stmt)
1062 {
1063   tree r;
1064   /* This outer scope does not exist in the C++ standard, but we need
1065      a place to put __FUNCTION__ and similar variables.  */
1066   *compound_stmt = begin_compound_stmt (0);
1067   r = begin_try_block ();
1068   FN_TRY_BLOCK_P (r) = 1;
1069   return r;
1070 }
1071
1072 /* Finish a try-block, which may be given by TRY_BLOCK.  */
1073
1074 void
1075 finish_try_block (tree try_block)
1076 {
1077   TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1078   TRY_HANDLERS (try_block) = push_stmt_list ();
1079 }
1080
1081 /* Finish the body of a cleanup try-block, which may be given by
1082    TRY_BLOCK.  */
1083
1084 void
1085 finish_cleanup_try_block (tree try_block)
1086 {
1087   TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1088 }
1089
1090 /* Finish an implicitly generated try-block, with a cleanup is given
1091    by CLEANUP.  */
1092
1093 void
1094 finish_cleanup (tree cleanup, tree try_block)
1095 {
1096   TRY_HANDLERS (try_block) = cleanup;
1097   CLEANUP_P (try_block) = 1;
1098 }
1099
1100 /* Likewise, for a function-try-block.  */
1101
1102 void
1103 finish_function_try_block (tree try_block)
1104 {
1105   finish_try_block (try_block);
1106   /* FIXME : something queer about CTOR_INITIALIZER somehow following
1107      the try block, but moving it inside.  */
1108   in_function_try_handler = 1;
1109 }
1110
1111 /* Finish a handler-sequence for a try-block, which may be given by
1112    TRY_BLOCK.  */
1113
1114 void
1115 finish_handler_sequence (tree try_block)
1116 {
1117   TRY_HANDLERS (try_block) = pop_stmt_list (TRY_HANDLERS (try_block));
1118   check_handlers (TRY_HANDLERS (try_block));
1119 }
1120
1121 /* Finish the handler-seq for a function-try-block, given by
1122    TRY_BLOCK.  COMPOUND_STMT is the outer block created by
1123    begin_function_try_block.  */
1124
1125 void
1126 finish_function_handler_sequence (tree try_block, tree compound_stmt)
1127 {
1128   in_function_try_handler = 0;
1129   finish_handler_sequence (try_block);
1130   finish_compound_stmt (compound_stmt);
1131 }
1132
1133 /* Begin a handler.  Returns a HANDLER if appropriate.  */
1134
1135 tree
1136 begin_handler (void)
1137 {
1138   tree r;
1139
1140   r = build_stmt (input_location, HANDLER, NULL_TREE, NULL_TREE);
1141   add_stmt (r);
1142
1143   /* Create a binding level for the eh_info and the exception object
1144      cleanup.  */
1145   HANDLER_BODY (r) = do_pushlevel (sk_catch);
1146
1147   return r;
1148 }
1149
1150 /* Finish the handler-parameters for a handler, which may be given by
1151    HANDLER.  DECL is the declaration for the catch parameter, or NULL
1152    if this is a `catch (...)' clause.  */
1153
1154 void
1155 finish_handler_parms (tree decl, tree handler)
1156 {
1157   tree type = NULL_TREE;
1158   if (processing_template_decl)
1159     {
1160       if (decl)
1161         {
1162           decl = pushdecl (decl);
1163           decl = push_template_decl (decl);
1164           HANDLER_PARMS (handler) = decl;
1165           type = TREE_TYPE (decl);
1166         }
1167     }
1168   else
1169     type = expand_start_catch_block (decl);
1170   HANDLER_TYPE (handler) = type;
1171   if (!processing_template_decl && type)
1172     mark_used (eh_type_info (type));
1173 }
1174
1175 /* Finish a handler, which may be given by HANDLER.  The BLOCKs are
1176    the return value from the matching call to finish_handler_parms.  */
1177
1178 void
1179 finish_handler (tree handler)
1180 {
1181   if (!processing_template_decl)
1182     expand_end_catch_block ();
1183   HANDLER_BODY (handler) = do_poplevel (HANDLER_BODY (handler));
1184 }
1185
1186 /* Begin a compound statement.  FLAGS contains some bits that control the
1187    behavior and context.  If BCS_NO_SCOPE is set, the compound statement
1188    does not define a scope.  If BCS_FN_BODY is set, this is the outermost
1189    block of a function.  If BCS_TRY_BLOCK is set, this is the block
1190    created on behalf of a TRY statement.  Returns a token to be passed to
1191    finish_compound_stmt.  */
1192
1193 tree
1194 begin_compound_stmt (unsigned int flags)
1195 {
1196   tree r;
1197
1198   if (flags & BCS_NO_SCOPE)
1199     {
1200       r = push_stmt_list ();
1201       STATEMENT_LIST_NO_SCOPE (r) = 1;
1202
1203       /* Normally, we try hard to keep the BLOCK for a statement-expression.
1204          But, if it's a statement-expression with a scopeless block, there's
1205          nothing to keep, and we don't want to accidentally keep a block
1206          *inside* the scopeless block.  */
1207       keep_next_level (false);
1208     }
1209   else
1210     r = do_pushlevel (flags & BCS_TRY_BLOCK ? sk_try : sk_block);
1211
1212   /* When processing a template, we need to remember where the braces were,
1213      so that we can set up identical scopes when instantiating the template
1214      later.  BIND_EXPR is a handy candidate for this.
1215      Note that do_poplevel won't create a BIND_EXPR itself here (and thus
1216      result in nested BIND_EXPRs), since we don't build BLOCK nodes when
1217      processing templates.  */
1218   if (processing_template_decl)
1219     {
1220       r = build3 (BIND_EXPR, NULL, NULL, r, NULL);
1221       BIND_EXPR_TRY_BLOCK (r) = (flags & BCS_TRY_BLOCK) != 0;
1222       BIND_EXPR_BODY_BLOCK (r) = (flags & BCS_FN_BODY) != 0;
1223       TREE_SIDE_EFFECTS (r) = 1;
1224     }
1225
1226   return r;
1227 }
1228
1229 /* Finish a compound-statement, which is given by STMT.  */
1230
1231 void
1232 finish_compound_stmt (tree stmt)
1233 {
1234   if (TREE_CODE (stmt) == BIND_EXPR)
1235     {
1236       tree body = do_poplevel (BIND_EXPR_BODY (stmt));
1237       /* If the STATEMENT_LIST is empty and this BIND_EXPR isn't special,
1238          discard the BIND_EXPR so it can be merged with the containing
1239          STATEMENT_LIST.  */
1240       if (TREE_CODE (body) == STATEMENT_LIST
1241           && STATEMENT_LIST_HEAD (body) == NULL
1242           && !BIND_EXPR_BODY_BLOCK (stmt)
1243           && !BIND_EXPR_TRY_BLOCK (stmt))
1244         stmt = body;
1245       else
1246         BIND_EXPR_BODY (stmt) = body;
1247     }
1248   else if (STATEMENT_LIST_NO_SCOPE (stmt))
1249     stmt = pop_stmt_list (stmt);
1250   else
1251     {
1252       /* Destroy any ObjC "super" receivers that may have been
1253          created.  */
1254       objc_clear_super_receiver ();
1255
1256       stmt = do_poplevel (stmt);
1257     }
1258
1259   /* ??? See c_end_compound_stmt wrt statement expressions.  */
1260   add_stmt (stmt);
1261   finish_stmt ();
1262 }
1263
1264 /* Finish an asm-statement, whose components are a STRING, some
1265    OUTPUT_OPERANDS, some INPUT_OPERANDS, some CLOBBERS and some
1266    LABELS.  Also note whether the asm-statement should be
1267    considered volatile.  */
1268
1269 tree
1270 finish_asm_stmt (int volatile_p, tree string, tree output_operands,
1271                  tree input_operands, tree clobbers, tree labels)
1272 {
1273   tree r;
1274   tree t;
1275   int ninputs = list_length (input_operands);
1276   int noutputs = list_length (output_operands);
1277
1278   if (!processing_template_decl)
1279     {
1280       const char *constraint;
1281       const char **oconstraints;
1282       bool allows_mem, allows_reg, is_inout;
1283       tree operand;
1284       int i;
1285
1286       oconstraints = XALLOCAVEC (const char *, noutputs);
1287
1288       string = resolve_asm_operand_names (string, output_operands,
1289                                           input_operands, labels);
1290
1291       for (i = 0, t = output_operands; t; t = TREE_CHAIN (t), ++i)
1292         {
1293           operand = TREE_VALUE (t);
1294
1295           /* ??? Really, this should not be here.  Users should be using a
1296              proper lvalue, dammit.  But there's a long history of using
1297              casts in the output operands.  In cases like longlong.h, this
1298              becomes a primitive form of typechecking -- if the cast can be
1299              removed, then the output operand had a type of the proper width;
1300              otherwise we'll get an error.  Gross, but ...  */
1301           STRIP_NOPS (operand);
1302
1303           operand = mark_lvalue_use (operand);
1304
1305           if (!lvalue_or_else (operand, lv_asm, tf_warning_or_error))
1306             operand = error_mark_node;
1307
1308           if (operand != error_mark_node
1309               && (TREE_READONLY (operand)
1310                   || CP_TYPE_CONST_P (TREE_TYPE (operand))
1311                   /* Functions are not modifiable, even though they are
1312                      lvalues.  */
1313                   || TREE_CODE (TREE_TYPE (operand)) == FUNCTION_TYPE
1314                   || TREE_CODE (TREE_TYPE (operand)) == METHOD_TYPE
1315                   /* If it's an aggregate and any field is const, then it is
1316                      effectively const.  */
1317                   || (CLASS_TYPE_P (TREE_TYPE (operand))
1318                       && C_TYPE_FIELDS_READONLY (TREE_TYPE (operand)))))
1319             readonly_error (operand, REK_ASSIGNMENT_ASM);
1320
1321           constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1322           oconstraints[i] = constraint;
1323
1324           if (parse_output_constraint (&constraint, i, ninputs, noutputs,
1325                                        &allows_mem, &allows_reg, &is_inout))
1326             {
1327               /* If the operand is going to end up in memory,
1328                  mark it addressable.  */
1329               if (!allows_reg && !cxx_mark_addressable (operand))
1330                 operand = error_mark_node;
1331             }
1332           else
1333             operand = error_mark_node;
1334
1335           TREE_VALUE (t) = operand;
1336         }
1337
1338       for (i = 0, t = input_operands; t; ++i, t = TREE_CHAIN (t))
1339         {
1340           constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1341           operand = decay_conversion (TREE_VALUE (t));
1342
1343           /* If the type of the operand hasn't been determined (e.g.,
1344              because it involves an overloaded function), then issue
1345              an error message.  There's no context available to
1346              resolve the overloading.  */
1347           if (TREE_TYPE (operand) == unknown_type_node)
1348             {
1349               error ("type of asm operand %qE could not be determined",
1350                      TREE_VALUE (t));
1351               operand = error_mark_node;
1352             }
1353
1354           if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
1355                                       oconstraints, &allows_mem, &allows_reg))
1356             {
1357               /* If the operand is going to end up in memory,
1358                  mark it addressable.  */
1359               if (!allows_reg && allows_mem)
1360                 {
1361                   /* Strip the nops as we allow this case.  FIXME, this really
1362                      should be rejected or made deprecated.  */
1363                   STRIP_NOPS (operand);
1364                   if (!cxx_mark_addressable (operand))
1365                     operand = error_mark_node;
1366                 }
1367             }
1368           else
1369             operand = error_mark_node;
1370
1371           TREE_VALUE (t) = operand;
1372         }
1373     }
1374
1375   r = build_stmt (input_location, ASM_EXPR, string,
1376                   output_operands, input_operands,
1377                   clobbers, labels);
1378   ASM_VOLATILE_P (r) = volatile_p || noutputs == 0;
1379   r = maybe_cleanup_point_expr_void (r);
1380   return add_stmt (r);
1381 }
1382
1383 /* Finish a label with the indicated NAME.  Returns the new label.  */
1384
1385 tree
1386 finish_label_stmt (tree name)
1387 {
1388   tree decl = define_label (input_location, name);
1389
1390   if (decl == error_mark_node)
1391     return error_mark_node;
1392
1393   add_stmt (build_stmt (input_location, LABEL_EXPR, decl));
1394
1395   return decl;
1396 }
1397
1398 /* Finish a series of declarations for local labels.  G++ allows users
1399    to declare "local" labels, i.e., labels with scope.  This extension
1400    is useful when writing code involving statement-expressions.  */
1401
1402 void
1403 finish_label_decl (tree name)
1404 {
1405   if (!at_function_scope_p ())
1406     {
1407       error ("__label__ declarations are only allowed in function scopes");
1408       return;
1409     }
1410
1411   add_decl_expr (declare_local_label (name));
1412 }
1413
1414 /* When DECL goes out of scope, make sure that CLEANUP is executed.  */
1415
1416 void
1417 finish_decl_cleanup (tree decl, tree cleanup)
1418 {
1419   push_cleanup (decl, cleanup, false);
1420 }
1421
1422 /* If the current scope exits with an exception, run CLEANUP.  */
1423
1424 void
1425 finish_eh_cleanup (tree cleanup)
1426 {
1427   push_cleanup (NULL, cleanup, true);
1428 }
1429
1430 /* The MEM_INITS is a list of mem-initializers, in reverse of the
1431    order they were written by the user.  Each node is as for
1432    emit_mem_initializers.  */
1433
1434 void
1435 finish_mem_initializers (tree mem_inits)
1436 {
1437   /* Reorder the MEM_INITS so that they are in the order they appeared
1438      in the source program.  */
1439   mem_inits = nreverse (mem_inits);
1440
1441   if (processing_template_decl)
1442     {
1443       tree mem;
1444
1445       for (mem = mem_inits; mem; mem = TREE_CHAIN (mem))
1446         {
1447           /* If the TREE_PURPOSE is a TYPE_PACK_EXPANSION, skip the
1448              check for bare parameter packs in the TREE_VALUE, because
1449              any parameter packs in the TREE_VALUE have already been
1450              bound as part of the TREE_PURPOSE.  See
1451              make_pack_expansion for more information.  */
1452           if (TREE_CODE (TREE_PURPOSE (mem)) != TYPE_PACK_EXPANSION
1453               && check_for_bare_parameter_packs (TREE_VALUE (mem)))
1454             TREE_VALUE (mem) = error_mark_node;
1455         }
1456
1457       add_stmt (build_min_nt (CTOR_INITIALIZER, mem_inits));
1458     }
1459   else
1460     emit_mem_initializers (mem_inits);
1461 }
1462
1463 /* Finish a parenthesized expression EXPR.  */
1464
1465 tree
1466 finish_parenthesized_expr (tree expr)
1467 {
1468   if (EXPR_P (expr))
1469     /* This inhibits warnings in c_common_truthvalue_conversion.  */
1470     TREE_NO_WARNING (expr) = 1;
1471
1472   if (TREE_CODE (expr) == OFFSET_REF)
1473     /* [expr.unary.op]/3 The qualified id of a pointer-to-member must not be
1474        enclosed in parentheses.  */
1475     PTRMEM_OK_P (expr) = 0;
1476
1477   if (TREE_CODE (expr) == STRING_CST)
1478     PAREN_STRING_LITERAL_P (expr) = 1;
1479
1480   return expr;
1481 }
1482
1483 /* Finish a reference to a non-static data member (DECL) that is not
1484    preceded by `.' or `->'.  */
1485
1486 tree
1487 finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
1488 {
1489   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
1490
1491   if (!object)
1492     {
1493       tree scope = qualifying_scope;
1494       if (scope == NULL_TREE)
1495         scope = context_for_name_lookup (decl);
1496       object = maybe_dummy_object (scope, NULL);
1497     }
1498
1499   /* DR 613: Can use non-static data members without an associated
1500      object in sizeof/decltype/alignof.  */
1501   if (is_dummy_object (object) && cp_unevaluated_operand == 0
1502       && (!processing_template_decl || !current_class_ref))
1503     {
1504       if (current_function_decl
1505           && DECL_STATIC_FUNCTION_P (current_function_decl))
1506         error ("invalid use of member %q+D in static member function", decl);
1507       else
1508         error ("invalid use of non-static data member %q+D", decl);
1509       error ("from this location");
1510
1511       return error_mark_node;
1512     }
1513
1514   if (current_class_ptr)
1515     TREE_USED (current_class_ptr) = 1;
1516   if (processing_template_decl && !qualifying_scope)
1517     {
1518       tree type = TREE_TYPE (decl);
1519
1520       if (TREE_CODE (type) == REFERENCE_TYPE)
1521         type = TREE_TYPE (type);
1522       else
1523         {
1524           /* Set the cv qualifiers.  */
1525           int quals = (current_class_ref
1526                        ? cp_type_quals (TREE_TYPE (current_class_ref))
1527                        : TYPE_UNQUALIFIED);
1528
1529           if (DECL_MUTABLE_P (decl))
1530             quals &= ~TYPE_QUAL_CONST;
1531
1532           quals |= cp_type_quals (TREE_TYPE (decl));
1533           type = cp_build_qualified_type (type, quals);
1534         }
1535
1536       return build_min (COMPONENT_REF, type, object, decl, NULL_TREE);
1537     }
1538   /* If PROCESSING_TEMPLATE_DECL is nonzero here, then
1539      QUALIFYING_SCOPE is also non-null.  Wrap this in a SCOPE_REF
1540      for now.  */
1541   else if (processing_template_decl)
1542     return build_qualified_name (TREE_TYPE (decl),
1543                                  qualifying_scope,
1544                                  DECL_NAME (decl),
1545                                  /*template_p=*/false);
1546   else
1547     {
1548       tree access_type = TREE_TYPE (object);
1549
1550       perform_or_defer_access_check (TYPE_BINFO (access_type), decl,
1551                                      decl);
1552
1553       /* If the data member was named `C::M', convert `*this' to `C'
1554          first.  */
1555       if (qualifying_scope)
1556         {
1557           tree binfo = NULL_TREE;
1558           object = build_scoped_ref (object, qualifying_scope,
1559                                      &binfo);
1560         }
1561
1562       return build_class_member_access_expr (object, decl,
1563                                              /*access_path=*/NULL_TREE,
1564                                              /*preserve_reference=*/false,
1565                                              tf_warning_or_error);
1566     }
1567 }
1568
1569 /* If we are currently parsing a template and we encountered a typedef
1570    TYPEDEF_DECL that is being accessed though CONTEXT, this function
1571    adds the typedef to a list tied to the current template.
1572    At tempate instantiatin time, that list is walked and access check
1573    performed for each typedef.
1574    LOCATION is the location of the usage point of TYPEDEF_DECL.  */
1575
1576 void
1577 add_typedef_to_current_template_for_access_check (tree typedef_decl,
1578                                                   tree context,
1579                                                   location_t location)
1580 {
1581     tree template_info = NULL;
1582     tree cs = current_scope ();
1583
1584     if (!is_typedef_decl (typedef_decl)
1585         || !context
1586         || !CLASS_TYPE_P (context)
1587         || !cs)
1588       return;
1589
1590     if (CLASS_TYPE_P (cs) || TREE_CODE (cs) == FUNCTION_DECL)
1591       template_info = get_template_info (cs);
1592
1593     if (template_info
1594         && TI_TEMPLATE (template_info)
1595         && !currently_open_class (context))
1596       append_type_to_template_for_access_check (cs, typedef_decl,
1597                                                 context, location);
1598 }
1599
1600 /* DECL was the declaration to which a qualified-id resolved.  Issue
1601    an error message if it is not accessible.  If OBJECT_TYPE is
1602    non-NULL, we have just seen `x->' or `x.' and OBJECT_TYPE is the
1603    type of `*x', or `x', respectively.  If the DECL was named as
1604    `A::B' then NESTED_NAME_SPECIFIER is `A'.  */
1605
1606 void
1607 check_accessibility_of_qualified_id (tree decl,
1608                                      tree object_type,
1609                                      tree nested_name_specifier)
1610 {
1611   tree scope;
1612   tree qualifying_type = NULL_TREE;
1613
1614   /* If we are parsing a template declaration and if decl is a typedef,
1615      add it to a list tied to the template.
1616      At template instantiation time, that list will be walked and
1617      access check performed.  */
1618   add_typedef_to_current_template_for_access_check (decl,
1619                                                     nested_name_specifier
1620                                                     ? nested_name_specifier
1621                                                     : DECL_CONTEXT (decl),
1622                                                     input_location);
1623
1624   /* If we're not checking, return immediately.  */
1625   if (deferred_access_no_check)
1626     return;
1627
1628   /* Determine the SCOPE of DECL.  */
1629   scope = context_for_name_lookup (decl);
1630   /* If the SCOPE is not a type, then DECL is not a member.  */
1631   if (!TYPE_P (scope))
1632     return;
1633   /* Compute the scope through which DECL is being accessed.  */
1634   if (object_type
1635       /* OBJECT_TYPE might not be a class type; consider:
1636
1637            class A { typedef int I; };
1638            I *p;
1639            p->A::I::~I();
1640
1641          In this case, we will have "A::I" as the DECL, but "I" as the
1642          OBJECT_TYPE.  */
1643       && CLASS_TYPE_P (object_type)
1644       && DERIVED_FROM_P (scope, object_type))
1645     /* If we are processing a `->' or `.' expression, use the type of the
1646        left-hand side.  */
1647     qualifying_type = object_type;
1648   else if (nested_name_specifier)
1649     {
1650       /* If the reference is to a non-static member of the
1651          current class, treat it as if it were referenced through
1652          `this'.  */
1653       if (DECL_NONSTATIC_MEMBER_P (decl)
1654           && current_class_ptr
1655           && DERIVED_FROM_P (scope, current_class_type))
1656         qualifying_type = current_class_type;
1657       /* Otherwise, use the type indicated by the
1658          nested-name-specifier.  */
1659       else
1660         qualifying_type = nested_name_specifier;
1661     }
1662   else
1663     /* Otherwise, the name must be from the current class or one of
1664        its bases.  */
1665     qualifying_type = currently_open_derived_class (scope);
1666
1667   if (qualifying_type 
1668       /* It is possible for qualifying type to be a TEMPLATE_TYPE_PARM
1669          or similar in a default argument value.  */
1670       && CLASS_TYPE_P (qualifying_type)
1671       && !dependent_type_p (qualifying_type))
1672     perform_or_defer_access_check (TYPE_BINFO (qualifying_type), decl,
1673                                    decl);
1674 }
1675
1676 /* EXPR is the result of a qualified-id.  The QUALIFYING_CLASS was the
1677    class named to the left of the "::" operator.  DONE is true if this
1678    expression is a complete postfix-expression; it is false if this
1679    expression is followed by '->', '[', '(', etc.  ADDRESS_P is true
1680    iff this expression is the operand of '&'.  TEMPLATE_P is true iff
1681    the qualified-id was of the form "A::template B".  TEMPLATE_ARG_P
1682    is true iff this qualified name appears as a template argument.  */
1683
1684 tree
1685 finish_qualified_id_expr (tree qualifying_class,
1686                           tree expr,
1687                           bool done,
1688                           bool address_p,
1689                           bool template_p,
1690                           bool template_arg_p)
1691 {
1692   gcc_assert (TYPE_P (qualifying_class));
1693
1694   if (error_operand_p (expr))
1695     return error_mark_node;
1696
1697   if (DECL_P (expr) || BASELINK_P (expr))
1698     mark_used (expr);
1699
1700   if (template_p)
1701     check_template_keyword (expr);
1702
1703   /* If EXPR occurs as the operand of '&', use special handling that
1704      permits a pointer-to-member.  */
1705   if (address_p && done)
1706     {
1707       if (TREE_CODE (expr) == SCOPE_REF)
1708         expr = TREE_OPERAND (expr, 1);
1709       expr = build_offset_ref (qualifying_class, expr,
1710                                /*address_p=*/true);
1711       return expr;
1712     }
1713
1714   /* Within the scope of a class, turn references to non-static
1715      members into expression of the form "this->...".  */
1716   if (template_arg_p)
1717     /* But, within a template argument, we do not want make the
1718        transformation, as there is no "this" pointer.  */
1719     ;
1720   else if (TREE_CODE (expr) == FIELD_DECL)
1721     {
1722       push_deferring_access_checks (dk_no_check);
1723       expr = finish_non_static_data_member (expr, NULL_TREE,
1724                                             qualifying_class);
1725       pop_deferring_access_checks ();
1726     }
1727   else if (BASELINK_P (expr) && !processing_template_decl)
1728     {
1729       tree ob;
1730
1731       /* See if any of the functions are non-static members.  */
1732       /* If so, the expression may be relative to 'this'.  */
1733       if (!shared_member_p (expr)
1734           && (ob = maybe_dummy_object (qualifying_class, NULL),
1735               !is_dummy_object (ob)))
1736         expr = (build_class_member_access_expr
1737                 (ob,
1738                  expr,
1739                  BASELINK_ACCESS_BINFO (expr),
1740                  /*preserve_reference=*/false,
1741                  tf_warning_or_error));
1742       else if (done)
1743         /* The expression is a qualified name whose address is not
1744            being taken.  */
1745         expr = build_offset_ref (qualifying_class, expr, /*address_p=*/false);
1746     }
1747
1748   return expr;
1749 }
1750
1751 /* Begin a statement-expression.  The value returned must be passed to
1752    finish_stmt_expr.  */
1753
1754 tree
1755 begin_stmt_expr (void)
1756 {
1757   return push_stmt_list ();
1758 }
1759
1760 /* Process the final expression of a statement expression. EXPR can be
1761    NULL, if the final expression is empty.  Return a STATEMENT_LIST
1762    containing all the statements in the statement-expression, or
1763    ERROR_MARK_NODE if there was an error.  */
1764
1765 tree
1766 finish_stmt_expr_expr (tree expr, tree stmt_expr)
1767 {
1768   if (error_operand_p (expr))
1769     {
1770       /* The type of the statement-expression is the type of the last
1771          expression.  */
1772       TREE_TYPE (stmt_expr) = error_mark_node;
1773       return error_mark_node;
1774     }
1775
1776   /* If the last statement does not have "void" type, then the value
1777      of the last statement is the value of the entire expression.  */
1778   if (expr)
1779     {
1780       tree type = TREE_TYPE (expr);
1781
1782       if (processing_template_decl)
1783         {
1784           expr = build_stmt (input_location, EXPR_STMT, expr);
1785           expr = add_stmt (expr);
1786           /* Mark the last statement so that we can recognize it as such at
1787              template-instantiation time.  */
1788           EXPR_STMT_STMT_EXPR_RESULT (expr) = 1;
1789         }
1790       else if (VOID_TYPE_P (type))
1791         {
1792           /* Just treat this like an ordinary statement.  */
1793           expr = finish_expr_stmt (expr);
1794         }
1795       else
1796         {
1797           /* It actually has a value we need to deal with.  First, force it
1798              to be an rvalue so that we won't need to build up a copy
1799              constructor call later when we try to assign it to something.  */
1800           expr = force_rvalue (expr);
1801           if (error_operand_p (expr))
1802             return error_mark_node;
1803
1804           /* Update for array-to-pointer decay.  */
1805           type = TREE_TYPE (expr);
1806
1807           /* Wrap it in a CLEANUP_POINT_EXPR and add it to the list like a
1808              normal statement, but don't convert to void or actually add
1809              the EXPR_STMT.  */
1810           if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
1811             expr = maybe_cleanup_point_expr (expr);
1812           add_stmt (expr);
1813         }
1814
1815       /* The type of the statement-expression is the type of the last
1816          expression.  */
1817       TREE_TYPE (stmt_expr) = type;
1818     }
1819
1820   return stmt_expr;
1821 }
1822
1823 /* Finish a statement-expression.  EXPR should be the value returned
1824    by the previous begin_stmt_expr.  Returns an expression
1825    representing the statement-expression.  */
1826
1827 tree
1828 finish_stmt_expr (tree stmt_expr, bool has_no_scope)
1829 {
1830   tree type;
1831   tree result;
1832
1833   if (error_operand_p (stmt_expr))
1834     {
1835       pop_stmt_list (stmt_expr);
1836       return error_mark_node;
1837     }
1838
1839   gcc_assert (TREE_CODE (stmt_expr) == STATEMENT_LIST);
1840
1841   type = TREE_TYPE (stmt_expr);
1842   result = pop_stmt_list (stmt_expr);
1843   TREE_TYPE (result) = type;
1844
1845   if (processing_template_decl)
1846     {
1847       result = build_min (STMT_EXPR, type, result);
1848       TREE_SIDE_EFFECTS (result) = 1;
1849       STMT_EXPR_NO_SCOPE (result) = has_no_scope;
1850     }
1851   else if (CLASS_TYPE_P (type))
1852     {
1853       /* Wrap the statement-expression in a TARGET_EXPR so that the
1854          temporary object created by the final expression is destroyed at
1855          the end of the full-expression containing the
1856          statement-expression.  */
1857       result = force_target_expr (type, result);
1858     }
1859
1860   return result;
1861 }
1862
1863 /* Returns the expression which provides the value of STMT_EXPR.  */
1864
1865 tree
1866 stmt_expr_value_expr (tree stmt_expr)
1867 {
1868   tree t = STMT_EXPR_STMT (stmt_expr);
1869
1870   if (TREE_CODE (t) == BIND_EXPR)
1871     t = BIND_EXPR_BODY (t);
1872
1873   if (TREE_CODE (t) == STATEMENT_LIST && STATEMENT_LIST_TAIL (t))
1874     t = STATEMENT_LIST_TAIL (t)->stmt;
1875
1876   if (TREE_CODE (t) == EXPR_STMT)
1877     t = EXPR_STMT_EXPR (t);
1878
1879   return t;
1880 }
1881
1882 /* Return TRUE iff EXPR_STMT is an empty list of
1883    expression statements.  */
1884
1885 bool
1886 empty_expr_stmt_p (tree expr_stmt)
1887 {
1888   tree body = NULL_TREE;
1889
1890   if (expr_stmt == void_zero_node)
1891     return true;
1892
1893   if (expr_stmt)
1894     {
1895       if (TREE_CODE (expr_stmt) == EXPR_STMT)
1896         body = EXPR_STMT_EXPR (expr_stmt);
1897       else if (TREE_CODE (expr_stmt) == STATEMENT_LIST)
1898         body = expr_stmt;
1899     }
1900
1901   if (body)
1902     {
1903       if (TREE_CODE (body) == STATEMENT_LIST)
1904         return tsi_end_p (tsi_start (body));
1905       else
1906         return empty_expr_stmt_p (body);
1907     }
1908   return false;
1909 }
1910
1911 /* Perform Koenig lookup.  FN is the postfix-expression representing
1912    the function (or functions) to call; ARGS are the arguments to the
1913    call; if INCLUDE_STD then the `std' namespace is automatically
1914    considered an associated namespace (used in range-based for loops).
1915    Returns the functions to be considered by overload resolution.  */
1916
1917 tree
1918 perform_koenig_lookup (tree fn, VEC(tree,gc) *args, bool include_std)
1919 {
1920   tree identifier = NULL_TREE;
1921   tree functions = NULL_TREE;
1922   tree tmpl_args = NULL_TREE;
1923   bool template_id = false;
1924
1925   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
1926     {
1927       /* Use a separate flag to handle null args.  */
1928       template_id = true;
1929       tmpl_args = TREE_OPERAND (fn, 1);
1930       fn = TREE_OPERAND (fn, 0);
1931     }
1932
1933   /* Find the name of the overloaded function.  */
1934   if (TREE_CODE (fn) == IDENTIFIER_NODE)
1935     identifier = fn;
1936   else if (is_overloaded_fn (fn))
1937     {
1938       functions = fn;
1939       identifier = DECL_NAME (get_first_fn (functions));
1940     }
1941   else if (DECL_P (fn))
1942     {
1943       functions = fn;
1944       identifier = DECL_NAME (fn);
1945     }
1946
1947   /* A call to a namespace-scope function using an unqualified name.
1948
1949      Do Koenig lookup -- unless any of the arguments are
1950      type-dependent.  */
1951   if (!any_type_dependent_arguments_p (args)
1952       && !any_dependent_template_arguments_p (tmpl_args))
1953     {
1954       fn = lookup_arg_dependent (identifier, functions, args, include_std);
1955       if (!fn)
1956         /* The unqualified name could not be resolved.  */
1957         fn = unqualified_fn_lookup_error (identifier);
1958     }
1959
1960   if (fn && template_id)
1961     fn = build2 (TEMPLATE_ID_EXPR, unknown_type_node, fn, tmpl_args);
1962   
1963   return fn;
1964 }
1965
1966 /* Generate an expression for `FN (ARGS)'.  This may change the
1967    contents of ARGS.
1968
1969    If DISALLOW_VIRTUAL is true, the call to FN will be not generated
1970    as a virtual call, even if FN is virtual.  (This flag is set when
1971    encountering an expression where the function name is explicitly
1972    qualified.  For example a call to `X::f' never generates a virtual
1973    call.)
1974
1975    Returns code for the call.  */
1976
1977 tree
1978 finish_call_expr (tree fn, VEC(tree,gc) **args, bool disallow_virtual,
1979                   bool koenig_p, tsubst_flags_t complain)
1980 {
1981   tree result;
1982   tree orig_fn;
1983   VEC(tree,gc) *orig_args = NULL;
1984
1985   if (fn == error_mark_node)
1986     return error_mark_node;
1987
1988   gcc_assert (!TYPE_P (fn));
1989
1990   orig_fn = fn;
1991
1992   if (processing_template_decl)
1993     {
1994       if (type_dependent_expression_p (fn)
1995           || any_type_dependent_arguments_p (*args))
1996         {
1997           result = build_nt_call_vec (fn, *args);
1998           KOENIG_LOOKUP_P (result) = koenig_p;
1999           if (cfun)
2000             {
2001               do
2002                 {
2003                   tree fndecl = OVL_CURRENT (fn);
2004                   if (TREE_CODE (fndecl) != FUNCTION_DECL
2005                       || !TREE_THIS_VOLATILE (fndecl))
2006                     break;
2007                   fn = OVL_NEXT (fn);
2008                 }
2009               while (fn);
2010               if (!fn)
2011                 current_function_returns_abnormally = 1;
2012             }
2013           return result;
2014         }
2015       orig_args = make_tree_vector_copy (*args);
2016       if (!BASELINK_P (fn)
2017           && TREE_CODE (fn) != PSEUDO_DTOR_EXPR
2018           && TREE_TYPE (fn) != unknown_type_node)
2019         fn = build_non_dependent_expr (fn);
2020       make_args_non_dependent (*args);
2021     }
2022
2023   if (is_overloaded_fn (fn))
2024     fn = baselink_for_fns (fn);
2025
2026   result = NULL_TREE;
2027   if (BASELINK_P (fn))
2028     {
2029       tree object;
2030
2031       /* A call to a member function.  From [over.call.func]:
2032
2033            If the keyword this is in scope and refers to the class of
2034            that member function, or a derived class thereof, then the
2035            function call is transformed into a qualified function call
2036            using (*this) as the postfix-expression to the left of the
2037            . operator.... [Otherwise] a contrived object of type T
2038            becomes the implied object argument.
2039
2040         In this situation:
2041
2042           struct A { void f(); };
2043           struct B : public A {};
2044           struct C : public A { void g() { B::f(); }};
2045
2046         "the class of that member function" refers to `A'.  But 11.2
2047         [class.access.base] says that we need to convert 'this' to B* as
2048         part of the access, so we pass 'B' to maybe_dummy_object.  */
2049
2050       object = maybe_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
2051                                    NULL);
2052
2053       if (processing_template_decl)
2054         {
2055           if (type_dependent_expression_p (object))
2056             {
2057               tree ret = build_nt_call_vec (orig_fn, orig_args);
2058               release_tree_vector (orig_args);
2059               return ret;
2060             }
2061           object = build_non_dependent_expr (object);
2062         }
2063
2064       result = build_new_method_call (object, fn, args, NULL_TREE,
2065                                       (disallow_virtual
2066                                        ? LOOKUP_NONVIRTUAL : 0),
2067                                       /*fn_p=*/NULL,
2068                                       complain);
2069     }
2070   else if (is_overloaded_fn (fn))
2071     {
2072       /* If the function is an overloaded builtin, resolve it.  */
2073       if (TREE_CODE (fn) == FUNCTION_DECL
2074           && (DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL
2075               || DECL_BUILT_IN_CLASS (fn) == BUILT_IN_MD))
2076         result = resolve_overloaded_builtin (input_location, fn, *args);
2077
2078       if (!result)
2079         /* A call to a namespace-scope function.  */
2080         result = build_new_function_call (fn, args, koenig_p, complain);
2081     }
2082   else if (TREE_CODE (fn) == PSEUDO_DTOR_EXPR)
2083     {
2084       if (!VEC_empty (tree, *args))
2085         error ("arguments to destructor are not allowed");
2086       /* Mark the pseudo-destructor call as having side-effects so
2087          that we do not issue warnings about its use.  */
2088       result = build1 (NOP_EXPR,
2089                        void_type_node,
2090                        TREE_OPERAND (fn, 0));
2091       TREE_SIDE_EFFECTS (result) = 1;
2092     }
2093   else if (CLASS_TYPE_P (TREE_TYPE (fn)))
2094     /* If the "function" is really an object of class type, it might
2095        have an overloaded `operator ()'.  */
2096     result = build_op_call (fn, args, complain);
2097
2098   if (!result)
2099     /* A call where the function is unknown.  */
2100     result = cp_build_function_call_vec (fn, args, complain);
2101
2102   if (processing_template_decl)
2103     {
2104       result = build_call_vec (TREE_TYPE (result), orig_fn, orig_args);
2105       KOENIG_LOOKUP_P (result) = koenig_p;
2106       release_tree_vector (orig_args);
2107     }
2108
2109   return result;
2110 }
2111
2112 /* Finish a call to a postfix increment or decrement or EXPR.  (Which
2113    is indicated by CODE, which should be POSTINCREMENT_EXPR or
2114    POSTDECREMENT_EXPR.)  */
2115
2116 tree
2117 finish_increment_expr (tree expr, enum tree_code code)
2118 {
2119   return build_x_unary_op (code, expr, tf_warning_or_error);
2120 }
2121
2122 /* Finish a use of `this'.  Returns an expression for `this'.  */
2123
2124 tree
2125 finish_this_expr (void)
2126 {
2127   tree result;
2128
2129   if (current_class_ptr)
2130     {
2131       tree type = TREE_TYPE (current_class_ref);
2132
2133       /* In a lambda expression, 'this' refers to the captured 'this'.  */
2134       if (LAMBDA_TYPE_P (type))
2135         result = lambda_expr_this_capture (CLASSTYPE_LAMBDA_EXPR (type));
2136       else
2137         result = current_class_ptr;
2138
2139     }
2140   else if (current_function_decl
2141            && DECL_STATIC_FUNCTION_P (current_function_decl))
2142     {
2143       error ("%<this%> is unavailable for static member functions");
2144       result = error_mark_node;
2145     }
2146   else
2147     {
2148       if (current_function_decl)
2149         error ("invalid use of %<this%> in non-member function");
2150       else
2151         error ("invalid use of %<this%> at top level");
2152       result = error_mark_node;
2153     }
2154
2155   return result;
2156 }
2157
2158 /* Finish a pseudo-destructor expression.  If SCOPE is NULL, the
2159    expression was of the form `OBJECT.~DESTRUCTOR' where DESTRUCTOR is
2160    the TYPE for the type given.  If SCOPE is non-NULL, the expression
2161    was of the form `OBJECT.SCOPE::~DESTRUCTOR'.  */
2162
2163 tree
2164 finish_pseudo_destructor_expr (tree object, tree scope, tree destructor)
2165 {
2166   if (object == error_mark_node || destructor == error_mark_node)
2167     return error_mark_node;
2168
2169   gcc_assert (TYPE_P (destructor));
2170
2171   if (!processing_template_decl)
2172     {
2173       if (scope == error_mark_node)
2174         {
2175           error ("invalid qualifying scope in pseudo-destructor name");
2176           return error_mark_node;
2177         }
2178       if (scope && TYPE_P (scope) && !check_dtor_name (scope, destructor))
2179         {
2180           error ("qualified type %qT does not match destructor name ~%qT",
2181                  scope, destructor);
2182           return error_mark_node;
2183         }
2184
2185
2186       /* [expr.pseudo] says both:
2187
2188            The type designated by the pseudo-destructor-name shall be
2189            the same as the object type.
2190
2191          and:
2192
2193            The cv-unqualified versions of the object type and of the
2194            type designated by the pseudo-destructor-name shall be the
2195            same type.
2196
2197          We implement the more generous second sentence, since that is
2198          what most other compilers do.  */
2199       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (object),
2200                                                       destructor))
2201         {
2202           error ("%qE is not of type %qT", object, destructor);
2203           return error_mark_node;
2204         }
2205     }
2206
2207   return build3 (PSEUDO_DTOR_EXPR, void_type_node, object, scope, destructor);
2208 }
2209
2210 /* Finish an expression of the form CODE EXPR.  */
2211
2212 tree
2213 finish_unary_op_expr (enum tree_code code, tree expr)
2214 {
2215   tree result = build_x_unary_op (code, expr, tf_warning_or_error);
2216   /* Inside a template, build_x_unary_op does not fold the
2217      expression. So check whether the result is folded before
2218      setting TREE_NEGATED_INT.  */
2219   if (code == NEGATE_EXPR && TREE_CODE (expr) == INTEGER_CST
2220       && TREE_CODE (result) == INTEGER_CST
2221       && !TYPE_UNSIGNED (TREE_TYPE (result))
2222       && INT_CST_LT (result, integer_zero_node))
2223     {
2224       /* RESULT may be a cached INTEGER_CST, so we must copy it before
2225          setting TREE_NEGATED_INT.  */
2226       result = copy_node (result);
2227       TREE_NEGATED_INT (result) = 1;
2228     }
2229   if (TREE_OVERFLOW_P (result) && !TREE_OVERFLOW_P (expr))
2230     overflow_warning (input_location, result);
2231
2232   return result;
2233 }
2234
2235 /* Finish a compound-literal expression.  TYPE is the type to which
2236    the CONSTRUCTOR in COMPOUND_LITERAL is being cast.  */
2237
2238 tree
2239 finish_compound_literal (tree type, tree compound_literal)
2240 {
2241   if (type == error_mark_node)
2242     return error_mark_node;
2243
2244   if (!TYPE_OBJ_P (type))
2245     {
2246       error ("compound literal of non-object type %qT", type);
2247       return error_mark_node;
2248     }
2249
2250   if (processing_template_decl)
2251     {
2252       TREE_TYPE (compound_literal) = type;
2253       /* Mark the expression as a compound literal.  */
2254       TREE_HAS_CONSTRUCTOR (compound_literal) = 1;
2255       return compound_literal;
2256     }
2257
2258   type = complete_type (type);
2259
2260   if (TYPE_NON_AGGREGATE_CLASS (type))
2261     {
2262       /* Trying to deal with a CONSTRUCTOR instead of a TREE_LIST
2263          everywhere that deals with function arguments would be a pain, so
2264          just wrap it in a TREE_LIST.  The parser set a flag so we know
2265          that it came from T{} rather than T({}).  */
2266       CONSTRUCTOR_IS_DIRECT_INIT (compound_literal) = 1;
2267       compound_literal = build_tree_list (NULL_TREE, compound_literal);
2268       return build_functional_cast (type, compound_literal, tf_error);
2269     }
2270
2271   if (TREE_CODE (type) == ARRAY_TYPE
2272       && check_array_initializer (NULL_TREE, type, compound_literal))
2273     return error_mark_node;
2274   compound_literal = reshape_init (type, compound_literal);
2275   if (TREE_CODE (type) == ARRAY_TYPE)
2276     cp_complete_array_type (&type, compound_literal, false);
2277   compound_literal = digest_init (type, compound_literal);
2278   return get_target_expr (compound_literal);
2279 }
2280
2281 /* Return the declaration for the function-name variable indicated by
2282    ID.  */
2283
2284 tree
2285 finish_fname (tree id)
2286 {
2287   tree decl;
2288
2289   decl = fname_decl (input_location, C_RID_CODE (id), id);
2290   if (processing_template_decl)
2291     decl = DECL_NAME (decl);
2292   return decl;
2293 }
2294
2295 /* Finish a translation unit.  */
2296
2297 void
2298 finish_translation_unit (void)
2299 {
2300   /* In case there were missing closebraces,
2301      get us back to the global binding level.  */
2302   pop_everything ();
2303   while (current_namespace != global_namespace)
2304     pop_namespace ();
2305
2306   /* Do file scope __FUNCTION__ et al.  */
2307   finish_fname_decls ();
2308 }
2309
2310 /* Finish a template type parameter, specified as AGGR IDENTIFIER.
2311    Returns the parameter.  */
2312
2313 tree
2314 finish_template_type_parm (tree aggr, tree identifier)
2315 {
2316   if (aggr != class_type_node)
2317     {
2318       permerror (input_location, "template type parameters must use the keyword %<class%> or %<typename%>");
2319       aggr = class_type_node;
2320     }
2321
2322   return build_tree_list (aggr, identifier);
2323 }
2324
2325 /* Finish a template template parameter, specified as AGGR IDENTIFIER.
2326    Returns the parameter.  */
2327
2328 tree
2329 finish_template_template_parm (tree aggr, tree identifier)
2330 {
2331   tree decl = build_decl (input_location,
2332                           TYPE_DECL, identifier, NULL_TREE);
2333   tree tmpl = build_lang_decl (TEMPLATE_DECL, identifier, NULL_TREE);
2334   DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
2335   DECL_TEMPLATE_RESULT (tmpl) = decl;
2336   DECL_ARTIFICIAL (decl) = 1;
2337   end_template_decl ();
2338
2339   gcc_assert (DECL_TEMPLATE_PARMS (tmpl));
2340
2341   check_default_tmpl_args (decl, DECL_TEMPLATE_PARMS (tmpl), 
2342                            /*is_primary=*/true, /*is_partial=*/false,
2343                            /*is_friend=*/0);
2344
2345   return finish_template_type_parm (aggr, tmpl);
2346 }
2347
2348 /* ARGUMENT is the default-argument value for a template template
2349    parameter.  If ARGUMENT is invalid, issue error messages and return
2350    the ERROR_MARK_NODE.  Otherwise, ARGUMENT itself is returned.  */
2351
2352 tree
2353 check_template_template_default_arg (tree argument)
2354 {
2355   if (TREE_CODE (argument) != TEMPLATE_DECL
2356       && TREE_CODE (argument) != TEMPLATE_TEMPLATE_PARM
2357       && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
2358     {
2359       if (TREE_CODE (argument) == TYPE_DECL)
2360         error ("invalid use of type %qT as a default value for a template "
2361                "template-parameter", TREE_TYPE (argument));
2362       else
2363         error ("invalid default argument for a template template parameter");
2364       return error_mark_node;
2365     }
2366
2367   return argument;
2368 }
2369
2370 /* Begin a class definition, as indicated by T.  */
2371
2372 tree
2373 begin_class_definition (tree t, tree attributes)
2374 {
2375   if (error_operand_p (t) || error_operand_p (TYPE_MAIN_DECL (t)))
2376     return error_mark_node;
2377
2378   if (processing_template_parmlist)
2379     {
2380       error ("definition of %q#T inside template parameter list", t);
2381       return error_mark_node;
2382     }
2383
2384   /* According to the C++ ABI, decimal classes defined in ISO/IEC TR 24733
2385      are passed the same as decimal scalar types.  */
2386   if (TREE_CODE (t) == RECORD_TYPE
2387       && !processing_template_decl)
2388     {
2389       tree ns = TYPE_CONTEXT (t);
2390       if (ns && TREE_CODE (ns) == NAMESPACE_DECL
2391           && DECL_CONTEXT (ns) == std_node
2392           && DECL_NAME (ns)
2393           && !strcmp (IDENTIFIER_POINTER (DECL_NAME (ns)), "decimal"))
2394         {
2395           const char *n = TYPE_NAME_STRING (t);
2396           if ((strcmp (n, "decimal32") == 0)
2397               || (strcmp (n, "decimal64") == 0)
2398               || (strcmp (n, "decimal128") == 0))
2399             TYPE_TRANSPARENT_AGGR (t) = 1;
2400         }
2401     }
2402
2403   /* A non-implicit typename comes from code like:
2404
2405        template <typename T> struct A {
2406          template <typename U> struct A<T>::B ...
2407
2408      This is erroneous.  */
2409   else if (TREE_CODE (t) == TYPENAME_TYPE)
2410     {
2411       error ("invalid definition of qualified type %qT", t);
2412       t = error_mark_node;
2413     }
2414
2415   if (t == error_mark_node || ! MAYBE_CLASS_TYPE_P (t))
2416     {
2417       t = make_class_type (RECORD_TYPE);
2418       pushtag (make_anon_name (), t, /*tag_scope=*/ts_current);
2419     }
2420
2421   if (TYPE_BEING_DEFINED (t))
2422     {
2423       t = make_class_type (TREE_CODE (t));
2424       pushtag (TYPE_IDENTIFIER (t), t, /*tag_scope=*/ts_current);
2425     }
2426   maybe_process_partial_specialization (t);
2427   pushclass (t);
2428   TYPE_BEING_DEFINED (t) = 1;
2429
2430   cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
2431   fixup_attribute_variants (t);
2432
2433   if (flag_pack_struct)
2434     {
2435       tree v;
2436       TYPE_PACKED (t) = 1;
2437       /* Even though the type is being defined for the first time
2438          here, there might have been a forward declaration, so there
2439          might be cv-qualified variants of T.  */
2440       for (v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
2441         TYPE_PACKED (v) = 1;
2442     }
2443   /* Reset the interface data, at the earliest possible
2444      moment, as it might have been set via a class foo;
2445      before.  */
2446   if (! TYPE_ANONYMOUS_P (t))
2447     {
2448       struct c_fileinfo *finfo = get_fileinfo (input_filename);
2449       CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
2450       SET_CLASSTYPE_INTERFACE_UNKNOWN_X
2451         (t, finfo->interface_unknown);
2452     }
2453   reset_specialization();
2454
2455   /* Make a declaration for this class in its own scope.  */
2456   build_self_reference ();
2457
2458   return t;
2459 }
2460
2461 /* Finish the member declaration given by DECL.  */
2462
2463 void
2464 finish_member_declaration (tree decl)
2465 {
2466   if (decl == error_mark_node || decl == NULL_TREE)
2467     return;
2468
2469   if (decl == void_type_node)
2470     /* The COMPONENT was a friend, not a member, and so there's
2471        nothing for us to do.  */
2472     return;
2473
2474   /* We should see only one DECL at a time.  */
2475   gcc_assert (DECL_CHAIN (decl) == NULL_TREE);
2476
2477   /* Set up access control for DECL.  */
2478   TREE_PRIVATE (decl)
2479     = (current_access_specifier == access_private_node);
2480   TREE_PROTECTED (decl)
2481     = (current_access_specifier == access_protected_node);
2482   if (TREE_CODE (decl) == TEMPLATE_DECL)
2483     {
2484       TREE_PRIVATE (DECL_TEMPLATE_RESULT (decl)) = TREE_PRIVATE (decl);
2485       TREE_PROTECTED (DECL_TEMPLATE_RESULT (decl)) = TREE_PROTECTED (decl);
2486     }
2487
2488   /* Mark the DECL as a member of the current class.  */
2489   DECL_CONTEXT (decl) = current_class_type;
2490
2491   /* Check for bare parameter packs in the member variable declaration.  */
2492   if (TREE_CODE (decl) == FIELD_DECL)
2493     {
2494       if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
2495         TREE_TYPE (decl) = error_mark_node;
2496       if (check_for_bare_parameter_packs (DECL_ATTRIBUTES (decl)))
2497         DECL_ATTRIBUTES (decl) = NULL_TREE;
2498     }
2499
2500   /* [dcl.link]
2501
2502      A C language linkage is ignored for the names of class members
2503      and the member function type of class member functions.  */
2504   if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
2505     SET_DECL_LANGUAGE (decl, lang_cplusplus);
2506
2507   /* Put functions on the TYPE_METHODS list and everything else on the
2508      TYPE_FIELDS list.  Note that these are built up in reverse order.
2509      We reverse them (to obtain declaration order) in finish_struct.  */
2510   if (TREE_CODE (decl) == FUNCTION_DECL
2511       || DECL_FUNCTION_TEMPLATE_P (decl))
2512     {
2513       /* We also need to add this function to the
2514          CLASSTYPE_METHOD_VEC.  */
2515       if (add_method (current_class_type, decl, NULL_TREE))
2516         {
2517           DECL_CHAIN (decl) = TYPE_METHODS (current_class_type);
2518           TYPE_METHODS (current_class_type) = decl;
2519
2520           maybe_add_class_template_decl_list (current_class_type, decl,
2521                                               /*friend_p=*/0);
2522         }
2523     }
2524   /* Enter the DECL into the scope of the class.  */
2525   else if ((TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
2526            || pushdecl_class_level (decl))
2527     {
2528       /* All TYPE_DECLs go at the end of TYPE_FIELDS.  Ordinary fields
2529          go at the beginning.  The reason is that lookup_field_1
2530          searches the list in order, and we want a field name to
2531          override a type name so that the "struct stat hack" will
2532          work.  In particular:
2533
2534            struct S { enum E { }; int E } s;
2535            s.E = 3;
2536
2537          is valid.  In addition, the FIELD_DECLs must be maintained in
2538          declaration order so that class layout works as expected.
2539          However, we don't need that order until class layout, so we
2540          save a little time by putting FIELD_DECLs on in reverse order
2541          here, and then reversing them in finish_struct_1.  (We could
2542          also keep a pointer to the correct insertion points in the
2543          list.)  */
2544
2545       if (TREE_CODE (decl) == TYPE_DECL)
2546         TYPE_FIELDS (current_class_type)
2547           = chainon (TYPE_FIELDS (current_class_type), decl);
2548       else
2549         {
2550           DECL_CHAIN (decl) = TYPE_FIELDS (current_class_type);
2551           TYPE_FIELDS (current_class_type) = decl;
2552         }
2553
2554       maybe_add_class_template_decl_list (current_class_type, decl,
2555                                           /*friend_p=*/0);
2556     }
2557
2558   if (pch_file)
2559     note_decl_for_pch (decl);
2560 }
2561
2562 /* DECL has been declared while we are building a PCH file.  Perform
2563    actions that we might normally undertake lazily, but which can be
2564    performed now so that they do not have to be performed in
2565    translation units which include the PCH file.  */
2566
2567 void
2568 note_decl_for_pch (tree decl)
2569 {
2570   gcc_assert (pch_file);
2571
2572   /* There's a good chance that we'll have to mangle names at some
2573      point, even if only for emission in debugging information.  */
2574   if ((TREE_CODE (decl) == VAR_DECL
2575        || TREE_CODE (decl) == FUNCTION_DECL)
2576       && !processing_template_decl)
2577     mangle_decl (decl);
2578 }
2579
2580 /* Finish processing a complete template declaration.  The PARMS are
2581    the template parameters.  */
2582
2583 void
2584 finish_template_decl (tree parms)
2585 {
2586   if (parms)
2587     end_template_decl ();
2588   else
2589     end_specialization ();
2590 }
2591
2592 /* Finish processing a template-id (which names a type) of the form
2593    NAME < ARGS >.  Return the TYPE_DECL for the type named by the
2594    template-id.  If ENTERING_SCOPE is nonzero we are about to enter
2595    the scope of template-id indicated.  */
2596
2597 tree
2598 finish_template_type (tree name, tree args, int entering_scope)
2599 {
2600   tree decl;
2601
2602   decl = lookup_template_class (name, args,
2603                                 NULL_TREE, NULL_TREE, entering_scope,
2604                                 tf_warning_or_error | tf_user);
2605   if (decl != error_mark_node)
2606     decl = TYPE_STUB_DECL (decl);
2607
2608   return decl;
2609 }
2610
2611 /* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2612    Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2613    BASE_CLASS, or NULL_TREE if an error occurred.  The
2614    ACCESS_SPECIFIER is one of
2615    access_{default,public,protected_private}_node.  For a virtual base
2616    we set TREE_TYPE.  */
2617
2618 tree
2619 finish_base_specifier (tree base, tree access, bool virtual_p)
2620 {
2621   tree result;
2622
2623   if (base == error_mark_node)
2624     {
2625       error ("invalid base-class specification");
2626       result = NULL_TREE;
2627     }
2628   else if (! MAYBE_CLASS_TYPE_P (base))
2629     {
2630       error ("%qT is not a class type", base);
2631       result = NULL_TREE;
2632     }
2633   else
2634     {
2635       if (cp_type_quals (base) != 0)
2636         {
2637           error ("base class %qT has cv qualifiers", base);
2638           base = TYPE_MAIN_VARIANT (base);
2639         }
2640       result = build_tree_list (access, base);
2641       if (virtual_p)
2642         TREE_TYPE (result) = integer_type_node;
2643     }
2644
2645   return result;
2646 }
2647
2648 /* Issue a diagnostic that NAME cannot be found in SCOPE.  DECL is
2649    what we found when we tried to do the lookup.
2650    LOCATION is the location of the NAME identifier;
2651    The location is used in the error message*/
2652
2653 void
2654 qualified_name_lookup_error (tree scope, tree name,
2655                              tree decl, location_t location)
2656 {
2657   if (scope == error_mark_node)
2658     ; /* We already complained.  */
2659   else if (TYPE_P (scope))
2660     {
2661       if (!COMPLETE_TYPE_P (scope))
2662         error_at (location, "incomplete type %qT used in nested name specifier",
2663                   scope);
2664       else if (TREE_CODE (decl) == TREE_LIST)
2665         {
2666           error_at (location, "reference to %<%T::%D%> is ambiguous",
2667                     scope, name);
2668           print_candidates (decl);
2669         }
2670       else
2671         error_at (location, "%qD is not a member of %qT", name, scope);
2672     }
2673   else if (scope != global_namespace)
2674     error_at (location, "%qD is not a member of %qD", name, scope);
2675   else
2676     error_at (location, "%<::%D%> has not been declared", name);
2677 }
2678
2679 /* If FNS is a member function, a set of member functions, or a
2680    template-id referring to one or more member functions, return a
2681    BASELINK for FNS, incorporating the current access context.
2682    Otherwise, return FNS unchanged.  */
2683
2684 tree
2685 baselink_for_fns (tree fns)
2686 {
2687   tree fn;
2688   tree cl;
2689
2690   if (BASELINK_P (fns) 
2691       || error_operand_p (fns))
2692     return fns;
2693   
2694   fn = fns;
2695   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2696     fn = TREE_OPERAND (fn, 0);
2697   fn = get_first_fn (fn);
2698   if (!DECL_FUNCTION_MEMBER_P (fn))
2699     return fns;
2700
2701   cl = currently_open_derived_class (DECL_CONTEXT (fn));
2702   if (!cl)
2703     cl = DECL_CONTEXT (fn);
2704   cl = TYPE_BINFO (cl);
2705   return build_baselink (cl, cl, fns, /*optype=*/NULL_TREE);
2706 }
2707
2708 /* Returns true iff DECL is an automatic variable from a function outside
2709    the current one.  */
2710
2711 static bool
2712 outer_automatic_var_p (tree decl)
2713 {
2714   return ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
2715           && DECL_FUNCTION_SCOPE_P (decl)
2716           && !TREE_STATIC (decl)
2717           && DECL_CONTEXT (decl) != current_function_decl);
2718 }
2719
2720 /* Returns true iff DECL is a capture field from a lambda that is not our
2721    immediate context.  */
2722
2723 static bool
2724 outer_lambda_capture_p (tree decl)
2725 {
2726   return (TREE_CODE (decl) == FIELD_DECL
2727           && LAMBDA_TYPE_P (DECL_CONTEXT (decl))
2728           && (!current_class_type
2729               || !DERIVED_FROM_P (DECL_CONTEXT (decl), current_class_type)));
2730 }
2731
2732 /* ID_EXPRESSION is a representation of parsed, but unprocessed,
2733    id-expression.  (See cp_parser_id_expression for details.)  SCOPE,
2734    if non-NULL, is the type or namespace used to explicitly qualify
2735    ID_EXPRESSION.  DECL is the entity to which that name has been
2736    resolved.
2737
2738    *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2739    constant-expression.  In that case, *NON_CONSTANT_EXPRESSION_P will
2740    be set to true if this expression isn't permitted in a
2741    constant-expression, but it is otherwise not set by this function.
2742    *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2743    constant-expression, but a non-constant expression is also
2744    permissible.
2745
2746    DONE is true if this expression is a complete postfix-expression;
2747    it is false if this expression is followed by '->', '[', '(', etc.
2748    ADDRESS_P is true iff this expression is the operand of '&'.
2749    TEMPLATE_P is true iff the qualified-id was of the form
2750    "A::template B".  TEMPLATE_ARG_P is true iff this qualified name
2751    appears as a template argument.
2752
2753    If an error occurs, and it is the kind of error that might cause
2754    the parser to abort a tentative parse, *ERROR_MSG is filled in.  It
2755    is the caller's responsibility to issue the message.  *ERROR_MSG
2756    will be a string with static storage duration, so the caller need
2757    not "free" it.
2758
2759    Return an expression for the entity, after issuing appropriate
2760    diagnostics.  This function is also responsible for transforming a
2761    reference to a non-static member into a COMPONENT_REF that makes
2762    the use of "this" explicit.
2763
2764    Upon return, *IDK will be filled in appropriately.  */
2765 tree
2766 finish_id_expression (tree id_expression,
2767                       tree decl,
2768                       tree scope,
2769                       cp_id_kind *idk,
2770                       bool integral_constant_expression_p,
2771                       bool allow_non_integral_constant_expression_p,
2772                       bool *non_integral_constant_expression_p,
2773                       bool template_p,
2774                       bool done,
2775                       bool address_p,
2776                       bool template_arg_p,
2777                       const char **error_msg,
2778                       location_t location)
2779 {
2780   /* Initialize the output parameters.  */
2781   *idk = CP_ID_KIND_NONE;
2782   *error_msg = NULL;
2783
2784   if (id_expression == error_mark_node)
2785     return error_mark_node;
2786   /* If we have a template-id, then no further lookup is
2787      required.  If the template-id was for a template-class, we
2788      will sometimes have a TYPE_DECL at this point.  */
2789   else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2790            || TREE_CODE (decl) == TYPE_DECL)
2791     ;
2792   /* Look up the name.  */
2793   else
2794     {
2795       if (decl == error_mark_node)
2796         {
2797           /* Name lookup failed.  */
2798           if (scope
2799               && (!TYPE_P (scope)
2800                   || (!dependent_type_p (scope)
2801                       && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
2802                            && IDENTIFIER_TYPENAME_P (id_expression)
2803                            && dependent_type_p (TREE_TYPE (id_expression))))))
2804             {
2805               /* If the qualifying type is non-dependent (and the name
2806                  does not name a conversion operator to a dependent
2807                  type), issue an error.  */
2808               qualified_name_lookup_error (scope, id_expression, decl, location);
2809               return error_mark_node;
2810             }
2811           else if (!scope)
2812             {
2813               /* It may be resolved via Koenig lookup.  */
2814               *idk = CP_ID_KIND_UNQUALIFIED;
2815               return id_expression;
2816             }
2817           else
2818             decl = id_expression;
2819         }
2820       /* If DECL is a variable that would be out of scope under
2821          ANSI/ISO rules, but in scope in the ARM, name lookup
2822          will succeed.  Issue a diagnostic here.  */
2823       else
2824         decl = check_for_out_of_scope_variable (decl);
2825
2826       /* Remember that the name was used in the definition of
2827          the current class so that we can check later to see if
2828          the meaning would have been different after the class
2829          was entirely defined.  */
2830       if (!scope && decl != error_mark_node)
2831         maybe_note_name_used_in_class (id_expression, decl);
2832
2833       /* Disallow uses of local variables from containing functions, except
2834          within lambda-expressions.  */
2835       if ((outer_automatic_var_p (decl)
2836            || outer_lambda_capture_p (decl))
2837           /* It's not a use (3.2) if we're in an unevaluated context.  */
2838           && !cp_unevaluated_operand)
2839         {
2840           tree context = DECL_CONTEXT (decl);
2841           tree containing_function = current_function_decl;
2842           tree lambda_stack = NULL_TREE;
2843           tree lambda_expr = NULL_TREE;
2844           tree initializer = decl;
2845
2846           /* Core issue 696: "[At the July 2009 meeting] the CWG expressed
2847              support for an approach in which a reference to a local
2848              [constant] automatic variable in a nested class or lambda body
2849              would enter the expression as an rvalue, which would reduce
2850              the complexity of the problem"
2851
2852              FIXME update for final resolution of core issue 696.  */
2853           if (decl_constant_var_p (decl))
2854             return integral_constant_value (decl);
2855
2856           if (TYPE_P (context))
2857             {
2858               /* Implicit capture of an explicit capture.  */
2859               context = lambda_function (context);
2860               initializer = thisify_lambda_field (decl);
2861             }
2862
2863           /* If we are in a lambda function, we can move out until we hit
2864              1. the context,
2865              2. a non-lambda function, or
2866              3. a non-default capturing lambda function.  */
2867           while (context != containing_function
2868                  && LAMBDA_FUNCTION_P (containing_function))
2869             {
2870               lambda_expr = CLASSTYPE_LAMBDA_EXPR
2871                 (DECL_CONTEXT (containing_function));
2872
2873               if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr)
2874                   == CPLD_NONE)
2875                 break;
2876
2877               lambda_stack = tree_cons (NULL_TREE,
2878                                         lambda_expr,
2879                                         lambda_stack);
2880
2881               containing_function
2882                 = decl_function_context (containing_function);
2883             }
2884
2885           if (context == containing_function)
2886             {
2887               decl = add_default_capture (lambda_stack,
2888                                           /*id=*/DECL_NAME (decl),
2889                                           initializer);
2890             }
2891           else if (lambda_expr)
2892             {
2893               error ("%qD is not captured", decl);
2894               return error_mark_node;
2895             }
2896           else
2897             {
2898               error (TREE_CODE (decl) == VAR_DECL
2899                      ? "use of %<auto%> variable from containing function"
2900                      : "use of parameter from containing function");
2901               error ("  %q+#D declared here", decl);
2902               return error_mark_node;
2903             }
2904         }
2905
2906       /* Also disallow uses of function parameters outside the function
2907          body, except inside an unevaluated context (i.e. decltype).  */
2908       if (TREE_CODE (decl) == PARM_DECL
2909           && DECL_CONTEXT (decl) == NULL_TREE
2910           && !cp_unevaluated_operand)
2911         {
2912           error ("use of parameter %qD outside function body", decl);
2913           return error_mark_node;
2914         }
2915     }
2916
2917   /* If we didn't find anything, or what we found was a type,
2918      then this wasn't really an id-expression.  */
2919   if (TREE_CODE (decl) == TEMPLATE_DECL
2920       && !DECL_FUNCTION_TEMPLATE_P (decl))
2921     {
2922       *error_msg = "missing template arguments";
2923       return error_mark_node;
2924     }
2925   else if (TREE_CODE (decl) == TYPE_DECL
2926            || TREE_CODE (decl) == NAMESPACE_DECL)
2927     {
2928       *error_msg = "expected primary-expression";
2929       return error_mark_node;
2930     }
2931
2932   /* If the name resolved to a template parameter, there is no
2933      need to look it up again later.  */
2934   if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
2935       || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2936     {
2937       tree r;
2938
2939       *idk = CP_ID_KIND_NONE;
2940       if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2941         decl = TEMPLATE_PARM_DECL (decl);
2942       r = convert_from_reference (DECL_INITIAL (decl));
2943
2944       if (integral_constant_expression_p
2945           && !dependent_type_p (TREE_TYPE (decl))
2946           && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
2947         {
2948           if (!allow_non_integral_constant_expression_p)
2949             error ("template parameter %qD of type %qT is not allowed in "
2950                    "an integral constant expression because it is not of "
2951                    "integral or enumeration type", decl, TREE_TYPE (decl));
2952           *non_integral_constant_expression_p = true;
2953         }
2954       return r;
2955     }
2956   /* Similarly, we resolve enumeration constants to their
2957      underlying values.  */
2958   else if (TREE_CODE (decl) == CONST_DECL)
2959     {
2960       *idk = CP_ID_KIND_NONE;
2961       if (!processing_template_decl)
2962         {
2963           used_types_insert (TREE_TYPE (decl));
2964           return DECL_INITIAL (decl);
2965         }
2966       return decl;
2967     }
2968   else
2969     {
2970       bool dependent_p;
2971
2972       /* If the declaration was explicitly qualified indicate
2973          that.  The semantics of `A::f(3)' are different than
2974          `f(3)' if `f' is virtual.  */
2975       *idk = (scope
2976               ? CP_ID_KIND_QUALIFIED
2977               : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2978                  ? CP_ID_KIND_TEMPLATE_ID
2979                  : CP_ID_KIND_UNQUALIFIED));
2980
2981
2982       /* [temp.dep.expr]
2983
2984          An id-expression is type-dependent if it contains an
2985          identifier that was declared with a dependent type.
2986
2987          The standard is not very specific about an id-expression that
2988          names a set of overloaded functions.  What if some of them
2989          have dependent types and some of them do not?  Presumably,
2990          such a name should be treated as a dependent name.  */
2991       /* Assume the name is not dependent.  */
2992       dependent_p = false;
2993       if (!processing_template_decl)
2994         /* No names are dependent outside a template.  */
2995         ;
2996       /* A template-id where the name of the template was not resolved
2997          is definitely dependent.  */
2998       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2999                && (TREE_CODE (TREE_OPERAND (decl, 0))
3000                    == IDENTIFIER_NODE))
3001         dependent_p = true;
3002       /* For anything except an overloaded function, just check its
3003          type.  */
3004       else if (!is_overloaded_fn (decl))
3005         dependent_p
3006           = dependent_type_p (TREE_TYPE (decl));
3007       /* For a set of overloaded functions, check each of the
3008          functions.  */
3009       else
3010         {
3011           tree fns = decl;
3012
3013           if (BASELINK_P (fns))
3014             fns = BASELINK_FUNCTIONS (fns);
3015
3016           /* For a template-id, check to see if the template
3017              arguments are dependent.  */
3018           if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
3019             {
3020               tree args = TREE_OPERAND (fns, 1);
3021               dependent_p = any_dependent_template_arguments_p (args);
3022               /* The functions are those referred to by the
3023                  template-id.  */
3024               fns = TREE_OPERAND (fns, 0);
3025             }
3026
3027           /* If there are no dependent template arguments, go through
3028              the overloaded functions.  */
3029           while (fns && !dependent_p)
3030             {
3031               tree fn = OVL_CURRENT (fns);
3032
3033               /* Member functions of dependent classes are
3034                  dependent.  */
3035               if (TREE_CODE (fn) == FUNCTION_DECL
3036                   && type_dependent_expression_p (fn))
3037                 dependent_p = true;
3038               else if (TREE_CODE (fn) == TEMPLATE_DECL
3039                        && dependent_template_p (fn))
3040                 dependent_p = true;
3041
3042               fns = OVL_NEXT (fns);
3043             }
3044         }
3045
3046       /* If the name was dependent on a template parameter, we will
3047          resolve the name at instantiation time.  */
3048       if (dependent_p)
3049         {
3050           /* Create a SCOPE_REF for qualified names, if the scope is
3051              dependent.  */
3052           if (scope)
3053             {
3054               if (TYPE_P (scope))
3055                 {
3056                   if (address_p && done)
3057                     decl = finish_qualified_id_expr (scope, decl,
3058                                                      done, address_p,
3059                                                      template_p,
3060                                                      template_arg_p);
3061                   else
3062                     {
3063                       tree type = NULL_TREE;
3064                       if (DECL_P (decl) && !dependent_scope_p (scope))
3065                         type = TREE_TYPE (decl);
3066                       decl = build_qualified_name (type,
3067                                                    scope,
3068                                                    id_expression,
3069                                                    template_p);
3070                     }
3071                 }
3072               if (TREE_TYPE (decl))
3073                 decl = convert_from_reference (decl);
3074               return decl;
3075             }
3076           /* A TEMPLATE_ID already contains all the information we
3077              need.  */
3078           if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
3079             return id_expression;
3080           *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
3081           /* If we found a variable, then name lookup during the
3082              instantiation will always resolve to the same VAR_DECL
3083              (or an instantiation thereof).  */
3084           if (TREE_CODE (decl) == VAR_DECL
3085               || TREE_CODE (decl) == PARM_DECL)
3086             return convert_from_reference (decl);
3087           /* The same is true for FIELD_DECL, but we also need to
3088              make sure that the syntax is correct.  */
3089           else if (TREE_CODE (decl) == FIELD_DECL)
3090             {
3091               /* Since SCOPE is NULL here, this is an unqualified name.
3092                  Access checking has been performed during name lookup
3093                  already.  Turn off checking to avoid duplicate errors.  */
3094               push_deferring_access_checks (dk_no_check);
3095               decl = finish_non_static_data_member
3096                        (decl, NULL_TREE,
3097                         /*qualifying_scope=*/NULL_TREE);
3098               pop_deferring_access_checks ();
3099               return decl;
3100             }
3101           return id_expression;
3102         }
3103
3104       if (TREE_CODE (decl) == NAMESPACE_DECL)
3105         {
3106           error ("use of namespace %qD as expression", decl);
3107           return error_mark_node;
3108         }
3109       else if (DECL_CLASS_TEMPLATE_P (decl))
3110         {
3111           error ("use of class template %qT as expression", decl);
3112           return error_mark_node;
3113         }
3114       else if (TREE_CODE (decl) == TREE_LIST)
3115         {
3116           /* Ambiguous reference to base members.  */
3117           error ("request for member %qD is ambiguous in "
3118                  "multiple inheritance lattice", id_expression);
3119           print_candidates (decl);
3120           return error_mark_node;
3121         }
3122
3123       /* Mark variable-like entities as used.  Functions are similarly
3124          marked either below or after overload resolution.  */
3125       if (TREE_CODE (decl) == VAR_DECL
3126           || TREE_CODE (decl) == PARM_DECL
3127           || TREE_CODE (decl) == RESULT_DECL)
3128         mark_used (decl);
3129
3130       /* Only certain kinds of names are allowed in constant
3131          expression.  Enumerators and template parameters have already
3132          been handled above.  */
3133       if (integral_constant_expression_p
3134           && ! decl_constant_var_p (decl)
3135           && ! builtin_valid_in_constant_expr_p (decl))
3136         {
3137           if (!allow_non_integral_constant_expression_p)
3138             {
3139               error ("%qD cannot appear in a constant-expression", decl);
3140               return error_mark_node;
3141             }
3142           *non_integral_constant_expression_p = true;
3143         }
3144
3145       if (scope)
3146         {
3147           decl = (adjust_result_of_qualified_name_lookup
3148                   (decl, scope, current_class_type));
3149
3150           if (TREE_CODE (decl) == FUNCTION_DECL)
3151             mark_used (decl);
3152
3153           if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl))
3154             decl = finish_qualified_id_expr (scope,
3155                                              decl,
3156                                              done,
3157                                              address_p,
3158                                              template_p,
3159                                              template_arg_p);
3160           else
3161             {
3162               tree r = convert_from_reference (decl);
3163
3164               /* In a template, return a SCOPE_REF for most qualified-ids
3165                  so that we can check access at instantiation time.  But if
3166                  we're looking at a member of the current instantiation, we
3167                  know we have access and building up the SCOPE_REF confuses
3168                  non-type template argument handling.  */
3169               if (processing_template_decl && TYPE_P (scope)
3170                   && !currently_open_class (scope))
3171                 r = build_qualified_name (TREE_TYPE (r),
3172                                           scope, decl,
3173                                           template_p);
3174               decl = r;
3175             }
3176         }
3177       else if (TREE_CODE (decl) == FIELD_DECL)
3178         {
3179           /* Since SCOPE is NULL here, this is an unqualified name.
3180              Access checking has been performed during name lookup
3181              already.  Turn off checking to avoid duplicate errors.  */
3182           push_deferring_access_checks (dk_no_check);
3183           decl = finish_non_static_data_member (decl, NULL_TREE,
3184                                                 /*qualifying_scope=*/NULL_TREE);
3185           pop_deferring_access_checks ();
3186         }
3187       else if (is_overloaded_fn (decl))
3188         {
3189           tree first_fn;
3190
3191           first_fn = get_first_fn (decl);
3192           if (TREE_CODE (first_fn) == TEMPLATE_DECL)
3193             first_fn = DECL_TEMPLATE_RESULT (first_fn);
3194
3195           if (!really_overloaded_fn (decl))
3196             mark_used (first_fn);
3197
3198           if (!template_arg_p
3199               && TREE_CODE (first_fn) == FUNCTION_DECL
3200               && DECL_FUNCTION_MEMBER_P (first_fn)
3201               && !shared_member_p (decl))
3202             {
3203               /* A set of member functions.  */
3204               decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
3205               return finish_class_member_access_expr (decl, id_expression,
3206                                                       /*template_p=*/false,
3207                                                       tf_warning_or_error);
3208             }
3209
3210           decl = baselink_for_fns (decl);
3211         }
3212       else
3213         {
3214           if (DECL_P (decl) && DECL_NONLOCAL (decl)
3215               && DECL_CLASS_SCOPE_P (decl))
3216             {
3217               tree context = context_for_name_lookup (decl); 
3218               if (context != current_class_type)
3219                 {
3220                   tree path = currently_open_derived_class (context);
3221                   perform_or_defer_access_check (TYPE_BINFO (path),
3222                                                  decl, decl);
3223                 }
3224             }
3225
3226           decl = convert_from_reference (decl);
3227         }
3228     }
3229
3230   if (TREE_DEPRECATED (decl))
3231     warn_deprecated_use (decl, NULL_TREE);
3232
3233   return decl;
3234 }
3235
3236 /* Implement the __typeof keyword: Return the type of EXPR, suitable for
3237    use as a type-specifier.  */
3238
3239 tree
3240 finish_typeof (tree expr)
3241 {
3242   tree type;
3243
3244   if (type_dependent_expression_p (expr))
3245     {
3246       type = cxx_make_type (TYPEOF_TYPE);
3247       TYPEOF_TYPE_EXPR (type) = expr;
3248       SET_TYPE_STRUCTURAL_EQUALITY (type);
3249
3250       return type;
3251     }
3252
3253   expr = mark_type_use (expr);
3254
3255   type = unlowered_expr_type (expr);
3256
3257   if (!type || type == unknown_type_node)
3258     {
3259       error ("type of %qE is unknown", expr);
3260       return error_mark_node;
3261     }
3262
3263   return type;
3264 }
3265
3266 /* Perform C++-specific checks for __builtin_offsetof before calling
3267    fold_offsetof.  */
3268
3269 tree
3270 finish_offsetof (tree expr)
3271 {
3272   if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
3273     {
3274       error ("cannot apply %<offsetof%> to destructor %<~%T%>",
3275               TREE_OPERAND (expr, 2));
3276       return error_mark_node;
3277     }
3278   if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
3279       || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
3280       || TREE_TYPE (expr) == unknown_type_node)
3281     {
3282       if (TREE_CODE (expr) == COMPONENT_REF
3283           || TREE_CODE (expr) == COMPOUND_EXPR)
3284         expr = TREE_OPERAND (expr, 1);
3285       error ("cannot apply %<offsetof%> to member function %qD", expr);
3286       return error_mark_node;
3287     }
3288   if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
3289     expr = TREE_OPERAND (expr, 0);
3290   return fold_offsetof (expr, NULL_TREE);
3291 }
3292
3293 /* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR.  This
3294    function is broken out from the above for the benefit of the tree-ssa
3295    project.  */
3296
3297 void
3298 simplify_aggr_init_expr (tree *tp)
3299 {
3300   tree aggr_init_expr = *tp;
3301
3302   /* Form an appropriate CALL_EXPR.  */
3303   tree fn = AGGR_INIT_EXPR_FN (aggr_init_expr);
3304   tree slot = AGGR_INIT_EXPR_SLOT (aggr_init_expr);
3305   tree type = TREE_TYPE (slot);
3306
3307   tree call_expr;
3308   enum style_t { ctor, arg, pcc } style;
3309
3310   if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
3311     style = ctor;
3312 #ifdef PCC_STATIC_STRUCT_RETURN
3313   else if (1)
3314     style = pcc;
3315 #endif
3316   else
3317     {
3318       gcc_assert (TREE_ADDRESSABLE (type));
3319       style = arg;
3320     }
3321
3322   call_expr = build_call_array_loc (input_location,
3323                                     TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
3324                                     fn,
3325                                     aggr_init_expr_nargs (aggr_init_expr),
3326                                     AGGR_INIT_EXPR_ARGP (aggr_init_expr));
3327   TREE_NOTHROW (call_expr) = TREE_NOTHROW (aggr_init_expr);
3328
3329   if (style == ctor)
3330     {
3331       /* Replace the first argument to the ctor with the address of the
3332          slot.  */
3333       cxx_mark_addressable (slot);
3334       CALL_EXPR_ARG (call_expr, 0) =
3335         build1 (ADDR_EXPR, build_pointer_type (type), slot);
3336     }
3337   else if (style == arg)
3338     {
3339       /* Just mark it addressable here, and leave the rest to
3340          expand_call{,_inline}.  */
3341       cxx_mark_addressable (slot);
3342       CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
3343       call_expr = build2 (INIT_EXPR, TREE_TYPE (call_expr), slot, call_expr);
3344     }
3345   else if (style == pcc)
3346     {
3347       /* If we're using the non-reentrant PCC calling convention, then we
3348          need to copy the returned value out of the static buffer into the
3349          SLOT.  */
3350       push_deferring_access_checks (dk_no_check);
3351       call_expr = build_aggr_init (slot, call_expr,
3352                                    DIRECT_BIND | LOOKUP_ONLYCONVERTING,
3353                                    tf_warning_or_error);
3354       pop_deferring_access_checks ();
3355       call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
3356     }
3357
3358   if (AGGR_INIT_ZERO_FIRST (aggr_init_expr))
3359     {
3360       tree init = build_zero_init (type, NULL_TREE,
3361                                    /*static_storage_p=*/false);
3362       init = build2 (INIT_EXPR, void_type_node, slot, init);
3363       call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (call_expr),
3364                           init, call_expr);
3365     }
3366
3367   *tp = call_expr;
3368 }
3369
3370 /* Emit all thunks to FN that should be emitted when FN is emitted.  */
3371
3372 void
3373 emit_associated_thunks (tree fn)
3374 {
3375   /* When we use vcall offsets, we emit thunks with the virtual
3376      functions to which they thunk. The whole point of vcall offsets
3377      is so that you can know statically the entire set of thunks that
3378      will ever be needed for a given virtual function, thereby
3379      enabling you to output all the thunks with the function itself.  */
3380   if (DECL_VIRTUAL_P (fn)
3381       /* Do not emit thunks for extern template instantiations.  */
3382       && ! DECL_REALLY_EXTERN (fn))
3383     {
3384       tree thunk;
3385
3386       for (thunk = DECL_THUNKS (fn); thunk; thunk = DECL_CHAIN (thunk))
3387         {
3388           if (!THUNK_ALIAS (thunk))
3389             {
3390               use_thunk (thunk, /*emit_p=*/1);
3391               if (DECL_RESULT_THUNK_P (thunk))
3392                 {
3393                   tree probe;
3394
3395                   for (probe = DECL_THUNKS (thunk);
3396                        probe; probe = DECL_CHAIN (probe))
3397                     use_thunk (probe, /*emit_p=*/1);
3398                 }
3399             }
3400           else
3401             gcc_assert (!DECL_THUNKS (thunk));
3402         }
3403     }
3404 }
3405
3406 /* Generate RTL for FN.  */
3407
3408 bool
3409 expand_or_defer_fn_1 (tree fn)
3410 {
3411   /* When the parser calls us after finishing the body of a template
3412      function, we don't really want to expand the body.  */
3413   if (processing_template_decl)
3414     {
3415       /* Normally, collection only occurs in rest_of_compilation.  So,
3416          if we don't collect here, we never collect junk generated
3417          during the processing of templates until we hit a
3418          non-template function.  It's not safe to do this inside a
3419          nested class, though, as the parser may have local state that
3420          is not a GC root.  */
3421       if (!function_depth)
3422         ggc_collect ();
3423       return false;
3424     }
3425
3426   gcc_assert (DECL_SAVED_TREE (fn));
3427
3428   /* If this is a constructor or destructor body, we have to clone
3429      it.  */
3430   if (maybe_clone_body (fn))
3431     {
3432       /* We don't want to process FN again, so pretend we've written
3433          it out, even though we haven't.  */
3434       TREE_ASM_WRITTEN (fn) = 1;
3435       DECL_SAVED_TREE (fn) = NULL_TREE;
3436       return false;
3437     }
3438
3439   /* We make a decision about linkage for these functions at the end
3440      of the compilation.  Until that point, we do not want the back
3441      end to output them -- but we do want it to see the bodies of
3442      these functions so that it can inline them as appropriate.  */
3443   if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3444     {
3445       if (DECL_INTERFACE_KNOWN (fn))
3446         /* We've already made a decision as to how this function will
3447            be handled.  */;
3448       else if (!at_eof)
3449         {
3450           DECL_EXTERNAL (fn) = 1;
3451           DECL_NOT_REALLY_EXTERN (fn) = 1;
3452           note_vague_linkage_fn (fn);
3453           /* A non-template inline function with external linkage will
3454              always be COMDAT.  As we must eventually determine the
3455              linkage of all functions, and as that causes writes to
3456              the data mapped in from the PCH file, it's advantageous
3457              to mark the functions at this point.  */
3458           if (!DECL_IMPLICIT_INSTANTIATION (fn))
3459             {
3460               /* This function must have external linkage, as
3461                  otherwise DECL_INTERFACE_KNOWN would have been
3462                  set.  */
3463               gcc_assert (TREE_PUBLIC (fn));
3464               comdat_linkage (fn);
3465               DECL_INTERFACE_KNOWN (fn) = 1;
3466             }
3467         }
3468       else
3469         import_export_decl (fn);
3470
3471       /* If the user wants us to keep all inline functions, then mark
3472          this function as needed so that finish_file will make sure to
3473          output it later.  Similarly, all dllexport'd functions must
3474          be emitted; there may be callers in other DLLs.  */
3475       if ((flag_keep_inline_functions
3476            && DECL_DECLARED_INLINE_P (fn)
3477            && !DECL_REALLY_EXTERN (fn))
3478           || lookup_attribute ("dllexport", DECL_ATTRIBUTES (fn)))
3479         mark_needed (fn);
3480     }
3481
3482   /* There's no reason to do any of the work here if we're only doing
3483      semantic analysis; this code just generates RTL.  */
3484   if (flag_syntax_only)
3485     return false;
3486
3487   return true;
3488 }
3489
3490 void
3491 expand_or_defer_fn (tree fn)
3492 {
3493   if (expand_or_defer_fn_1 (fn))
3494     {
3495       function_depth++;
3496
3497       /* Expand or defer, at the whim of the compilation unit manager.  */
3498       cgraph_finalize_function (fn, function_depth > 1);
3499       emit_associated_thunks (fn);
3500
3501       function_depth--;
3502     }
3503 }
3504
3505 struct nrv_data
3506 {
3507   tree var;
3508   tree result;
3509   htab_t visited;
3510 };
3511
3512 /* Helper function for walk_tree, used by finalize_nrv below.  */
3513
3514 static tree
3515 finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
3516 {
3517   struct nrv_data *dp = (struct nrv_data *)data;
3518   void **slot;
3519
3520   /* No need to walk into types.  There wouldn't be any need to walk into
3521      non-statements, except that we have to consider STMT_EXPRs.  */
3522   if (TYPE_P (*tp))
3523     *walk_subtrees = 0;
3524   /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3525      but differs from using NULL_TREE in that it indicates that we care
3526      about the value of the RESULT_DECL.  */
3527   else if (TREE_CODE (*tp) == RETURN_EXPR)
3528     TREE_OPERAND (*tp, 0) = dp->result;
3529   /* Change all cleanups for the NRV to only run when an exception is
3530      thrown.  */
3531   else if (TREE_CODE (*tp) == CLEANUP_STMT
3532            && CLEANUP_DECL (*tp) == dp->var)
3533     CLEANUP_EH_ONLY (*tp) = 1;
3534   /* Replace the DECL_EXPR for the NRV with an initialization of the
3535      RESULT_DECL, if needed.  */
3536   else if (TREE_CODE (*tp) == DECL_EXPR
3537            && DECL_EXPR_DECL (*tp) == dp->var)
3538     {
3539       tree init;
3540       if (DECL_INITIAL (dp->var)
3541           && DECL_INITIAL (dp->var) != error_mark_node)
3542         init = build2 (INIT_EXPR, void_type_node, dp->result,
3543                        DECL_INITIAL (dp->var));
3544       else
3545         init = build_empty_stmt (EXPR_LOCATION (*tp));
3546       DECL_INITIAL (dp->var) = NULL_TREE;
3547       SET_EXPR_LOCATION (init, EXPR_LOCATION (*tp));
3548       *tp = init;
3549     }
3550   /* And replace all uses of the NRV with the RESULT_DECL.  */
3551   else if (*tp == dp->var)
3552     *tp = dp->result;
3553
3554   /* Avoid walking into the same tree more than once.  Unfortunately, we
3555      can't just use walk_tree_without duplicates because it would only call
3556      us for the first occurrence of dp->var in the function body.  */
3557   slot = htab_find_slot (dp->visited, *tp, INSERT);
3558   if (*slot)
3559     *walk_subtrees = 0;
3560   else
3561     *slot = *tp;
3562
3563   /* Keep iterating.  */
3564   return NULL_TREE;
3565 }
3566
3567 /* Called from finish_function to implement the named return value
3568    optimization by overriding all the RETURN_EXPRs and pertinent
3569    CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
3570    RESULT_DECL for the function.  */
3571
3572 void
3573 finalize_nrv (tree *tp, tree var, tree result)
3574 {
3575   struct nrv_data data;
3576
3577   /* Copy name from VAR to RESULT.  */
3578   DECL_NAME (result) = DECL_NAME (var);
3579   /* Don't forget that we take its address.  */
3580   TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
3581   /* Finally set DECL_VALUE_EXPR to avoid assigning
3582      a stack slot at -O0 for the original var and debug info
3583      uses RESULT location for VAR.  */
3584   SET_DECL_VALUE_EXPR (var, result);
3585   DECL_HAS_VALUE_EXPR_P (var) = 1;
3586
3587   data.var = var;
3588   data.result = result;
3589   data.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
3590   cp_walk_tree (tp, finalize_nrv_r, &data, 0);
3591   htab_delete (data.visited);
3592 }
3593 \f
3594 /* Create CP_OMP_CLAUSE_INFO for clause C.  Returns true if it is invalid.  */
3595
3596 bool
3597 cxx_omp_create_clause_info (tree c, tree type, bool need_default_ctor,
3598                             bool need_copy_ctor, bool need_copy_assignment)
3599 {
3600   int save_errorcount = errorcount;
3601   tree info, t;
3602
3603   /* Always allocate 3 elements for simplicity.  These are the
3604      function decls for the ctor, dtor, and assignment op.
3605      This layout is known to the three lang hooks,
3606      cxx_omp_clause_default_init, cxx_omp_clause_copy_init,
3607      and cxx_omp_clause_assign_op.  */
3608   info = make_tree_vec (3);
3609   CP_OMP_CLAUSE_INFO (c) = info;
3610
3611   if (need_default_ctor || need_copy_ctor)
3612     {
3613       if (need_default_ctor)
3614         t = get_default_ctor (type);
3615       else
3616         t = get_copy_ctor (type);
3617
3618       if (t && !trivial_fn_p (t))
3619         TREE_VEC_ELT (info, 0) = t;
3620     }
3621
3622   if ((need_default_ctor || need_copy_ctor)
3623       && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3624     TREE_VEC_ELT (info, 1) = get_dtor (type);
3625
3626   if (need_copy_assignment)
3627     {
3628       t = get_copy_assign (type);
3629
3630       if (t && !trivial_fn_p (t))
3631         TREE_VEC_ELT (info, 2) = t;
3632     }
3633
3634   return errorcount != save_errorcount;
3635 }
3636
3637 /* For all elements of CLAUSES, validate them vs OpenMP constraints.
3638    Remove any elements from the list that are invalid.  */
3639
3640 tree
3641 finish_omp_clauses (tree clauses)
3642 {
3643   bitmap_head generic_head, firstprivate_head, lastprivate_head;
3644   tree c, t, *pc = &clauses;
3645   const char *name;
3646
3647   bitmap_obstack_initialize (NULL);
3648   bitmap_initialize (&generic_head, &bitmap_default_obstack);
3649   bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
3650   bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
3651
3652   for (pc = &clauses, c = clauses; c ; c = *pc)
3653     {
3654       bool remove = false;
3655
3656       switch (OMP_CLAUSE_CODE (c))
3657         {
3658         case OMP_CLAUSE_SHARED:
3659           name = "shared";
3660           goto check_dup_generic;
3661         case OMP_CLAUSE_PRIVATE:
3662           name = "private";
3663           goto check_dup_generic;
3664         case OMP_CLAUSE_REDUCTION:
3665           name = "reduction";
3666           goto check_dup_generic;
3667         case OMP_CLAUSE_COPYPRIVATE:
3668           name = "copyprivate";
3669           goto check_dup_generic;
3670         case OMP_CLAUSE_COPYIN:
3671           name = "copyin";
3672           goto check_dup_generic;
3673         check_dup_generic:
3674           t = OMP_CLAUSE_DECL (c);
3675           if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3676             {
3677               if (processing_template_decl)
3678                 break;
3679               if (DECL_P (t))
3680                 error ("%qD is not a variable in clause %qs", t, name);
3681               else
3682                 error ("%qE is not a variable in clause %qs", t, name);
3683               remove = true;
3684             }
3685           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3686                    || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
3687                    || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3688             {
3689               error ("%qD appears more than once in data clauses", t);
3690               remove = true;
3691             }
3692           else
3693             bitmap_set_bit (&generic_head, DECL_UID (t));
3694           break;
3695
3696         case OMP_CLAUSE_FIRSTPRIVATE:
3697           t = OMP_CLAUSE_DECL (c);
3698           if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3699             {
3700               if (processing_template_decl)
3701                 break;
3702               if (DECL_P (t))
3703                 error ("%qD is not a variable in clause %<firstprivate%>", t);
3704               else
3705                 error ("%qE is not a variable in clause %<firstprivate%>", t);
3706               remove = true;
3707             }
3708           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3709                    || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3710             {
3711               error ("%qD appears more than once in data clauses", t);
3712               remove = true;
3713             }
3714           else
3715             bitmap_set_bit (&firstprivate_head, DECL_UID (t));
3716           break;
3717
3718         case OMP_CLAUSE_LASTPRIVATE:
3719           t = OMP_CLAUSE_DECL (c);
3720           if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3721             {
3722               if (processing_template_decl)
3723                 break;
3724               if (DECL_P (t))
3725                 error ("%qD is not a variable in clause %<lastprivate%>", t);
3726               else
3727                 error ("%qE is not a variable in clause %<lastprivate%>", t);
3728               remove = true;
3729             }
3730           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3731                    || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3732             {
3733               error ("%qD appears more than once in data clauses", t);
3734               remove = true;
3735             }
3736           else
3737             bitmap_set_bit (&lastprivate_head, DECL_UID (t));
3738           break;
3739
3740         case OMP_CLAUSE_IF:
3741           t = OMP_CLAUSE_IF_EXPR (c);
3742           t = maybe_convert_cond (t);
3743           if (t == error_mark_node)
3744             remove = true;
3745           OMP_CLAUSE_IF_EXPR (c) = t;
3746           break;
3747
3748         case OMP_CLAUSE_NUM_THREADS:
3749           t = OMP_CLAUSE_NUM_THREADS_EXPR (c);
3750           if (t == error_mark_node)
3751             remove = true;
3752           else if (!type_dependent_expression_p (t)
3753                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
3754             {
3755               error ("num_threads expression must be integral");
3756               remove = true;
3757             }
3758           break;
3759
3760         case OMP_CLAUSE_SCHEDULE:
3761           t = OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c);
3762           if (t == NULL)
3763             ;
3764           else if (t == error_mark_node)
3765             remove = true;
3766           else if (!type_dependent_expression_p (t)
3767                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
3768             {
3769               error ("schedule chunk size expression must be integral");
3770               remove = true;
3771             }
3772           break;
3773
3774         case OMP_CLAUSE_NOWAIT:
3775         case OMP_CLAUSE_ORDERED:
3776         case OMP_CLAUSE_DEFAULT:
3777         case OMP_CLAUSE_UNTIED:
3778         case OMP_CLAUSE_COLLAPSE:
3779           break;
3780
3781         default:
3782           gcc_unreachable ();
3783         }
3784
3785       if (remove)
3786         *pc = OMP_CLAUSE_CHAIN (c);
3787       else
3788         pc = &OMP_CLAUSE_CHAIN (c);
3789     }
3790
3791   for (pc = &clauses, c = clauses; c ; c = *pc)
3792     {
3793       enum omp_clause_code c_kind = OMP_CLAUSE_CODE (c);
3794       bool remove = false;
3795       bool need_complete_non_reference = false;
3796       bool need_default_ctor = false;
3797       bool need_copy_ctor = false;
3798       bool need_copy_assignment = false;
3799       bool need_implicitly_determined = false;
3800       tree type, inner_type;
3801
3802       switch (c_kind)
3803         {
3804         case OMP_CLAUSE_SHARED:
3805           name = "shared";
3806           need_implicitly_determined = true;
3807           break;
3808         case OMP_CLAUSE_PRIVATE:
3809           name = "private";
3810           need_complete_non_reference = true;
3811           need_default_ctor = true;
3812           need_implicitly_determined = true;
3813           break;
3814         case OMP_CLAUSE_FIRSTPRIVATE:
3815           name = "firstprivate";
3816           need_complete_non_reference = true;
3817           need_copy_ctor = true;
3818           need_implicitly_determined = true;
3819           break;
3820         case OMP_CLAUSE_LASTPRIVATE:
3821           name = "lastprivate";
3822           need_complete_non_reference = true;
3823           need_copy_assignment = true;
3824           need_implicitly_determined = true;
3825           break;
3826         case OMP_CLAUSE_REDUCTION:
3827           name = "reduction";
3828           need_implicitly_determined = true;
3829           break;
3830         case OMP_CLAUSE_COPYPRIVATE:
3831           name = "copyprivate";
3832           need_copy_assignment = true;
3833           break;
3834         case OMP_CLAUSE_COPYIN:
3835           name = "copyin";
3836           need_copy_assignment = true;
3837           break;
3838         default:
3839           pc = &OMP_CLAUSE_CHAIN (c);
3840           continue;
3841         }
3842
3843       t = OMP_CLAUSE_DECL (c);
3844       if (processing_template_decl
3845           && TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3846         {
3847           pc = &OMP_CLAUSE_CHAIN (c);
3848           continue;
3849         }
3850
3851       switch (c_kind)
3852         {
3853         case OMP_CLAUSE_LASTPRIVATE:
3854           if (!bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3855             need_default_ctor = true;
3856           break;
3857
3858         case OMP_CLAUSE_REDUCTION:
3859           if (AGGREGATE_TYPE_P (TREE_TYPE (t))
3860               || POINTER_TYPE_P (TREE_TYPE (t)))
3861             {
3862               error ("%qE has invalid type for %<reduction%>", t);
3863               remove = true;
3864             }
3865           else if (FLOAT_TYPE_P (TREE_TYPE (t)))
3866             {
3867               enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
3868               switch (r_code)
3869                 {
3870                 case PLUS_EXPR:
3871                 case MULT_EXPR:
3872                 case MINUS_EXPR:
3873                   break;
3874                 default:
3875                   error ("%qE has invalid type for %<reduction(%s)%>",
3876                          t, operator_name_info[r_code].name);
3877                   remove = true;
3878                 }
3879             }
3880           break;
3881
3882         case OMP_CLAUSE_COPYIN:
3883           if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
3884             {
3885               error ("%qE must be %<threadprivate%> for %<copyin%>", t);
3886               remove = true;
3887             }
3888           break;
3889
3890         default:
3891           break;
3892         }
3893
3894       if (need_complete_non_reference)
3895         {
3896           t = require_complete_type (t);
3897           if (t == error_mark_node)
3898             remove = true;
3899           else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
3900             {
3901               error ("%qE has reference type for %qs", t, name);
3902               remove = true;
3903             }
3904         }
3905       if (need_implicitly_determined)
3906         {
3907           const char *share_name = NULL;
3908
3909           if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
3910             share_name = "threadprivate";
3911           else switch (cxx_omp_predetermined_sharing (t))
3912             {
3913             case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
3914               break;
3915             case OMP_CLAUSE_DEFAULT_SHARED:
3916               share_name = "shared";
3917               break;
3918             case OMP_CLAUSE_DEFAULT_PRIVATE:
3919               share_name = "private";
3920               break;
3921             default:
3922               gcc_unreachable ();
3923             }
3924           if (share_name)
3925             {
3926               error ("%qE is predetermined %qs for %qs",
3927                      t, share_name, name);
3928               remove = true;
3929             }
3930         }
3931
3932       /* We're interested in the base element, not arrays.  */
3933       inner_type = type = TREE_TYPE (t);
3934       while (TREE_CODE (inner_type) == ARRAY_TYPE)
3935         inner_type = TREE_TYPE (inner_type);
3936
3937       /* Check for special function availability by building a call to one.
3938          Save the results, because later we won't be in the right context
3939          for making these queries.  */
3940       if (CLASS_TYPE_P (inner_type)
3941           && (need_default_ctor || need_copy_ctor || need_copy_assignment)
3942           && !type_dependent_expression_p (t)
3943           && cxx_omp_create_clause_info (c, inner_type, need_default_ctor,
3944                                          need_copy_ctor, need_copy_assignment))
3945         remove = true;
3946
3947       if (remove)
3948         *pc = OMP_CLAUSE_CHAIN (c);
3949       else
3950         pc = &OMP_CLAUSE_CHAIN (c);
3951     }
3952
3953   bitmap_obstack_release (NULL);
3954   return clauses;
3955 }
3956
3957 /* For all variables in the tree_list VARS, mark them as thread local.  */
3958
3959 void
3960 finish_omp_threadprivate (tree vars)
3961 {
3962   tree t;
3963
3964   /* Mark every variable in VARS to be assigned thread local storage.  */
3965   for (t = vars; t; t = TREE_CHAIN (t))
3966     {
3967       tree v = TREE_PURPOSE (t);
3968
3969       if (error_operand_p (v))
3970         ;
3971       else if (TREE_CODE (v) != VAR_DECL)
3972         error ("%<threadprivate%> %qD is not file, namespace "
3973                "or block scope variable", v);
3974       /* If V had already been marked threadprivate, it doesn't matter
3975          whether it had been used prior to this point.  */
3976       else if (TREE_USED (v)
3977           && (DECL_LANG_SPECIFIC (v) == NULL
3978               || !CP_DECL_THREADPRIVATE_P (v)))
3979         error ("%qE declared %<threadprivate%> after first use", v);
3980       else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
3981         error ("automatic variable %qE cannot be %<threadprivate%>", v);
3982       else if (! COMPLETE_TYPE_P (TREE_TYPE (v)))
3983         error ("%<threadprivate%> %qE has incomplete type", v);
3984       else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v))
3985                && CP_DECL_CONTEXT (v) != current_class_type)
3986         error ("%<threadprivate%> %qE directive not "
3987                "in %qT definition", v, CP_DECL_CONTEXT (v));
3988       else
3989         {
3990           /* Allocate a LANG_SPECIFIC structure for V, if needed.  */
3991           if (DECL_LANG_SPECIFIC (v) == NULL)
3992             {
3993               retrofit_lang_decl (v);
3994
3995               /* Make sure that DECL_DISCRIMINATOR_P continues to be true
3996                  after the allocation of the lang_decl structure.  */
3997               if (DECL_DISCRIMINATOR_P (v))
3998                 DECL_LANG_SPECIFIC (v)->u.base.u2sel = 1;
3999             }
4000
4001           if (! DECL_THREAD_LOCAL_P (v))
4002             {
4003               DECL_TLS_MODEL (v) = decl_default_tls_model (v);
4004               /* If rtl has been already set for this var, call
4005                  make_decl_rtl once again, so that encode_section_info
4006                  has a chance to look at the new decl flags.  */
4007               if (DECL_RTL_SET_P (v))
4008                 make_decl_rtl (v);
4009             }
4010           CP_DECL_THREADPRIVATE_P (v) = 1;
4011         }
4012     }
4013 }
4014
4015 /* Build an OpenMP structured block.  */
4016
4017 tree
4018 begin_omp_structured_block (void)
4019 {
4020   return do_pushlevel (sk_omp);
4021 }
4022
4023 tree
4024 finish_omp_structured_block (tree block)
4025 {
4026   return do_poplevel (block);
4027 }
4028
4029 /* Similarly, except force the retention of the BLOCK.  */
4030
4031 tree
4032 begin_omp_parallel (void)
4033 {
4034   keep_next_level (true);
4035   return begin_omp_structured_block ();
4036 }
4037
4038 tree
4039 finish_omp_parallel (tree clauses, tree body)
4040 {
4041   tree stmt;
4042
4043   body = finish_omp_structured_block (body);
4044
4045   stmt = make_node (OMP_PARALLEL);
4046   TREE_TYPE (stmt) = void_type_node;
4047   OMP_PARALLEL_CLAUSES (stmt) = clauses;
4048   OMP_PARALLEL_BODY (stmt) = body;
4049
4050   return add_stmt (stmt);
4051 }
4052
4053 tree
4054 begin_omp_task (void)
4055 {
4056   keep_next_level (true);
4057   return begin_omp_structured_block ();
4058 }
4059
4060 tree
4061 finish_omp_task (tree clauses, tree body)
4062 {
4063   tree stmt;
4064
4065   body = finish_omp_structured_block (body);
4066
4067   stmt = make_node (OMP_TASK);
4068   TREE_TYPE (stmt) = void_type_node;
4069   OMP_TASK_CLAUSES (stmt) = clauses;
4070   OMP_TASK_BODY (stmt) = body;
4071
4072   return add_stmt (stmt);
4073 }
4074
4075 /* Helper function for finish_omp_for.  Convert Ith random access iterator
4076    into integral iterator.  Return FALSE if successful.  */
4077
4078 static bool
4079 handle_omp_for_class_iterator (int i, location_t locus, tree declv, tree initv,
4080                                tree condv, tree incrv, tree *body,
4081                                tree *pre_body, tree clauses)
4082 {
4083   tree diff, iter_init, iter_incr = NULL, last;
4084   tree incr_var = NULL, orig_pre_body, orig_body, c;
4085   tree decl = TREE_VEC_ELT (declv, i);
4086   tree init = TREE_VEC_ELT (initv, i);
4087   tree cond = TREE_VEC_ELT (condv, i);
4088   tree incr = TREE_VEC_ELT (incrv, i);
4089   tree iter = decl;
4090   location_t elocus = locus;
4091
4092   if (init && EXPR_HAS_LOCATION (init))
4093     elocus = EXPR_LOCATION (init);
4094
4095   switch (TREE_CODE (cond))
4096     {
4097     case GT_EXPR:
4098     case GE_EXPR:
4099     case LT_EXPR:
4100     case LE_EXPR:
4101       if (TREE_OPERAND (cond, 1) == iter)
4102         cond = build2 (swap_tree_comparison (TREE_CODE (cond)),
4103                        TREE_TYPE (cond), iter, TREE_OPERAND (cond, 0));
4104       if (TREE_OPERAND (cond, 0) != iter)
4105         cond = error_mark_node;
4106       else
4107         {
4108           tree tem = build_x_binary_op (TREE_CODE (cond), iter, ERROR_MARK,
4109                                         TREE_OPERAND (cond, 1), ERROR_MARK,
4110                                         NULL, tf_warning_or_error);
4111           if (error_operand_p (tem))
4112             return true;
4113         }
4114       break;
4115     default:
4116       cond = error_mark_node;
4117       break;
4118     }
4119   if (cond == error_mark_node)
4120     {
4121       error_at (elocus, "invalid controlling predicate");
4122       return true;
4123     }
4124   diff = build_x_binary_op (MINUS_EXPR, TREE_OPERAND (cond, 1),
4125                             ERROR_MARK, iter, ERROR_MARK, NULL,
4126                             tf_warning_or_error);
4127   if (error_operand_p (diff))
4128     return true;
4129   if (TREE_CODE (TREE_TYPE (diff)) != INTEGER_TYPE)
4130     {
4131       error_at (elocus, "difference between %qE and %qD does not have integer type",
4132                 TREE_OPERAND (cond, 1), iter);
4133       return true;
4134     }
4135
4136   switch (TREE_CODE (incr))
4137     {
4138     case PREINCREMENT_EXPR:
4139     case PREDECREMENT_EXPR:
4140     case POSTINCREMENT_EXPR:
4141     case POSTDECREMENT_EXPR:
4142       if (TREE_OPERAND (incr, 0) != iter)
4143         {
4144           incr = error_mark_node;
4145           break;
4146         }
4147       iter_incr = build_x_unary_op (TREE_CODE (incr), iter,
4148                                     tf_warning_or_error);
4149       if (error_operand_p (iter_incr))
4150         return true;
4151       else if (TREE_CODE (incr) == PREINCREMENT_EXPR
4152                || TREE_CODE (incr) == POSTINCREMENT_EXPR)
4153         incr = integer_one_node;
4154       else
4155         incr = integer_minus_one_node;
4156       break;
4157     case MODIFY_EXPR:
4158       if (TREE_OPERAND (incr, 0) != iter)
4159         incr = error_mark_node;
4160       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
4161                || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
4162         {
4163           tree rhs = TREE_OPERAND (incr, 1);
4164           if (TREE_OPERAND (rhs, 0) == iter)
4165             {
4166               if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 1)))
4167                   != INTEGER_TYPE)
4168                 incr = error_mark_node;
4169               else
4170                 {
4171                   iter_incr = build_x_modify_expr (iter, TREE_CODE (rhs),
4172                                                    TREE_OPERAND (rhs, 1),
4173                                                    tf_warning_or_error);
4174                   if (error_operand_p (iter_incr))
4175                     return true;
4176                   incr = TREE_OPERAND (rhs, 1);
4177                   incr = cp_convert (TREE_TYPE (diff), incr);
4178                   if (TREE_CODE (rhs) == MINUS_EXPR)
4179                     {
4180                       incr = build1 (NEGATE_EXPR, TREE_TYPE (diff), incr);
4181                       incr = fold_if_not_in_template (incr);
4182                     }
4183                   if (TREE_CODE (incr) != INTEGER_CST
4184                       && (TREE_CODE (incr) != NOP_EXPR
4185                           || (TREE_CODE (TREE_OPERAND (incr, 0))
4186                               != INTEGER_CST)))
4187                     iter_incr = NULL;
4188                 }
4189             }
4190           else if (TREE_OPERAND (rhs, 1) == iter)
4191             {
4192               if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 0))) != INTEGER_TYPE
4193                   || TREE_CODE (rhs) != PLUS_EXPR)
4194                 incr = error_mark_node;
4195               else
4196                 {
4197                   iter_incr = build_x_binary_op (PLUS_EXPR,
4198                                                  TREE_OPERAND (rhs, 0),
4199                                                  ERROR_MARK, iter,
4200                                                  ERROR_MARK, NULL,
4201                                                  tf_warning_or_error);
4202                   if (error_operand_p (iter_incr))
4203                     return true;
4204                   iter_incr = build_x_modify_expr (iter, NOP_EXPR,
4205                                                    iter_incr,
4206                                                    tf_warning_or_error);
4207                   if (error_operand_p (iter_incr))
4208                     return true;
4209                   incr = TREE_OPERAND (rhs, 0);
4210                   iter_incr = NULL;
4211                 }
4212             }
4213           else
4214             incr = error_mark_node;
4215         }
4216       else
4217         incr = error_mark_node;
4218       break;
4219     default:
4220       incr = error_mark_node;
4221       break;
4222     }
4223
4224   if (incr == error_mark_node)
4225     {
4226       error_at (elocus, "invalid increment expression");
4227       return true;
4228     }
4229
4230   incr = cp_convert (TREE_TYPE (diff), incr);
4231   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
4232     if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
4233         && OMP_CLAUSE_DECL (c) == iter)
4234       break;
4235
4236   decl = create_temporary_var (TREE_TYPE (diff));
4237   pushdecl (decl);
4238   add_decl_expr (decl);
4239   last = create_temporary_var (TREE_TYPE (diff));
4240   pushdecl (last);
4241   add_decl_expr (last);
4242   if (c && iter_incr == NULL)
4243     {
4244       incr_var = create_temporary_var (TREE_TYPE (diff));
4245       pushdecl (incr_var);
4246       add_decl_expr (incr_var);
4247     }
4248   gcc_assert (stmts_are_full_exprs_p ());
4249
4250   orig_pre_body = *pre_body;
4251   *pre_body = push_stmt_list ();
4252   if (orig_pre_body)
4253     add_stmt (orig_pre_body);
4254   if (init != NULL)
4255     finish_expr_stmt (build_x_modify_expr (iter, NOP_EXPR, init,
4256                                            tf_warning_or_error));
4257   init = build_int_cst (TREE_TYPE (diff), 0);
4258   if (c && iter_incr == NULL)
4259     {
4260       finish_expr_stmt (build_x_modify_expr (incr_var, NOP_EXPR,
4261                                              incr, tf_warning_or_error));
4262       incr = incr_var;
4263       iter_incr = build_x_modify_expr (iter, PLUS_EXPR, incr,
4264                                        tf_warning_or_error);
4265     }
4266   finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, init,
4267                                          tf_warning_or_error));
4268   *pre_body = pop_stmt_list (*pre_body);
4269
4270   cond = cp_build_binary_op (elocus,
4271                              TREE_CODE (cond), decl, diff,
4272                              tf_warning_or_error);
4273   incr = build_modify_expr (elocus, decl, NULL_TREE, PLUS_EXPR,
4274                             elocus, incr, NULL_TREE);
4275
4276   orig_body = *body;
4277   *body = push_stmt_list ();
4278   iter_init = build2 (MINUS_EXPR, TREE_TYPE (diff), decl, last);
4279   iter_init = build_x_modify_expr (iter, PLUS_EXPR, iter_init,
4280                                    tf_warning_or_error);
4281   iter_init = build1 (NOP_EXPR, void_type_node, iter_init);
4282   finish_expr_stmt (iter_init);
4283   finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, decl,
4284                                          tf_warning_or_error));
4285   add_stmt (orig_body);
4286   *body = pop_stmt_list (*body);
4287
4288   if (c)
4289     {
4290       OMP_CLAUSE_LASTPRIVATE_STMT (c) = push_stmt_list ();
4291       finish_expr_stmt (iter_incr);
4292       OMP_CLAUSE_LASTPRIVATE_STMT (c)
4293         = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (c));
4294     }
4295
4296   TREE_VEC_ELT (declv, i) = decl;
4297   TREE_VEC_ELT (initv, i) = init;
4298   TREE_VEC_ELT (condv, i) = cond;
4299   TREE_VEC_ELT (incrv, i) = incr;
4300
4301   return false;
4302 }
4303
4304 /* Build and validate an OMP_FOR statement.  CLAUSES, BODY, COND, INCR
4305    are directly for their associated operands in the statement.  DECL
4306    and INIT are a combo; if DECL is NULL then INIT ought to be a
4307    MODIFY_EXPR, and the DECL should be extracted.  PRE_BODY are
4308    optional statements that need to go before the loop into its
4309    sk_omp scope.  */
4310
4311 tree
4312 finish_omp_for (location_t locus, tree declv, tree initv, tree condv,
4313                 tree incrv, tree body, tree pre_body, tree clauses)
4314 {
4315   tree omp_for = NULL, orig_incr = NULL;
4316   tree decl, init, cond, incr;
4317   location_t elocus;
4318   int i;
4319
4320   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (initv));
4321   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (condv));
4322   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (incrv));
4323   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4324     {
4325       decl = TREE_VEC_ELT (declv, i);
4326       init = TREE_VEC_ELT (initv, i);
4327       cond = TREE_VEC_ELT (condv, i);
4328       incr = TREE_VEC_ELT (incrv, i);
4329       elocus = locus;
4330
4331       if (decl == NULL)
4332         {
4333           if (init != NULL)
4334             switch (TREE_CODE (init))
4335               {
4336               case MODIFY_EXPR:
4337                 decl = TREE_OPERAND (init, 0);
4338                 init = TREE_OPERAND (init, 1);
4339                 break;
4340               case MODOP_EXPR:
4341                 if (TREE_CODE (TREE_OPERAND (init, 1)) == NOP_EXPR)
4342                   {
4343                     decl = TREE_OPERAND (init, 0);
4344                     init = TREE_OPERAND (init, 2);
4345                   }
4346                 break;
4347               default:
4348                 break;
4349               }
4350
4351           if (decl == NULL)
4352             {
4353               error_at (locus,
4354                         "expected iteration declaration or initialization");
4355               return NULL;
4356             }
4357         }
4358
4359       if (init && EXPR_HAS_LOCATION (init))
4360         elocus = EXPR_LOCATION (init);
4361
4362       if (cond == NULL)
4363         {
4364           error_at (elocus, "missing controlling predicate");
4365           return NULL;
4366         }
4367
4368       if (incr == NULL)
4369         {
4370           error_at (elocus, "missing increment expression");
4371           return NULL;
4372         }
4373
4374       TREE_VEC_ELT (declv, i) = decl;
4375       TREE_VEC_ELT (initv, i) = init;
4376     }
4377
4378   if (dependent_omp_for_p (declv, initv, condv, incrv))
4379     {
4380       tree stmt;
4381
4382       stmt = make_node (OMP_FOR);
4383
4384       for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4385         {
4386           /* This is really just a place-holder.  We'll be decomposing this
4387              again and going through the cp_build_modify_expr path below when
4388              we instantiate the thing.  */
4389           TREE_VEC_ELT (initv, i)
4390             = build2 (MODIFY_EXPR, void_type_node, TREE_VEC_ELT (declv, i),
4391                       TREE_VEC_ELT (initv, i));
4392         }
4393
4394       TREE_TYPE (stmt) = void_type_node;
4395       OMP_FOR_INIT (stmt) = initv;
4396       OMP_FOR_COND (stmt) = condv;
4397       OMP_FOR_INCR (stmt) = incrv;
4398       OMP_FOR_BODY (stmt) = body;
4399       OMP_FOR_PRE_BODY (stmt) = pre_body;
4400       OMP_FOR_CLAUSES (stmt) = clauses;
4401
4402       SET_EXPR_LOCATION (stmt, locus);
4403       return add_stmt (stmt);
4404     }
4405
4406   if (processing_template_decl)
4407     orig_incr = make_tree_vec (TREE_VEC_LENGTH (incrv));
4408
4409   for (i = 0; i < TREE_VEC_LENGTH (declv); )
4410     {
4411       decl = TREE_VEC_ELT (declv, i);
4412       init = TREE_VEC_ELT (initv, i);
4413       cond = TREE_VEC_ELT (condv, i);
4414       incr = TREE_VEC_ELT (incrv, i);
4415       if (orig_incr)
4416         TREE_VEC_ELT (orig_incr, i) = incr;
4417       elocus = locus;
4418
4419       if (init && EXPR_HAS_LOCATION (init))
4420         elocus = EXPR_LOCATION (init);
4421
4422       if (!DECL_P (decl))
4423         {
4424           error_at (elocus, "expected iteration declaration or initialization");
4425           return NULL;
4426         }
4427
4428       if (incr && TREE_CODE (incr) == MODOP_EXPR)
4429         {
4430           if (orig_incr)
4431             TREE_VEC_ELT (orig_incr, i) = incr;
4432           incr = cp_build_modify_expr (TREE_OPERAND (incr, 0),
4433                                        TREE_CODE (TREE_OPERAND (incr, 1)),
4434                                        TREE_OPERAND (incr, 2),
4435                                        tf_warning_or_error);
4436         }
4437
4438       if (CLASS_TYPE_P (TREE_TYPE (decl)))
4439         {
4440           if (handle_omp_for_class_iterator (i, locus, declv, initv, condv,
4441                                              incrv, &body, &pre_body, clauses))
4442             return NULL;
4443           continue;
4444         }
4445
4446       if (!INTEGRAL_TYPE_P (TREE_TYPE (decl))
4447           && TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
4448         {
4449           error_at (elocus, "invalid type for iteration variable %qE", decl);
4450           return NULL;
4451         }
4452
4453       if (!processing_template_decl)
4454         {
4455           init = fold_build_cleanup_point_expr (TREE_TYPE (init), init);
4456           init = cp_build_modify_expr (decl, NOP_EXPR, init, tf_warning_or_error);
4457         }
4458       else
4459         init = build2 (MODIFY_EXPR, void_type_node, decl, init);
4460       if (cond
4461           && TREE_SIDE_EFFECTS (cond)
4462           && COMPARISON_CLASS_P (cond)
4463           && !processing_template_decl)
4464         {
4465           tree t = TREE_OPERAND (cond, 0);
4466           if (TREE_SIDE_EFFECTS (t)
4467               && t != decl
4468               && (TREE_CODE (t) != NOP_EXPR
4469                   || TREE_OPERAND (t, 0) != decl))
4470             TREE_OPERAND (cond, 0)
4471               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4472
4473           t = TREE_OPERAND (cond, 1);
4474           if (TREE_SIDE_EFFECTS (t)
4475               && t != decl
4476               && (TREE_CODE (t) != NOP_EXPR
4477                   || TREE_OPERAND (t, 0) != decl))
4478             TREE_OPERAND (cond, 1)
4479               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4480         }
4481       if (decl == error_mark_node || init == error_mark_node)
4482         return NULL;
4483
4484       TREE_VEC_ELT (declv, i) = decl;
4485       TREE_VEC_ELT (initv, i) = init;
4486       TREE_VEC_ELT (condv, i) = cond;
4487       TREE_VEC_ELT (incrv, i) = incr;
4488       i++;
4489     }
4490
4491   if (IS_EMPTY_STMT (pre_body))
4492     pre_body = NULL;
4493
4494   omp_for = c_finish_omp_for (locus, declv, initv, condv, incrv,
4495                               body, pre_body);
4496
4497   if (omp_for == NULL)
4498     return NULL;
4499
4500   for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INCR (omp_for)); i++)
4501     {
4502       decl = TREE_OPERAND (TREE_VEC_ELT (OMP_FOR_INIT (omp_for), i), 0);
4503       incr = TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i);
4504
4505       if (TREE_CODE (incr) != MODIFY_EXPR)
4506         continue;
4507
4508       if (TREE_SIDE_EFFECTS (TREE_OPERAND (incr, 1))
4509           && BINARY_CLASS_P (TREE_OPERAND (incr, 1))
4510           && !processing_template_decl)
4511         {
4512           tree t = TREE_OPERAND (TREE_OPERAND (incr, 1), 0);
4513           if (TREE_SIDE_EFFECTS (t)
4514               && t != decl
4515               && (TREE_CODE (t) != NOP_EXPR
4516                   || TREE_OPERAND (t, 0) != decl))
4517             TREE_OPERAND (TREE_OPERAND (incr, 1), 0)
4518               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4519
4520           t = TREE_OPERAND (TREE_OPERAND (incr, 1), 1);
4521           if (TREE_SIDE_EFFECTS (t)
4522               && t != decl
4523               && (TREE_CODE (t) != NOP_EXPR
4524                   || TREE_OPERAND (t, 0) != decl))
4525             TREE_OPERAND (TREE_OPERAND (incr, 1), 1)
4526               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4527         }
4528
4529       if (orig_incr)
4530         TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i) = TREE_VEC_ELT (orig_incr, i);
4531     }
4532   if (omp_for != NULL)
4533     OMP_FOR_CLAUSES (omp_for) = clauses;
4534   return omp_for;
4535 }
4536
4537 void
4538 finish_omp_atomic (enum tree_code code, tree lhs, tree rhs)
4539 {
4540   tree orig_lhs;
4541   tree orig_rhs;
4542   bool dependent_p;
4543   tree stmt;
4544
4545   orig_lhs = lhs;
4546   orig_rhs = rhs;
4547   dependent_p = false;
4548   stmt = NULL_TREE;
4549
4550   /* Even in a template, we can detect invalid uses of the atomic
4551      pragma if neither LHS nor RHS is type-dependent.  */
4552   if (processing_template_decl)
4553     {
4554       dependent_p = (type_dependent_expression_p (lhs)
4555                      || type_dependent_expression_p (rhs));
4556       if (!dependent_p)
4557         {
4558           lhs = build_non_dependent_expr (lhs);
4559           rhs = build_non_dependent_expr (rhs);
4560         }
4561     }
4562   if (!dependent_p)
4563     {
4564       stmt = c_finish_omp_atomic (input_location, code, lhs, rhs);
4565       if (stmt == error_mark_node)
4566         return;
4567     }
4568   if (processing_template_decl)
4569     stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node,
4570                    build2 (code, void_type_node, orig_lhs, orig_rhs));
4571   add_stmt (stmt);
4572 }
4573
4574 void
4575 finish_omp_barrier (void)
4576 {
4577   tree fn = built_in_decls[BUILT_IN_GOMP_BARRIER];
4578   VEC(tree,gc) *vec = make_tree_vector ();
4579   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4580   release_tree_vector (vec);
4581   finish_expr_stmt (stmt);
4582 }
4583
4584 void
4585 finish_omp_flush (void)
4586 {
4587   tree fn = built_in_decls[BUILT_IN_SYNCHRONIZE];
4588   VEC(tree,gc) *vec = make_tree_vector ();
4589   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4590   release_tree_vector (vec);
4591   finish_expr_stmt (stmt);
4592 }
4593
4594 void
4595 finish_omp_taskwait (void)
4596 {
4597   tree fn = built_in_decls[BUILT_IN_GOMP_TASKWAIT];
4598   VEC(tree,gc) *vec = make_tree_vector ();
4599   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4600   release_tree_vector (vec);
4601   finish_expr_stmt (stmt);
4602 }
4603 \f
4604 void
4605 init_cp_semantics (void)
4606 {
4607 }
4608 \f
4609 /* Build a STATIC_ASSERT for a static assertion with the condition
4610    CONDITION and the message text MESSAGE.  LOCATION is the location
4611    of the static assertion in the source code.  When MEMBER_P, this
4612    static assertion is a member of a class.  */
4613 void 
4614 finish_static_assert (tree condition, tree message, location_t location, 
4615                       bool member_p)
4616 {
4617   if (check_for_bare_parameter_packs (condition))
4618     condition = error_mark_node;
4619
4620   if (type_dependent_expression_p (condition) 
4621       || value_dependent_expression_p (condition))
4622     {
4623       /* We're in a template; build a STATIC_ASSERT and put it in
4624          the right place. */
4625       tree assertion;
4626
4627       assertion = make_node (STATIC_ASSERT);
4628       STATIC_ASSERT_CONDITION (assertion) = condition;
4629       STATIC_ASSERT_MESSAGE (assertion) = message;
4630       STATIC_ASSERT_SOURCE_LOCATION (assertion) = location;
4631
4632       if (member_p)
4633         maybe_add_class_template_decl_list (current_class_type, 
4634                                             assertion,
4635                                             /*friend_p=*/0);
4636       else
4637         add_stmt (assertion);
4638
4639       return;
4640     }
4641
4642   /* Fold the expression and convert it to a boolean value. */
4643   condition = fold_non_dependent_expr (condition);
4644   condition = cp_convert (boolean_type_node, condition);
4645   condition = maybe_constant_value (condition);
4646
4647   if (TREE_CODE (condition) == INTEGER_CST && !integer_zerop (condition))
4648     /* Do nothing; the condition is satisfied. */
4649     ;
4650   else 
4651     {
4652       location_t saved_loc = input_location;
4653
4654       input_location = location;
4655       if (TREE_CODE (condition) == INTEGER_CST 
4656           && integer_zerop (condition))
4657         /* Report the error. */
4658         error ("static assertion failed: %E", message);
4659       else if (condition && condition != error_mark_node)
4660         {
4661           error ("non-constant condition for static assertion");
4662           cxx_constant_value (condition);
4663         }
4664       input_location = saved_loc;
4665     }
4666 }
4667 \f
4668 /* Returns the type of EXPR for cases where we can determine it even though
4669    EXPR is a type-dependent expression.  */
4670
4671 tree
4672 describable_type (tree expr)
4673 {
4674   tree type = NULL_TREE;
4675
4676   if (! type_dependent_expression_p (expr)
4677       && ! type_unknown_p (expr))
4678     {
4679       type = unlowered_expr_type (expr);
4680       if (real_lvalue_p (expr))
4681         type = build_reference_type (type);
4682     }
4683
4684   if (type)
4685     return type;
4686
4687   switch (TREE_CODE (expr))
4688     {
4689     case VAR_DECL:
4690     case PARM_DECL:
4691     case RESULT_DECL:
4692     case FUNCTION_DECL:
4693       return TREE_TYPE (expr);
4694       break;
4695
4696     case NEW_EXPR:
4697     case CONST_DECL:
4698     case TEMPLATE_PARM_INDEX:
4699     case CAST_EXPR:
4700     case STATIC_CAST_EXPR:
4701     case REINTERPRET_CAST_EXPR:
4702     case CONST_CAST_EXPR:
4703     case DYNAMIC_CAST_EXPR:
4704       type = TREE_TYPE (expr);
4705       break;
4706
4707     case INDIRECT_REF:
4708       {
4709         tree ptrtype = describable_type (TREE_OPERAND (expr, 0));
4710         if (ptrtype && POINTER_TYPE_P (ptrtype))
4711           type = build_reference_type (TREE_TYPE (ptrtype));
4712       }
4713       break;
4714
4715     default:
4716       if (TREE_CODE_CLASS (TREE_CODE (expr)) == tcc_constant)
4717         type = TREE_TYPE (expr);
4718       break;
4719     }
4720
4721   if (type && type_uses_auto (type))
4722     return NULL_TREE;
4723   else
4724     return type;
4725 }
4726
4727 /* Implements the C++0x decltype keyword. Returns the type of EXPR,
4728    suitable for use as a type-specifier.
4729
4730    ID_EXPRESSION_OR_MEMBER_ACCESS_P is true when EXPR was parsed as an
4731    id-expression or a class member access, FALSE when it was parsed as
4732    a full expression.  */
4733
4734 tree
4735 finish_decltype_type (tree expr, bool id_expression_or_member_access_p)
4736 {
4737   tree orig_expr = expr;
4738   tree type = NULL_TREE;
4739
4740   if (!expr || error_operand_p (expr))
4741     return error_mark_node;
4742
4743   if (TYPE_P (expr)
4744       || TREE_CODE (expr) == TYPE_DECL
4745       || (TREE_CODE (expr) == BIT_NOT_EXPR
4746           && TYPE_P (TREE_OPERAND (expr, 0))))
4747     {
4748       error ("argument to decltype must be an expression");
4749       return error_mark_node;
4750     }
4751
4752   if (type_dependent_expression_p (expr)
4753       /* In a template, a COMPONENT_REF has an IDENTIFIER_NODE for op1 even
4754          if it isn't dependent, so that we can check access control at
4755          instantiation time, so defer the decltype as well (PR 42277).  */
4756       || (id_expression_or_member_access_p
4757           && processing_template_decl
4758           && TREE_CODE (expr) == COMPONENT_REF))
4759     {
4760       if (id_expression_or_member_access_p)
4761         {
4762           switch (TREE_CODE (expr))
4763             {
4764             case VAR_DECL:
4765             case PARM_DECL:
4766             case RESULT_DECL:
4767             case FUNCTION_DECL:
4768             case CONST_DECL:
4769             case TEMPLATE_PARM_INDEX:
4770               type = TREE_TYPE (expr);
4771               break;
4772
4773             default:
4774               break;
4775             }
4776         }
4777
4778       if (type && !type_uses_auto (type))
4779         return type;
4780
4781     treat_as_dependent:
4782       type = cxx_make_type (DECLTYPE_TYPE);
4783       DECLTYPE_TYPE_EXPR (type) = expr;
4784       DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type)
4785         = id_expression_or_member_access_p;
4786       SET_TYPE_STRUCTURAL_EQUALITY (type);
4787
4788       return type;
4789     }
4790
4791   /* The type denoted by decltype(e) is defined as follows:  */
4792
4793   expr = resolve_nondeduced_context (expr);
4794
4795   /* To get the size of a static data member declared as an array of
4796      unknown bound, we need to instantiate it.  */
4797   if (TREE_CODE (expr) == VAR_DECL
4798       && VAR_HAD_UNKNOWN_BOUND (expr)
4799       && DECL_TEMPLATE_INSTANTIATION (expr))
4800     instantiate_decl (expr, /*defer_ok*/true, /*expl_inst_mem*/false);
4801
4802   if (id_expression_or_member_access_p)
4803     {
4804       /* If e is an id-expression or a class member access (5.2.5
4805          [expr.ref]), decltype(e) is defined as the type of the entity
4806          named by e. If there is no such entity, or e names a set of
4807          overloaded functions, the program is ill-formed.  */
4808       if (TREE_CODE (expr) == IDENTIFIER_NODE)
4809         expr = lookup_name (expr);
4810
4811       if (TREE_CODE (expr) == INDIRECT_REF)
4812         /* This can happen when the expression is, e.g., "a.b". Just
4813            look at the underlying operand.  */
4814         expr = TREE_OPERAND (expr, 0);
4815
4816       if (TREE_CODE (expr) == OFFSET_REF
4817           || TREE_CODE (expr) == MEMBER_REF)
4818         /* We're only interested in the field itself. If it is a
4819            BASELINK, we will need to see through it in the next
4820            step.  */
4821         expr = TREE_OPERAND (expr, 1);
4822
4823       if (TREE_CODE (expr) == BASELINK)
4824         /* See through BASELINK nodes to the underlying functions.  */
4825         expr = BASELINK_FUNCTIONS (expr);
4826
4827       if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
4828         expr = TREE_OPERAND (expr, 0);
4829
4830       if (TREE_CODE (expr) == OVERLOAD)
4831         {
4832           if (OVL_CHAIN (expr)
4833               || TREE_CODE (OVL_FUNCTION (expr)) == TEMPLATE_DECL)
4834             {
4835               error ("%qE refers to a set of overloaded functions", orig_expr);
4836               return error_mark_node;
4837             }
4838           else
4839             /* An overload set containing only one function: just look
4840                at that function.  */
4841             expr = OVL_FUNCTION (expr);
4842         }
4843
4844       switch (TREE_CODE (expr))
4845         {
4846         case FIELD_DECL:
4847           if (DECL_BIT_FIELD_TYPE (expr))
4848             {
4849               type = DECL_BIT_FIELD_TYPE (expr);
4850               break;
4851             }
4852           /* Fall through for fields that aren't bitfields.  */
4853
4854         case FUNCTION_DECL:
4855         case VAR_DECL:
4856         case CONST_DECL:
4857         case PARM_DECL:
4858         case RESULT_DECL:
4859         case TEMPLATE_PARM_INDEX:
4860           expr = mark_type_use (expr);
4861           type = TREE_TYPE (expr);
4862           break;
4863
4864         case ERROR_MARK:
4865           type = error_mark_node;
4866           break;
4867
4868         case COMPONENT_REF:
4869           mark_type_use (expr);
4870           type = is_bitfield_expr_with_lowered_type (expr);
4871           if (!type)
4872             type = TREE_TYPE (TREE_OPERAND (expr, 1));
4873           break;
4874
4875         case BIT_FIELD_REF:
4876           gcc_unreachable ();
4877
4878         case INTEGER_CST:
4879           /* We can get here when the id-expression refers to an
4880              enumerator.  */
4881           type = TREE_TYPE (expr);
4882           break;
4883
4884         default:
4885           gcc_assert (TYPE_P (expr) || DECL_P (expr)
4886                       || TREE_CODE (expr) == SCOPE_REF);
4887           error ("argument to decltype must be an expression");
4888           return error_mark_node;
4889         }
4890     }
4891   else
4892     {
4893       /* Expressions of reference type are sometimes wrapped in
4894          INDIRECT_REFs.  INDIRECT_REFs are just internal compiler
4895          representation, not part of the language, so we have to look
4896          through them.  */
4897       if (TREE_CODE (expr) == INDIRECT_REF
4898           && TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0)))
4899           == REFERENCE_TYPE)
4900         expr = TREE_OPERAND (expr, 0);
4901
4902       if (TREE_CODE (expr) == CALL_EXPR)
4903         {
4904           /* If e is a function call (5.2.2 [expr.call]) or an
4905            invocation of an overloaded operator (parentheses around e
4906            are ignored), decltype(e) is defined as the return type of
4907            that function.  */
4908           tree fndecl = get_callee_fndecl (expr);
4909           if (fndecl && fndecl != error_mark_node)
4910             type = TREE_TYPE (TREE_TYPE (fndecl));
4911           else 
4912             {
4913               tree target_type = TREE_TYPE (CALL_EXPR_FN (expr));
4914               if ((TREE_CODE (target_type) == REFERENCE_TYPE
4915                    || TREE_CODE (target_type) == POINTER_TYPE)
4916                   && (TREE_CODE (TREE_TYPE (target_type)) == FUNCTION_TYPE
4917                       || TREE_CODE (TREE_TYPE (target_type)) == METHOD_TYPE))
4918                 type = TREE_TYPE (TREE_TYPE (target_type));
4919               else if (processing_template_decl)
4920                 /* Within a template finish_call_expr doesn't resolve
4921                    CALL_EXPR_FN, so even though this decltype isn't really
4922                    dependent let's defer resolving it.  */
4923                 goto treat_as_dependent;
4924               else
4925                 sorry ("unable to determine the declared type of expression %<%E%>",
4926                        expr);
4927             }
4928         }
4929       else 
4930         {
4931           type = is_bitfield_expr_with_lowered_type (expr);
4932           if (type)
4933             {
4934               /* Bitfields are special, because their type encodes the
4935                  number of bits they store.  If the expression referenced a
4936                  bitfield, TYPE now has the declared type of that
4937                  bitfield.  */
4938               type = cp_build_qualified_type (type, 
4939                                               cp_type_quals (TREE_TYPE (expr)));
4940               
4941               if (real_lvalue_p (expr))
4942                 type = build_reference_type (type);
4943             }
4944           /* Within a lambda-expression:
4945
4946              Every occurrence of decltype((x)) where x is a possibly
4947              parenthesized id-expression that names an entity of
4948              automatic storage duration is treated as if x were
4949              transformed into an access to a corresponding data member
4950              of the closure type that would have been declared if x
4951              were a use of the denoted entity.  */
4952           else if (outer_automatic_var_p (expr)
4953                    && current_function_decl
4954                    && LAMBDA_FUNCTION_P (current_function_decl))
4955             type = capture_decltype (expr);
4956           else
4957             {
4958               /* Otherwise, where T is the type of e, if e is an lvalue,
4959                  decltype(e) is defined as T&, otherwise decltype(e) is
4960                  defined as T.  */
4961               type = TREE_TYPE (expr);
4962               if (type == error_mark_node)
4963                 return error_mark_node;
4964               else if (expr == current_class_ptr)
4965                 /* If the expression is just "this", we want the
4966                    cv-unqualified pointer for the "this" type.  */
4967                 type = TYPE_MAIN_VARIANT (type);
4968               else if (real_lvalue_p (expr))
4969                 {
4970                   if (TREE_CODE (type) != REFERENCE_TYPE
4971                       || TYPE_REF_IS_RVALUE (type))
4972                     type = build_reference_type (non_reference (type));
4973                 }
4974               else
4975                 type = non_reference (type);
4976             }
4977         }
4978     }
4979
4980   if (!type || type == unknown_type_node)
4981     {
4982       error ("type of %qE is unknown", expr);
4983       return error_mark_node;
4984     }
4985
4986   return type;
4987 }
4988
4989 /* Called from trait_expr_value to evaluate either __has_nothrow_assign or 
4990    __has_nothrow_copy, depending on assign_p.  */
4991
4992 static bool
4993 classtype_has_nothrow_assign_or_copy_p (tree type, bool assign_p)
4994 {
4995   tree fns;
4996
4997   if (assign_p)
4998     {
4999       int ix;
5000       ix = lookup_fnfields_1 (type, ansi_assopname (NOP_EXPR));
5001       if (ix < 0)
5002         return false;
5003       fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), ix);
5004     } 
5005   else if (TYPE_HAS_COPY_CTOR (type))
5006     {
5007       /* If construction of the copy constructor was postponed, create
5008          it now.  */
5009       if (CLASSTYPE_LAZY_COPY_CTOR (type))
5010         lazily_declare_fn (sfk_copy_constructor, type);
5011       if (CLASSTYPE_LAZY_MOVE_CTOR (type))
5012         lazily_declare_fn (sfk_move_constructor, type);
5013       fns = CLASSTYPE_CONSTRUCTORS (type);
5014     }
5015   else
5016     return false;
5017
5018   for (; fns; fns = OVL_NEXT (fns))
5019     {
5020       tree fn = OVL_CURRENT (fns);
5021  
5022       if (assign_p)
5023         {
5024           if (copy_fn_p (fn) == 0)
5025             continue;
5026         }
5027       else if (copy_fn_p (fn) <= 0)
5028         continue;
5029
5030       if (!TYPE_NOTHROW_P (TREE_TYPE (fn)))
5031         return false;
5032     }
5033
5034   return true;
5035 }
5036
5037 /* Actually evaluates the trait.  */
5038
5039 static bool
5040 trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
5041 {
5042   enum tree_code type_code1;
5043   tree t;
5044
5045   type_code1 = TREE_CODE (type1);
5046
5047   switch (kind)
5048     {
5049     case CPTK_HAS_NOTHROW_ASSIGN:
5050       type1 = strip_array_types (type1);
5051       return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5052               && (trait_expr_value (CPTK_HAS_TRIVIAL_ASSIGN, type1, type2)
5053                   || (CLASS_TYPE_P (type1)
5054                       && classtype_has_nothrow_assign_or_copy_p (type1,
5055                                                                  true))));
5056
5057     case CPTK_HAS_TRIVIAL_ASSIGN:
5058       /* ??? The standard seems to be missing the "or array of such a class
5059          type" wording for this trait.  */
5060       type1 = strip_array_types (type1);
5061       return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5062               && (trivial_type_p (type1)
5063                     || (CLASS_TYPE_P (type1)
5064                         && TYPE_HAS_TRIVIAL_COPY_ASSIGN (type1))));
5065
5066     case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5067       type1 = strip_array_types (type1);
5068       return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2) 
5069               || (CLASS_TYPE_P (type1)
5070                   && (t = locate_ctor (type1))
5071                   && TYPE_NOTHROW_P (TREE_TYPE (t))));
5072
5073     case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5074       type1 = strip_array_types (type1);
5075       return (trivial_type_p (type1)
5076               || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_DFLT (type1)));
5077
5078     case CPTK_HAS_NOTHROW_COPY:
5079       type1 = strip_array_types (type1);
5080       return (trait_expr_value (CPTK_HAS_TRIVIAL_COPY, type1, type2)
5081               || (CLASS_TYPE_P (type1)
5082                   && classtype_has_nothrow_assign_or_copy_p (type1, false)));
5083
5084     case CPTK_HAS_TRIVIAL_COPY:
5085       /* ??? The standard seems to be missing the "or array of such a class
5086          type" wording for this trait.  */
5087       type1 = strip_array_types (type1);
5088       return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5089               || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_COPY_CTOR (type1)));
5090
5091     case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5092       type1 = strip_array_types (type1);
5093       return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5094               || (CLASS_TYPE_P (type1)
5095                   && TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
5096
5097     case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5098       return type_has_virtual_destructor (type1);
5099
5100     case CPTK_IS_ABSTRACT:
5101       return (CLASS_TYPE_P (type1) && CLASSTYPE_PURE_VIRTUALS (type1));
5102
5103     case CPTK_IS_BASE_OF:
5104       return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5105               && DERIVED_FROM_P (type1, type2));
5106
5107     case CPTK_IS_CLASS:
5108       return (NON_UNION_CLASS_TYPE_P (type1));
5109
5110     case CPTK_IS_CONVERTIBLE_TO:
5111       /* TODO  */
5112       return false;
5113
5114     case CPTK_IS_EMPTY:
5115       return (NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1));
5116
5117     case CPTK_IS_ENUM:
5118       return (type_code1 == ENUMERAL_TYPE);
5119
5120     case CPTK_IS_POD:
5121       return (pod_type_p (type1));
5122
5123     case CPTK_IS_POLYMORPHIC:
5124       return (CLASS_TYPE_P (type1) && TYPE_POLYMORPHIC_P (type1));
5125
5126     case CPTK_IS_STD_LAYOUT:
5127       return (std_layout_type_p (type1));
5128
5129     case CPTK_IS_TRIVIAL:
5130       return (trivial_type_p (type1));
5131
5132     case CPTK_IS_UNION:
5133       return (type_code1 == UNION_TYPE);
5134
5135     case CPTK_IS_LITERAL_TYPE:
5136       return (literal_type_p (type1));
5137
5138     default:
5139       gcc_unreachable ();
5140       return false;
5141     }
5142 }
5143
5144 /* Returns true if TYPE is a complete type, an array of unknown bound,
5145    or (possibly cv-qualified) void, returns false otherwise.  */
5146
5147 static bool
5148 check_trait_type (tree type)
5149 {
5150   if (COMPLETE_TYPE_P (type))
5151     return true;
5152
5153   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
5154       && COMPLETE_TYPE_P (TREE_TYPE (type)))
5155     return true;
5156
5157   if (VOID_TYPE_P (type))
5158     return true;
5159
5160   return false;
5161 }
5162
5163 /* Process a trait expression.  */
5164
5165 tree
5166 finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
5167 {
5168   gcc_assert (kind == CPTK_HAS_NOTHROW_ASSIGN
5169               || kind == CPTK_HAS_NOTHROW_CONSTRUCTOR
5170               || kind == CPTK_HAS_NOTHROW_COPY
5171               || kind == CPTK_HAS_TRIVIAL_ASSIGN
5172               || kind == CPTK_HAS_TRIVIAL_CONSTRUCTOR
5173               || kind == CPTK_HAS_TRIVIAL_COPY
5174               || kind == CPTK_HAS_TRIVIAL_DESTRUCTOR
5175               || kind == CPTK_HAS_VIRTUAL_DESTRUCTOR          
5176               || kind == CPTK_IS_ABSTRACT
5177               || kind == CPTK_IS_BASE_OF
5178               || kind == CPTK_IS_CLASS
5179               || kind == CPTK_IS_CONVERTIBLE_TO
5180               || kind == CPTK_IS_EMPTY
5181               || kind == CPTK_IS_ENUM
5182               || kind == CPTK_IS_POD
5183               || kind == CPTK_IS_POLYMORPHIC
5184               || kind == CPTK_IS_STD_LAYOUT
5185               || kind == CPTK_IS_TRIVIAL
5186               || kind == CPTK_IS_LITERAL_TYPE
5187               || kind == CPTK_IS_UNION);
5188
5189   if (kind == CPTK_IS_CONVERTIBLE_TO)
5190     {
5191       sorry ("__is_convertible_to");
5192       return error_mark_node;
5193     }
5194
5195   if (type1 == error_mark_node
5196       || ((kind == CPTK_IS_BASE_OF || kind == CPTK_IS_CONVERTIBLE_TO)
5197           && type2 == error_mark_node))
5198     return error_mark_node;
5199
5200   if (processing_template_decl)
5201     {
5202       tree trait_expr = make_node (TRAIT_EXPR);
5203       TREE_TYPE (trait_expr) = boolean_type_node;
5204       TRAIT_EXPR_TYPE1 (trait_expr) = type1;
5205       TRAIT_EXPR_TYPE2 (trait_expr) = type2;
5206       TRAIT_EXPR_KIND (trait_expr) = kind;
5207       return trait_expr;
5208     }
5209
5210   complete_type (type1);
5211   if (type2)
5212     complete_type (type2);
5213
5214   switch (kind)
5215     {
5216     case CPTK_HAS_NOTHROW_ASSIGN:
5217     case CPTK_HAS_TRIVIAL_ASSIGN:
5218     case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5219     case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5220     case CPTK_HAS_NOTHROW_COPY:
5221     case CPTK_HAS_TRIVIAL_COPY:
5222     case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5223     case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5224     case CPTK_IS_ABSTRACT:
5225     case CPTK_IS_EMPTY:
5226     case CPTK_IS_POD:
5227     case CPTK_IS_POLYMORPHIC:
5228     case CPTK_IS_STD_LAYOUT:
5229     case CPTK_IS_TRIVIAL:
5230     case CPTK_IS_LITERAL_TYPE:
5231       if (!check_trait_type (type1))
5232         {
5233           error ("incomplete type %qT not allowed", type1);
5234           return error_mark_node;
5235         }
5236       break;
5237
5238     case CPTK_IS_BASE_OF:
5239       if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5240           && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
5241           && !COMPLETE_TYPE_P (type2))
5242         {
5243           error ("incomplete type %qT not allowed", type2);
5244           return error_mark_node;
5245         }
5246       break;
5247
5248     case CPTK_IS_CLASS:
5249     case CPTK_IS_ENUM:
5250     case CPTK_IS_UNION:
5251       break;
5252     
5253     case CPTK_IS_CONVERTIBLE_TO:
5254     default:
5255       gcc_unreachable ();
5256     }
5257
5258   return (trait_expr_value (kind, type1, type2)
5259           ? boolean_true_node : boolean_false_node);
5260 }
5261
5262 /* Do-nothing variants of functions to handle pragma FLOAT_CONST_DECIMAL64,
5263    which is ignored for C++.  */
5264
5265 void
5266 set_float_const_decimal64 (void)
5267 {
5268 }
5269
5270 void
5271 clear_float_const_decimal64 (void)
5272 {
5273 }
5274
5275 bool
5276 float_const_decimal64_p (void)
5277 {
5278   return 0;
5279 }
5280
5281 \f
5282 /* Return true if T is a literal type.   */
5283
5284 bool
5285 literal_type_p (tree t)
5286 {
5287   if (SCALAR_TYPE_P (t))
5288     return true;
5289   if (CLASS_TYPE_P (t))
5290     return CLASSTYPE_LITERAL_P (t);
5291   if (TREE_CODE (t) == ARRAY_TYPE)
5292     return literal_type_p (strip_array_types (t));
5293   return false;
5294 }
5295
5296 /* If DECL is a variable declared `constexpr', require its type
5297    be literal.  Return the DECL if OK, otherwise NULL.  */
5298
5299 tree
5300 ensure_literal_type_for_constexpr_object (tree decl)
5301 {
5302   tree type = TREE_TYPE (decl);
5303   if (TREE_CODE (decl) == VAR_DECL && DECL_DECLARED_CONSTEXPR_P (decl)
5304       && !processing_template_decl
5305       /* The call to complete_type is just for initializer_list.  */
5306       && !literal_type_p (complete_type (type)))
5307     {
5308       error ("the type %qT of constexpr variable %qD is not literal",
5309              type, decl);
5310       return NULL;
5311     }
5312   return decl;
5313 }
5314
5315 /* Representation of entries in the constexpr function definition table.  */
5316
5317 typedef struct GTY(()) constexpr_fundef {
5318   tree decl;
5319   tree body;
5320 } constexpr_fundef;
5321
5322 /* This table holds all constexpr function definitions seen in
5323    the current translation unit.  */
5324
5325 static GTY ((param_is (constexpr_fundef))) htab_t constexpr_fundef_table;
5326
5327 /* Utility function used for managing the constexpr function table.
5328    Return true if the entries pointed to by P and Q are for the
5329    same constexpr function.  */
5330
5331 static inline int
5332 constexpr_fundef_equal (const void *p, const void *q)
5333 {
5334   const constexpr_fundef *lhs = (const constexpr_fundef *) p;
5335   const constexpr_fundef *rhs = (const constexpr_fundef *) q;
5336   return lhs->decl == rhs->decl;
5337 }
5338
5339 /* Utility function used for managing the constexpr function table.
5340    Return a hash value for the entry pointed to by Q.  */
5341
5342 static inline hashval_t
5343 constexpr_fundef_hash (const void *p)
5344 {
5345   const constexpr_fundef *fundef = (const constexpr_fundef *) p;
5346   return DECL_UID (fundef->decl);
5347 }
5348
5349 /* Return a previously saved definition of function FUN.   */
5350
5351 static constexpr_fundef *
5352 retrieve_constexpr_fundef (tree fun)
5353 {
5354   constexpr_fundef fundef = { NULL, NULL };
5355   if (constexpr_fundef_table == NULL)
5356     return NULL;
5357
5358   fundef.decl = fun;
5359   return (constexpr_fundef *) htab_find (constexpr_fundef_table, &fundef);
5360 }
5361
5362 /* Return true if type expression T is a valid parameter type, or
5363    a valid return type, of a constexpr function.  */
5364
5365 static bool
5366 valid_type_in_constexpr_fundecl_p (tree t)
5367 {
5368   return (literal_type_p (t)
5369           /* FIXME we allow ref to non-literal; should change standard to
5370              match, or change back if not.  */
5371           || TREE_CODE (t) == REFERENCE_TYPE);
5372 }
5373
5374 /* Check whether the parameter and return types of FUN are valid for a
5375    constexpr function, and complain if COMPLAIN.  */
5376
5377 static bool
5378 is_valid_constexpr_fn (tree fun, bool complain)
5379 {
5380   tree parm = FUNCTION_FIRST_USER_PARM (fun);
5381   bool ret = true;
5382   for (; parm != NULL; parm = TREE_CHAIN (parm))
5383     if (!valid_type_in_constexpr_fundecl_p (TREE_TYPE (parm)))
5384       {
5385         ret = false;
5386         if (complain)
5387           error ("invalid type for parameter %q#D of constexpr function",
5388                  parm);
5389       }
5390
5391   if (!DECL_CONSTRUCTOR_P (fun))
5392     {
5393       tree rettype = TREE_TYPE (TREE_TYPE (fun));
5394       if (!valid_type_in_constexpr_fundecl_p (rettype))
5395         {
5396           ret = false;
5397           if (complain)
5398             error ("invalid return type %qT of constexpr function %qD",
5399                    rettype, fun);
5400         }
5401
5402       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
5403           && COMPLETE_TYPE_P (DECL_CONTEXT (fun))
5404           && !valid_type_in_constexpr_fundecl_p (DECL_CONTEXT (fun)))
5405         {
5406           ret = false;
5407           if (complain)
5408             error ("enclosing class of %q#D is not a literal type", fun);
5409         }
5410     }
5411
5412   return ret;
5413 }
5414
5415 /* Return non-null if FUN certainly designates a valid constexpr function
5416    declaration.  Otherwise return NULL.  Issue appropriate diagnostics
5417    if necessary.  Note that we only check the declaration, not the body
5418    of the function.  */
5419
5420 tree
5421 validate_constexpr_fundecl (tree fun)
5422 {
5423   constexpr_fundef entry;
5424   constexpr_fundef **slot;
5425
5426   if (processing_template_decl || !DECL_DECLARED_CONSTEXPR_P (fun))
5427     return NULL;
5428   else if (DECL_CLONED_FUNCTION_P (fun))
5429     /* We already checked the original function.  */
5430     return fun;
5431
5432   if (!is_valid_constexpr_fn (fun, !DECL_TEMPLATE_INSTANTIATION (fun)))
5433     {
5434       DECL_DECLARED_CONSTEXPR_P (fun) = false;
5435       return NULL;
5436     }
5437
5438   /* Create the constexpr function table if necessary.  */
5439   if (constexpr_fundef_table == NULL)
5440     constexpr_fundef_table = htab_create_ggc (101,
5441                                               constexpr_fundef_hash,
5442                                               constexpr_fundef_equal,
5443                                               ggc_free);
5444   entry.decl = fun;
5445   entry.body = NULL;
5446   slot = (constexpr_fundef **)
5447     htab_find_slot (constexpr_fundef_table, &entry, INSERT);
5448   if (*slot == NULL)
5449     {
5450       *slot = ggc_alloc_constexpr_fundef ();
5451       **slot = entry;
5452     }
5453   return fun;
5454 }
5455
5456 /* Subroutine of  build_constexpr_constructor_member_initializers.
5457    The expression tree T represents a data member initialization
5458    in a (constexpr) constructor definition.  Build a pairing of
5459    the data member with its initializer, and prepend that pair
5460    to the existing initialization pair INITS.  */
5461
5462 static bool
5463 build_data_member_initialization (tree t, VEC(constructor_elt,gc) **vec)
5464 {
5465   tree member, init;
5466   if (TREE_CODE (t) == CLEANUP_POINT_EXPR)
5467     t = TREE_OPERAND (t, 0);
5468   if (TREE_CODE (t) == EXPR_STMT)
5469     t = TREE_OPERAND (t, 0);
5470   if (t == error_mark_node)
5471     return false;
5472   if (TREE_CODE (t) == CLEANUP_STMT)
5473     /* We can't see a CLEANUP_STMT in a constructor for a literal class,
5474        but we can in a constexpr constructor for a non-literal class.  Just
5475        ignore it; either all the initialization will be constant, in which
5476        case the cleanup can't run, or it can't be constexpr.  */
5477     return true;
5478   if (TREE_CODE (t) == CONVERT_EXPR)
5479     t = TREE_OPERAND (t, 0);
5480   if (TREE_CODE (t) == INIT_EXPR
5481       || TREE_CODE (t) == MODIFY_EXPR)
5482     {
5483       member = TREE_OPERAND (t, 0);
5484       init = unshare_expr (TREE_OPERAND (t, 1));
5485       if (TREE_CODE (member) == INDIRECT_REF)
5486         {
5487           /* Don't put out anything for value-init of an empty base.  */
5488           gcc_assert (is_empty_class (TREE_TYPE (member)));
5489           gcc_assert (TREE_CODE (init) == CONSTRUCTOR
5490                       && CONSTRUCTOR_NELTS (init) == 0);
5491           return true;
5492         }
5493     }
5494   else
5495     {
5496       tree memtype;
5497       gcc_assert (TREE_CODE (t) == CALL_EXPR);
5498       member = CALL_EXPR_ARG (t, 0);
5499       memtype = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (member)));
5500       if (TREE_CODE (member) == NOP_EXPR)
5501         {
5502           /* We don't put out anything for an empty base.  */
5503           gcc_assert (is_empty_class (memtype));
5504           /* But if the constructor used isn't constexpr, leave in the call
5505              so we complain later.  */
5506           if (potential_constant_expression (t, tf_none))
5507             return true;
5508         }
5509       else
5510         {
5511           gcc_assert (TREE_CODE (member) == ADDR_EXPR);
5512           member = TREE_OPERAND (member, 0);
5513         }
5514       /* We don't use build_cplus_new here because it complains about
5515          abstract bases.  T has the wrong type, but
5516          cxx_eval_constant_expression doesn't care.  */
5517       init = unshare_expr (t);
5518     }
5519   if (TREE_CODE (member) == COMPONENT_REF)
5520     member = TREE_OPERAND (member, 1);
5521   CONSTRUCTOR_APPEND_ELT (*vec, member, init);
5522   return true;
5523 }
5524
5525 /* Build compile-time evalable representations of member-initializer list
5526    for a constexpr constructor.  */
5527
5528 static tree
5529 build_constexpr_constructor_member_initializers (tree type, tree body)
5530 {
5531   VEC(constructor_elt,gc) *vec = NULL;
5532   bool ok = true;
5533   if (TREE_CODE (body) == MUST_NOT_THROW_EXPR
5534       || TREE_CODE (body) == EH_SPEC_BLOCK)
5535     body = TREE_OPERAND (body, 0);
5536   if (TREE_CODE (body) == STATEMENT_LIST)
5537     body = STATEMENT_LIST_HEAD (body)->stmt;
5538   body = BIND_EXPR_BODY (body);
5539   if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
5540     ok = build_data_member_initialization (body, &vec);
5541   else if (TREE_CODE (body) == STATEMENT_LIST)
5542     {
5543       tree_stmt_iterator i;
5544       for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
5545         {
5546           ok = build_data_member_initialization (tsi_stmt (i), &vec);
5547           if (!ok)
5548             break;
5549         }
5550     }
5551   else
5552     gcc_assert (errorcount > 0);
5553   if (ok)
5554     return build_constructor (type, vec);
5555   else
5556     return error_mark_node;
5557 }
5558
5559 /* We are processing the definition of the constexpr function FUN.
5560    Check that its BODY fulfills the propriate requirements and
5561    enter it in the constexpr function definition table.
5562    For constructor BODY is actually the TREE_LIST of the
5563    member-initializer list.  */
5564
5565 tree
5566 register_constexpr_fundef (tree fun, tree body)
5567 {
5568   constexpr_fundef *fundef = retrieve_constexpr_fundef (fun);
5569   gcc_assert (fundef != NULL && fundef->body == NULL);
5570
5571   if (DECL_CONSTRUCTOR_P (fun))
5572     body = build_constexpr_constructor_member_initializers
5573       (DECL_CONTEXT (fun), body);
5574   else
5575     {
5576       if (TREE_CODE (body) == BIND_EXPR)
5577         body = BIND_EXPR_BODY (body);
5578       if (TREE_CODE (body) == EH_SPEC_BLOCK)
5579         body = EH_SPEC_STMTS (body);
5580       if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
5581         body = TREE_OPERAND (body, 0);
5582       if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
5583         body = TREE_OPERAND (body, 0);
5584       if (TREE_CODE (body) != RETURN_EXPR)
5585         {
5586           error ("body of constexpr function %qD not a return-statement", fun);
5587           DECL_DECLARED_CONSTEXPR_P (fun) = false;
5588           return NULL;
5589         }
5590       body = unshare_expr (TREE_OPERAND (body, 0));
5591     }
5592
5593   if (!potential_constant_expression (body, (DECL_TEMPLATE_INSTANTIATION (fun)
5594                                              ? tf_none : tf_error)))
5595     {
5596       DECL_DECLARED_CONSTEXPR_P (fun) = false;
5597       return NULL;
5598     }
5599   fundef->body = body;
5600   return fun;
5601 }
5602
5603 /* Objects of this type represent calls to constexpr functions
5604    along with the bindings of parameters to their arguments, for
5605    the purpose of compile time evaluation.  */
5606
5607 typedef struct GTY(()) constexpr_call {
5608   /* Description of the constexpr function definition.  */
5609   constexpr_fundef *fundef;
5610   /* Parameter bindings enironment.  A TREE_LIST where each TREE_PURPOSE
5611      is a parameter _DECL and the TREE_VALUE is the value of the parameter.
5612      Note: This arrangement is made to accomodate the use of
5613      iterative_hash_template_arg (see pt.c).  If you change this
5614      representation, also change the hash calculation in
5615      cxx_eval_call_expression.  */
5616   tree bindings;
5617   /* Result of the call.
5618        NULL means the call is being evaluated.
5619        error_mark_node means that the evaluation was erroneous;
5620        otherwise, the actuall value of the call.  */
5621   tree result;
5622   /* The hash of this call; we remember it here to avoid having to
5623      recalculate it when expanding the hash table.  */
5624   hashval_t hash;
5625 } constexpr_call;
5626
5627 /* A table of all constexpr calls that have been evaluated by the
5628    compiler in this translation unit.  */
5629
5630 static GTY ((param_is (constexpr_call))) htab_t constexpr_call_table;
5631
5632 static tree cxx_eval_constant_expression (const constexpr_call *, tree,
5633                                           bool, bool, bool *);
5634
5635 /* Compute a hash value for a constexpr call representation.  */
5636
5637 static hashval_t
5638 constexpr_call_hash (const void *p)
5639 {
5640   const constexpr_call *info = (const constexpr_call *) p;
5641   return info->hash;
5642 }
5643
5644 /* Return 1 if the objects pointed to by P and Q represent calls
5645    to the same constexpr function with the same arguments.
5646    Otherwise, return 0.  */
5647
5648 static int
5649 constexpr_call_equal (const void *p, const void *q)
5650 {
5651   const constexpr_call *lhs = (const constexpr_call *) p;
5652   const constexpr_call *rhs = (const constexpr_call *) q;
5653   tree lhs_bindings;
5654   tree rhs_bindings;
5655   if (lhs == rhs)
5656     return 1;
5657   if (!constexpr_fundef_equal (lhs->fundef, rhs->fundef))
5658     return 0;
5659   lhs_bindings = lhs->bindings;
5660   rhs_bindings = rhs->bindings;
5661   while (lhs_bindings != NULL && rhs_bindings != NULL)
5662     {
5663       tree lhs_arg = TREE_VALUE (lhs_bindings);
5664       tree rhs_arg = TREE_VALUE (rhs_bindings);
5665       gcc_assert (TREE_TYPE (lhs_arg) == TREE_TYPE (rhs_arg));
5666       if (!cp_tree_equal (lhs_arg, rhs_arg))
5667         return 0;
5668       lhs_bindings = TREE_CHAIN (lhs_bindings);
5669       rhs_bindings = TREE_CHAIN (rhs_bindings);
5670     }
5671   return lhs_bindings == rhs_bindings;
5672 }
5673
5674 /* Initialize the constexpr call table, if needed.  */
5675
5676 static void
5677 maybe_initialize_constexpr_call_table (void)
5678 {
5679   if (constexpr_call_table == NULL)
5680     constexpr_call_table = htab_create_ggc (101,
5681                                             constexpr_call_hash,
5682                                             constexpr_call_equal,
5683                                             ggc_free);
5684 }
5685
5686 /* Return true if T designates the implied `this' parameter.  */
5687
5688 static inline bool
5689 is_this_parameter (tree t)
5690 {
5691   return t == current_class_ptr;
5692 }
5693
5694 /* We have an expression tree T that represents a call, either CALL_EXPR
5695    or AGGR_INIT_EXPR.  If the call is lexically to a named function,
5696    retrun the _DECL for that function.  */
5697
5698 static tree
5699 get_function_named_in_call (tree t)
5700 {
5701   tree fun = NULL;
5702   switch (TREE_CODE (t))
5703     {
5704     case CALL_EXPR:
5705       fun = CALL_EXPR_FN (t);
5706       break;
5707
5708     case AGGR_INIT_EXPR:
5709       fun = AGGR_INIT_EXPR_FN (t);
5710       break;
5711
5712     default:
5713       gcc_unreachable();
5714       break;
5715     }
5716   if (TREE_CODE (fun) == ADDR_EXPR
5717       && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL)
5718     fun = TREE_OPERAND (fun, 0);
5719   return fun;
5720 }
5721
5722 /* We have an expression tree T that represents a call, either CALL_EXPR
5723    or AGGR_INIT_EXPR.  Return the Nth argument.  */
5724
5725 static inline tree
5726 get_nth_callarg (tree t, int n)
5727 {
5728   switch (TREE_CODE (t))
5729     {
5730     case CALL_EXPR:
5731       return CALL_EXPR_ARG (t, n);
5732
5733     case AGGR_INIT_EXPR:
5734       return AGGR_INIT_EXPR_ARG (t, n);
5735
5736     default:
5737       gcc_unreachable ();
5738       return NULL;
5739     }
5740 }
5741
5742 /* Look up the binding of the function parameter T in a constexpr
5743    function call context CALL.  */
5744
5745 static tree
5746 lookup_parameter_binding (const constexpr_call *call, tree t)
5747 {
5748   tree b = purpose_member (t, call->bindings);
5749   return TREE_VALUE (b);
5750 }
5751
5752 /* Attempt to evaluate T which represents a call to a builtin function.
5753    We assume here that all builtin functions evaluate to scalar types
5754    represented by _CST nodes.  */
5755
5756 static tree
5757 cxx_eval_builtin_function_call (const constexpr_call *call, tree t,
5758                                 bool allow_non_constant, bool addr,
5759                                 bool *non_constant_p)
5760 {
5761   const int nargs = call_expr_nargs (t);
5762   tree *args = (tree *) alloca (nargs * sizeof (tree));
5763   tree new_call;
5764   int i;
5765   for (i = 0; i < nargs; ++i)
5766     {
5767       args[i] = cxx_eval_constant_expression (call, CALL_EXPR_ARG (t, i),
5768                                               allow_non_constant, addr,
5769                                               non_constant_p);
5770       if (allow_non_constant && *non_constant_p)
5771         return t;
5772     }
5773   if (*non_constant_p)
5774     return t;
5775   new_call = build_call_array_loc (EXPR_LOCATION (t), TREE_TYPE (t),
5776                                    CALL_EXPR_FN (t), nargs, args);
5777   return fold (new_call);
5778 }
5779
5780 /* TEMP is the constant value of a temporary object of type TYPE.  Adjust
5781    the type of the value to match.  */
5782
5783 static tree
5784 adjust_temp_type (tree type, tree temp)
5785 {
5786   if (TREE_TYPE (temp) == type)
5787     return temp;
5788   /* Avoid wrapping an aggregate value in a NOP_EXPR.  */
5789   if (TREE_CODE (temp) == CONSTRUCTOR)
5790     return build_constructor (type, CONSTRUCTOR_ELTS (temp));
5791   gcc_assert (SCALAR_TYPE_P (type));
5792   return cp_fold_convert (type, temp);
5793 }
5794
5795 /* Subroutine of cxx_eval_call_expression.
5796    We are processing a call expression (either CALL_EXPR or
5797    AGGR_INIT_EXPR) in the call context of OLD_CALL.  Evaluate
5798    all arguments and bind their values to correspondings
5799    parameters, making up the NEW_CALL context.  */
5800
5801 static void
5802 cxx_bind_parameters_in_call (const constexpr_call *old_call, tree t,
5803                              constexpr_call *new_call,
5804                              bool allow_non_constant,
5805                              bool *non_constant_p)
5806 {
5807   const int nargs = call_expr_nargs (t);
5808   tree fun = new_call->fundef->decl;
5809   tree parms = DECL_ARGUMENTS (fun);
5810   int i;
5811   for (i = 0; i < nargs; ++i)
5812     {
5813       tree x, arg;
5814       tree type = parms ? TREE_TYPE (parms) : void_type_node;
5815       /* For member function, the first argument is a pointer to the implied
5816          object.  And for an object contruction, don't bind `this' before
5817          it is fully constructed.  */
5818       if (i == 0 && DECL_CONSTRUCTOR_P (fun))
5819         goto next;
5820       x = get_nth_callarg (t, i);
5821       arg = cxx_eval_constant_expression (old_call, x, allow_non_constant,
5822                                           TREE_CODE (type) == REFERENCE_TYPE,
5823                                           non_constant_p);
5824       /* Don't VERIFY_CONSTANT here.  */
5825       if (*non_constant_p && allow_non_constant)
5826         return;
5827       /* Just discard ellipsis args after checking their constantitude.  */
5828       if (!parms)
5829         continue;
5830
5831       /* Make sure the binding has the same type as the parm.  */
5832       if (TREE_CODE (type) != REFERENCE_TYPE)
5833         arg = adjust_temp_type (type, arg);
5834       new_call->bindings = tree_cons (parms, arg, new_call->bindings);
5835     next:
5836       parms = TREE_CHAIN (parms);
5837     }
5838 }
5839
5840 /* Variables and functions to manage constexpr call expansion context.
5841    These do not need to be marked for PCH or GC.  */
5842
5843 static VEC(tree,heap) *call_stack = NULL;
5844 static int call_stack_tick;
5845 static int last_cx_error_tick;
5846
5847 static void
5848 push_cx_call_context (tree call)
5849 {
5850   ++call_stack_tick;
5851   if (!EXPR_HAS_LOCATION (call))
5852     SET_EXPR_LOCATION (call, input_location);
5853   VEC_safe_push (tree, heap, call_stack, call);
5854 }
5855
5856 static void
5857 pop_cx_call_context (void)
5858 {
5859   ++call_stack_tick;
5860   VEC_pop (tree, call_stack);
5861 }
5862
5863 VEC(tree,heap) *
5864 cx_error_context (void)
5865 {
5866   VEC(tree,heap) *r = NULL;
5867   if (call_stack_tick != last_cx_error_tick
5868       && !VEC_empty (tree, call_stack))
5869     r = call_stack;
5870   last_cx_error_tick = call_stack_tick;
5871   return r;
5872 }
5873
5874 /* Subroutine of cxx_eval_constant_expression.
5875    Evaluate the call expression tree T in the context of OLD_CALL expression
5876    evaluation.  */
5877
5878 static tree
5879 cxx_eval_call_expression (const constexpr_call *old_call, tree t,
5880                           bool allow_non_constant, bool addr,
5881                           bool *non_constant_p)
5882 {
5883   location_t loc = EXPR_LOC_OR_HERE (t);
5884   tree fun = get_function_named_in_call (t);
5885   tree result;
5886   constexpr_call new_call = { NULL, NULL, NULL, 0 };
5887   constexpr_call **slot;
5888   if (TREE_CODE (fun) != FUNCTION_DECL)
5889     {
5890       /* Might be a constexpr function pointer.  */
5891       fun = cxx_eval_constant_expression (old_call, fun, allow_non_constant,
5892                                           /*addr*/false, non_constant_p);
5893       if (TREE_CODE (fun) == ADDR_EXPR)
5894         fun = TREE_OPERAND (fun, 0);
5895     }
5896   if (TREE_CODE (fun) != FUNCTION_DECL)
5897     {
5898       if (!allow_non_constant)
5899         error_at (loc, "expression %qE does not designate a constexpr "
5900                   "function", fun);
5901       *non_constant_p = true;
5902       return t;
5903     }
5904   if (DECL_CLONED_FUNCTION_P (fun))
5905     fun = DECL_CLONED_FUNCTION (fun);
5906   if (is_builtin_fn (fun))
5907     return cxx_eval_builtin_function_call (old_call, t, allow_non_constant,
5908                                            addr, non_constant_p);
5909   if (!DECL_DECLARED_CONSTEXPR_P (fun))
5910     {
5911       if (!allow_non_constant)
5912         {
5913           error_at (loc, "%qD is not a constexpr function", fun);
5914           if (DECL_TEMPLATE_INSTANTIATION (fun)
5915               && DECL_DECLARED_CONSTEXPR_P (DECL_TEMPLATE_RESULT
5916                                             (DECL_TI_TEMPLATE (fun))))
5917             is_valid_constexpr_fn (fun, true);
5918         }
5919       *non_constant_p = true;
5920       return t;
5921     }
5922
5923   /* If in direct recursive call, optimize definition search.  */
5924   if (old_call != NULL && old_call->fundef->decl == fun)
5925     new_call.fundef = old_call->fundef;
5926   else
5927     {
5928       new_call.fundef = retrieve_constexpr_fundef (fun);
5929       if (new_call.fundef == NULL || new_call.fundef->body == NULL)
5930         {
5931           if (!allow_non_constant)
5932             error_at (loc, "%qD used before its definition", fun);
5933           *non_constant_p = true;
5934           return t;
5935         }
5936     }
5937   cxx_bind_parameters_in_call (old_call, t, &new_call,
5938                                allow_non_constant, non_constant_p);
5939   if (*non_constant_p)
5940     return t;
5941
5942   push_cx_call_context (t);
5943
5944   new_call.hash
5945     = iterative_hash_template_arg (new_call.bindings,
5946                                    constexpr_fundef_hash (new_call.fundef));
5947
5948   /* If we have seen this call before, we are done.  */
5949   maybe_initialize_constexpr_call_table ();
5950   slot = (constexpr_call **)
5951     htab_find_slot (constexpr_call_table, &new_call, INSERT);
5952   if (*slot != NULL)
5953     {
5954       /* Calls which are in progress have their result set to NULL
5955          so that we can detect circular dependencies.  */
5956       if ((*slot)->result == NULL)
5957         {
5958           if (!allow_non_constant)
5959             error ("call has circular dependency");
5960           (*slot)->result = result = error_mark_node;
5961         }
5962       else
5963         {
5964           result = (*slot)->result;
5965           if (result == error_mark_node && !allow_non_constant)
5966             /* Re-evaluate to get the error.  */
5967             cxx_eval_constant_expression (&new_call, new_call.fundef->body,
5968                                           allow_non_constant, addr,
5969                                           non_constant_p);
5970         }
5971     }
5972   else
5973     {
5974       /* We need to keep a pointer to the entry, not just the slot, as the
5975          slot can move in the call to cxx_eval_builtin_function_call.  */
5976       constexpr_call *entry = ggc_alloc_constexpr_call ();
5977       *entry = new_call;
5978       *slot = entry;
5979       result
5980         = cxx_eval_constant_expression (&new_call, new_call.fundef->body,
5981                                         allow_non_constant, addr,
5982                                         non_constant_p);
5983       if (*non_constant_p)
5984         entry->result = result = error_mark_node;
5985       else
5986         {
5987           /* If this was a call to initialize an object, set the type of
5988              the CONSTRUCTOR to the type of that object.  */
5989           if (DECL_CONSTRUCTOR_P (fun))
5990             {
5991               tree ob_arg = get_nth_callarg (t, 0);
5992               STRIP_NOPS (ob_arg);
5993               gcc_assert (TREE_CODE (TREE_TYPE (ob_arg)) == POINTER_TYPE
5994                           && CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (ob_arg))));
5995               result = adjust_temp_type (TREE_TYPE (TREE_TYPE (ob_arg)),
5996                                          result);
5997             }
5998           entry->result = result;
5999         }
6000     }
6001
6002   pop_cx_call_context ();
6003   return result;
6004 }
6005
6006 /* FIXME speed this up, it's taking 16% of compile time on sieve testcase.  */
6007
6008 bool
6009 reduced_constant_expression_p (tree t)
6010 {
6011   if (TREE_OVERFLOW_P (t))
6012     /* Integer overflow makes this not a constant expression.  */
6013     return false;
6014   /* FIXME are we calling this too much?  */
6015   return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
6016 }
6017
6018 /* Some expressions may have constant operands but are not constant
6019    themselves, such as 1/0.  Call this function (or rather, the macro
6020    following it) to check for that condition.
6021
6022    We only call this in places that require an arithmetic constant, not in
6023    places where we might have a non-constant expression that can be a
6024    component of a constant expression, such as the address of a constexpr
6025    variable that might be dereferenced later.  */
6026
6027 static bool
6028 verify_constant (tree t, bool allow_non_constant, bool *non_constant_p)
6029 {
6030   if (!*non_constant_p && !reduced_constant_expression_p (t))
6031     {
6032       if (!allow_non_constant)
6033         {
6034           /* If T was already folded to a _CST with TREE_OVERFLOW set,
6035              printing the folded constant isn't helpful.  */
6036           if (TREE_OVERFLOW_P (t))
6037             {
6038               permerror (input_location, "overflow in constant expression");
6039               /* If we're being permissive (and are in an enforcing
6040                  context), consider this constant.  */
6041               if (flag_permissive)
6042                 return false;
6043             }
6044           else
6045             error ("%q+E is not a constant expression", t);
6046         }
6047       *non_constant_p = true;
6048     }
6049   return *non_constant_p;
6050 }
6051 #define VERIFY_CONSTANT(X)                                              \
6052 do {                                                                    \
6053   if (verify_constant ((X), allow_non_constant, non_constant_p))        \
6054     return t;                                                           \
6055  } while (0)
6056
6057 /* Subroutine of cxx_eval_constant_expression.
6058    Attempt to reduce the unary expression tree T to a compile time value.
6059    If successful, return the value.  Otherwise issue a diagnostic
6060    and return error_mark_node.  */
6061
6062 static tree
6063 cxx_eval_unary_expression (const constexpr_call *call, tree t,
6064                            bool allow_non_constant, bool addr,
6065                            bool *non_constant_p)
6066 {
6067   tree r;
6068   tree orig_arg = TREE_OPERAND (t, 0);
6069   tree arg = cxx_eval_constant_expression (call, orig_arg, allow_non_constant,
6070                                            addr, non_constant_p);
6071   VERIFY_CONSTANT (arg);
6072   if (arg == orig_arg)
6073     return t;
6074   r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), arg);
6075   VERIFY_CONSTANT (r);
6076   return r;
6077 }
6078
6079 /* Subroutine of cxx_eval_constant_expression.
6080    Like cxx_eval_unary_expression, except for binary expressions.  */
6081
6082 static tree
6083 cxx_eval_binary_expression (const constexpr_call *call, tree t,
6084                             bool allow_non_constant, bool addr,
6085                             bool *non_constant_p)
6086 {
6087   tree r;
6088   tree orig_lhs = TREE_OPERAND (t, 0);
6089   tree orig_rhs = TREE_OPERAND (t, 1);
6090   tree lhs, rhs;
6091   lhs = cxx_eval_constant_expression (call, orig_lhs,
6092                                       allow_non_constant, addr,
6093                                       non_constant_p);
6094   VERIFY_CONSTANT (lhs);
6095   rhs = cxx_eval_constant_expression (call, orig_rhs,
6096                                       allow_non_constant, addr,
6097                                       non_constant_p);
6098   VERIFY_CONSTANT (rhs);
6099   if (lhs == orig_lhs && rhs == orig_rhs)
6100     return t;
6101   r = fold_build2 (TREE_CODE (t), TREE_TYPE (t), lhs, rhs);
6102   VERIFY_CONSTANT (r);
6103   return r;
6104 }
6105
6106 /* Subroutine of cxx_eval_constant_expression.
6107    Attempt to evaluate condition expressions.  Dead branches are not
6108    looked into.  */
6109
6110 static tree
6111 cxx_eval_conditional_expression (const constexpr_call *call, tree t,
6112                                  bool allow_non_constant, bool addr,
6113                                  bool *non_constant_p)
6114 {
6115   tree val = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6116                                            allow_non_constant, addr,
6117                                            non_constant_p);
6118   VERIFY_CONSTANT (val);
6119   if (val == boolean_true_node)
6120     return cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6121                                          allow_non_constant, addr,
6122                                          non_constant_p);
6123   gcc_assert (val == boolean_false_node);
6124   /* Don't VERIFY_CONSTANT here.  */
6125   return cxx_eval_constant_expression (call, TREE_OPERAND (t, 2),
6126                                        allow_non_constant, addr,
6127                                        non_constant_p);
6128 }
6129
6130 /* Subroutine of cxx_eval_constant_expression.
6131    Attempt to reduce a reference to an array slot.  */
6132
6133 static tree
6134 cxx_eval_array_reference (const constexpr_call *call, tree t,
6135                           bool allow_non_constant, bool addr,
6136                           bool *non_constant_p)
6137 {
6138   tree oldary = TREE_OPERAND (t, 0);
6139   tree ary = cxx_eval_constant_expression (call, oldary,
6140                                            allow_non_constant, addr,
6141                                            non_constant_p);
6142   tree index, oldidx;
6143   HOST_WIDE_INT i;
6144   unsigned len;
6145   if (*non_constant_p)
6146     return t;
6147   oldidx = TREE_OPERAND (t, 1);
6148   index = cxx_eval_constant_expression (call, oldidx,
6149                                         allow_non_constant, false,
6150                                         non_constant_p);
6151   VERIFY_CONSTANT (index);
6152   if (addr && ary == oldary && index == oldidx)
6153     return t;
6154   else if (addr)
6155     return build4 (ARRAY_REF, TREE_TYPE (t), ary, index, NULL, NULL);
6156   len = (TREE_CODE (ary) == CONSTRUCTOR
6157          ? CONSTRUCTOR_NELTS (ary)
6158          : (unsigned)TREE_STRING_LENGTH (ary));
6159   if (compare_tree_int (index, len) >= 0)
6160     {
6161       if (!allow_non_constant)
6162         error ("array subscript out of bound");
6163       *non_constant_p = true;
6164       return t;
6165     }
6166   i = tree_low_cst (index, 0);
6167   if (TREE_CODE (ary) == CONSTRUCTOR)
6168     return VEC_index (constructor_elt, CONSTRUCTOR_ELTS (ary), i)->value;
6169   else
6170     return build_int_cst (cv_unqualified (TREE_TYPE (TREE_TYPE (ary))),
6171                           TREE_STRING_POINTER (ary)[i]);
6172   /* Don't VERIFY_CONSTANT here.  */
6173 }
6174
6175 /* Subroutine of cxx_eval_constant_expression.
6176    Attempt to reduce a field access of a value of class type.  */
6177
6178 static tree
6179 cxx_eval_component_reference (const constexpr_call *call, tree t,
6180                               bool allow_non_constant, bool addr,
6181                               bool *non_constant_p)
6182 {
6183   unsigned HOST_WIDE_INT i;
6184   tree field;
6185   tree value;
6186   tree part = TREE_OPERAND (t, 1);
6187   tree orig_whole = TREE_OPERAND (t, 0);
6188   tree whole = cxx_eval_constant_expression (call, orig_whole,
6189                                              allow_non_constant, addr,
6190                                              non_constant_p);
6191   if (whole == orig_whole)
6192     return t;
6193   if (addr)
6194     return fold_build3 (COMPONENT_REF, TREE_TYPE (t),
6195                         whole, part, NULL_TREE);
6196   /* Don't VERIFY_CONSTANT here; we only want to check that we got a
6197      CONSTRUCTOR.  */
6198   if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
6199     {
6200       if (!allow_non_constant)
6201         error ("%qE is not a constant expression", orig_whole);
6202       *non_constant_p = true;
6203     }
6204   if (*non_constant_p)
6205     return t;
6206   FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
6207     {
6208       if (field == part)
6209         return value;
6210     }
6211   if (TREE_CODE (TREE_TYPE (whole)) == UNION_TYPE)
6212     {
6213       /* FIXME Mike Miller wants this to be OK.  */
6214       if (!allow_non_constant)
6215         error ("accessing %qD member instead of initialized %qD member in "
6216                "constant expression", part, CONSTRUCTOR_ELT (whole, 0)->index);
6217       *non_constant_p = true;
6218       return t;
6219     }
6220   gcc_unreachable();
6221   return error_mark_node;
6222 }
6223
6224 /* Subroutine of cxx_eval_constant_expression.
6225    Evaluate a short-circuited logical expression T in the context
6226    of a given constexpr CALL.  BAILOUT_VALUE is the value for
6227    early return.  CONTINUE_VALUE is used here purely for
6228    sanity check purposes.  */
6229
6230 static tree
6231 cxx_eval_logical_expression (const constexpr_call *call, tree t,
6232                              tree bailout_value, tree continue_value,
6233                              bool allow_non_constant, bool addr,
6234                              bool *non_constant_p)
6235 {
6236   tree r;
6237   tree lhs = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6238                                            allow_non_constant, addr,
6239                                            non_constant_p);
6240   VERIFY_CONSTANT (lhs);
6241   if (lhs == bailout_value)
6242     return lhs;
6243   gcc_assert (lhs == continue_value);
6244   r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6245                                     allow_non_constant, addr, non_constant_p);
6246   VERIFY_CONSTANT (r);
6247   return r;
6248 }
6249
6250 /* Subroutine of cxx_eval_constant_expression.
6251    The expression tree T denotes a C-style array or a C-style
6252    aggregate.  Reduce it to a constant expression.  */
6253
6254 static tree
6255 cxx_eval_bare_aggregate (const constexpr_call *call, tree t,
6256                          bool allow_non_constant, bool addr,
6257                          bool *non_constant_p)
6258 {
6259   VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (t);
6260   VEC(constructor_elt,gc) *n = VEC_alloc (constructor_elt, gc,
6261                                           VEC_length (constructor_elt, v));
6262   constructor_elt *ce;
6263   HOST_WIDE_INT i;
6264   bool changed = false;
6265   tree type = TREE_TYPE (t);
6266   gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t));
6267   for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
6268     {
6269       tree elt = cxx_eval_constant_expression (call, ce->value,
6270                                                allow_non_constant, addr,
6271                                                non_constant_p);
6272       /* Don't VERIFY_CONSTANT here.  */
6273       if (allow_non_constant && *non_constant_p)
6274         goto fail;
6275       if (elt != ce->value)
6276         changed = true;
6277       if (TREE_CODE (type) != ARRAY_TYPE
6278           && !(same_type_ignoring_top_level_qualifiers_p
6279                (DECL_CONTEXT (ce->index), type)))
6280         {
6281           /* Push our vtable pointer down into the base where it belongs.  */
6282           tree vptr_base = DECL_CONTEXT (ce->index);
6283           tree base_ctor;
6284           gcc_assert (ce->index == TYPE_VFIELD (type));
6285           for (base_ctor = VEC_index (constructor_elt, n, 0)->value; ;
6286                base_ctor = CONSTRUCTOR_ELT (base_ctor, 0)->value)
6287             if (TREE_TYPE (base_ctor) == vptr_base)
6288               {
6289                 constructor_elt *p = CONSTRUCTOR_ELT (base_ctor, 0);
6290                 gcc_assert (p->index == ce->index);
6291                 p->value = elt;
6292                 break;
6293               }
6294         }
6295       else
6296         CONSTRUCTOR_APPEND_ELT (n, ce->index, elt);
6297     }
6298   if (*non_constant_p || !changed)
6299     {
6300     fail:
6301       VEC_free (constructor_elt, gc, n);
6302       return t;
6303     }
6304   t = build_constructor (TREE_TYPE (t), n);
6305   TREE_CONSTANT (t) = true;
6306   return t;
6307 }
6308
6309 /* Subroutine of cxx_eval_constant_expression.
6310    The expression tree T is a VEC_INIT_EXPR which denotes the desired
6311    initialization of a non-static data member of array type.  Reduce it to a
6312    CONSTRUCTOR.
6313
6314    Note that this is only intended to support the initializations done by
6315    defaulted constructors for classes with non-static data members of array
6316    type.  In this case, VEC_INIT_EXPR_INIT will either be NULL_TREE for the
6317    default constructor, or a COMPONENT_REF for the copy/move
6318    constructor.  */
6319
6320 static tree
6321 cxx_eval_vec_init_1 (const constexpr_call *call, tree atype, tree init,
6322                      bool allow_non_constant, bool addr,
6323                      bool *non_constant_p)
6324 {
6325   tree elttype = TREE_TYPE (atype);
6326   int max = tree_low_cst (array_type_nelts (atype), 0);
6327   VEC(constructor_elt,gc) *n = VEC_alloc (constructor_elt, gc, max + 1);
6328   int i;
6329
6330   /* For the default constructor, build up a call to the default
6331      constructor of the element type.  We only need to handle class types
6332      here, as for a constructor to be constexpr, all members must be
6333      initialized, which for a defaulted default constructor means they must
6334      be of a class type with a constexpr default constructor.  */
6335   if (!init)
6336     {
6337       VEC(tree,gc) *argvec = make_tree_vector ();
6338       init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
6339                                         &argvec, elttype, LOOKUP_NORMAL,
6340                                         tf_warning_or_error);
6341       release_tree_vector (argvec);
6342       init = cxx_eval_constant_expression (call, init, allow_non_constant,
6343                                            addr, non_constant_p);
6344     }
6345
6346   if (*non_constant_p && !allow_non_constant)
6347     goto fail;
6348
6349   for (i = 0; i <= max; ++i)
6350     {
6351       tree idx = build_int_cst (size_type_node, i);
6352       tree eltinit;
6353       if (TREE_CODE (elttype) == ARRAY_TYPE)
6354         {
6355           /* A multidimensional array; recurse.  */
6356           eltinit = cp_build_array_ref (input_location, init, idx,
6357                                         tf_warning_or_error);
6358           eltinit = cxx_eval_vec_init_1 (call, elttype, eltinit,
6359                                          allow_non_constant, addr,
6360                                          non_constant_p);
6361         }
6362       else if (TREE_CODE (init) == CONSTRUCTOR)
6363         {
6364           /* Initializing an element using the call to the default
6365              constructor we just built above.  */
6366           eltinit = unshare_expr (init);
6367         }
6368       else
6369         {
6370           /* Copying an element.  */
6371           VEC(tree,gc) *argvec;
6372           gcc_assert (same_type_ignoring_top_level_qualifiers_p
6373                       (atype, TREE_TYPE (init)));
6374           eltinit = cp_build_array_ref (input_location, init, idx,
6375                                         tf_warning_or_error);
6376           if (!real_lvalue_p (init))
6377             eltinit = move (eltinit);
6378           argvec = make_tree_vector ();
6379           VEC_quick_push (tree, argvec, eltinit);
6380           eltinit = (build_special_member_call
6381                      (NULL_TREE, complete_ctor_identifier, &argvec,
6382                       elttype, LOOKUP_NORMAL, tf_warning_or_error));
6383           release_tree_vector (argvec);
6384           eltinit = cxx_eval_constant_expression
6385             (call, eltinit, allow_non_constant, addr, non_constant_p);
6386         }
6387       if (*non_constant_p && !allow_non_constant)
6388         goto fail;
6389       CONSTRUCTOR_APPEND_ELT (n, idx, eltinit);
6390     }
6391
6392   if (!*non_constant_p)
6393     {
6394       init = build_constructor (TREE_TYPE (atype), n);
6395       TREE_CONSTANT (init) = true;
6396       return init;
6397     }
6398
6399  fail:
6400   VEC_free (constructor_elt, gc, n);
6401   return init;
6402 }
6403
6404 static tree
6405 cxx_eval_vec_init (const constexpr_call *call, tree t,
6406                    bool allow_non_constant, bool addr,
6407                    bool *non_constant_p)
6408 {
6409   tree atype = TREE_TYPE (t);
6410   tree init = VEC_INIT_EXPR_INIT (t);
6411   tree r = cxx_eval_vec_init_1 (call, atype, init, allow_non_constant,
6412                                 addr, non_constant_p);
6413   if (*non_constant_p)
6414     return t;
6415   else
6416     return r;
6417 }
6418
6419 /* A less strict version of fold_indirect_ref_1, which requires cv-quals to
6420    match.  We want to be less strict for simple *& folding; if we have a
6421    non-const temporary that we access through a const pointer, that should
6422    work.  We handle this here rather than change fold_indirect_ref_1
6423    because we're dealing with things like ADDR_EXPR of INTEGER_CST which
6424    don't really make sense outside of constant expression evaluation.  Also
6425    we want to allow folding to COMPONENT_REF, which could cause trouble
6426    with TBAA in fold_indirect_ref_1.  */
6427
6428 static tree
6429 cxx_eval_indirect_ref (const constexpr_call *call, tree t,
6430                        bool allow_non_constant, bool addr,
6431                        bool *non_constant_p)
6432 {
6433   tree orig_op0 = TREE_OPERAND (t, 0);
6434   tree op0 = cxx_eval_constant_expression (call, orig_op0, allow_non_constant,
6435                                            /*addr*/false, non_constant_p);
6436   tree type, sub, subtype, r;
6437   bool empty_base;
6438
6439   /* Don't VERIFY_CONSTANT here.  */
6440   if (*non_constant_p)
6441     return t;
6442
6443   type = TREE_TYPE (t);
6444   sub = op0;
6445   r = NULL_TREE;
6446   empty_base = false;
6447
6448   STRIP_NOPS (sub);
6449   subtype = TREE_TYPE (sub);
6450   gcc_assert (POINTER_TYPE_P (subtype));
6451
6452   if (TREE_CODE (sub) == ADDR_EXPR)
6453     {
6454       tree op = TREE_OPERAND (sub, 0);
6455       tree optype = TREE_TYPE (op);
6456
6457       if (same_type_ignoring_top_level_qualifiers_p (optype, type))
6458         r = op;
6459       /* Also handle conversion to an empty base class, which
6460          is represented with a NOP_EXPR.  */
6461       else if (!addr && is_empty_class (type)
6462                && CLASS_TYPE_P (optype)
6463                && DERIVED_FROM_P (type, optype))
6464         {
6465           r = op;
6466           empty_base = true;
6467         }
6468       /* *(foo *)&struct_with_foo_field => COMPONENT_REF */
6469       else if (RECORD_OR_UNION_TYPE_P (optype))
6470         {
6471           tree field = TYPE_FIELDS (optype);
6472           for (; field; field = DECL_CHAIN (field))
6473             if (TREE_CODE (field) == FIELD_DECL
6474                 && integer_zerop (byte_position (field))
6475                 && (same_type_ignoring_top_level_qualifiers_p
6476                     (TREE_TYPE (field), type)))
6477               {
6478                 r = fold_build3 (COMPONENT_REF, type, op, field, NULL_TREE);
6479                 break;
6480               }
6481         }
6482     }
6483   else if (TREE_CODE (sub) == POINTER_PLUS_EXPR
6484            && TREE_CODE (TREE_OPERAND (sub, 1)) == INTEGER_CST)
6485     {
6486       tree op00 = TREE_OPERAND (sub, 0);
6487       tree op01 = TREE_OPERAND (sub, 1);
6488
6489       STRIP_NOPS (op00);
6490       if (TREE_CODE (op00) == ADDR_EXPR)
6491         {
6492           tree op00type;
6493           op00 = TREE_OPERAND (op00, 0);
6494           op00type = TREE_TYPE (op00);
6495
6496           /* ((foo *)&struct_with_foo_field)[1] => COMPONENT_REF */
6497           if (RECORD_OR_UNION_TYPE_P (op00type))
6498             {
6499               tree field = TYPE_FIELDS (op00type);
6500               for (; field; field = DECL_CHAIN (field))
6501                 if (TREE_CODE (field) == FIELD_DECL
6502                     && tree_int_cst_equal (byte_position (field), op01)
6503                     && (same_type_ignoring_top_level_qualifiers_p
6504                         (TREE_TYPE (field), type)))
6505                   {
6506                     r = fold_build3 (COMPONENT_REF, type, op00,
6507                                      field, NULL_TREE);
6508                     break;
6509                   }
6510             }
6511         }
6512     }
6513
6514   /* Let build_fold_indirect_ref handle the cases it does fine with.  */
6515   if (r == NULL_TREE)
6516     r = build_fold_indirect_ref (op0);
6517   if (TREE_CODE (r) != INDIRECT_REF)
6518     r = cxx_eval_constant_expression (call, r, allow_non_constant,
6519                                       addr, non_constant_p);
6520   else if (TREE_CODE (sub) == ADDR_EXPR
6521            || TREE_CODE (sub) == POINTER_PLUS_EXPR)
6522     {
6523       gcc_assert (!same_type_ignoring_top_level_qualifiers_p
6524                   (TREE_TYPE (TREE_TYPE (sub)), TREE_TYPE (t)));
6525       /* FIXME Mike Miller wants this to be OK.  */
6526       if (!allow_non_constant)
6527         error ("accessing value of %qE through a %qT glvalue in a "
6528                "constant expression", build_fold_indirect_ref (sub),
6529                TREE_TYPE (t));
6530       *non_constant_p = true;
6531       return t;
6532     }
6533
6534   /* If we're pulling out the value of an empty base, make sure
6535      that the whole object is constant and then return an empty
6536      CONSTRUCTOR.  */
6537   if (empty_base)
6538     {
6539       VERIFY_CONSTANT (r);
6540       r = build_constructor (TREE_TYPE (t), NULL);
6541       TREE_CONSTANT (r) = true;
6542     }
6543
6544   if (TREE_CODE (r) == INDIRECT_REF && TREE_OPERAND (r, 0) == orig_op0)
6545     return t;
6546   return r;
6547 }
6548
6549 /* Attempt to reduce the expression T to a constant value.
6550    On failure, issue diagnostic and return error_mark_node.  */
6551 /* FIXME unify with c_fully_fold */
6552
6553 static tree
6554 cxx_eval_constant_expression (const constexpr_call *call, tree t,
6555                               bool allow_non_constant, bool addr,
6556                               bool *non_constant_p)
6557 {
6558   tree r = t;
6559
6560   if (t == error_mark_node)
6561     {
6562       *non_constant_p = true;
6563       return t;
6564     }
6565   if (CONSTANT_CLASS_P (t))
6566     {
6567       if (TREE_CODE (t) == PTRMEM_CST)
6568         t = cplus_expand_constant (t);
6569       return t;
6570     }
6571   if (TREE_CODE (t) != NOP_EXPR
6572       && reduced_constant_expression_p (t))
6573     return fold (t);
6574
6575   switch (TREE_CODE (t))
6576     {
6577     case VAR_DECL:
6578       if (addr)
6579         return t;
6580       /* else fall through. */
6581     case CONST_DECL:
6582       r = integral_constant_value (t);
6583       if (TREE_CODE (r) == TARGET_EXPR
6584           && TREE_CODE (TARGET_EXPR_INITIAL (r)) == CONSTRUCTOR)
6585         r = TARGET_EXPR_INITIAL (r);
6586       if (DECL_P (r))
6587         {
6588           if (!allow_non_constant)
6589             {
6590               tree type = TREE_TYPE (r);
6591               error ("the value of %qD is not usable in a constant "
6592                      "expression", r);
6593               if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
6594                 {
6595                   if (!CP_TYPE_CONST_P (type))
6596                     inform (DECL_SOURCE_LOCATION (r),
6597                             "%q#D is not const", r);
6598                   else if (CP_TYPE_VOLATILE_P (type))
6599                     inform (DECL_SOURCE_LOCATION (r),
6600                             "%q#D is volatile", r);
6601                   else if (!DECL_INITIAL (r))
6602                     inform (DECL_SOURCE_LOCATION (r),
6603                             "%qD was not initialized with a constant "
6604                             "expression", r);
6605                   else
6606                     gcc_unreachable ();
6607                 }
6608               else
6609                 {
6610                   if (cxx_dialect >= cxx0x && !DECL_DECLARED_CONSTEXPR_P (r))
6611                     inform (DECL_SOURCE_LOCATION (r),
6612                             "%qD was not declared %<constexpr%>", r);
6613                   else
6614                     inform (DECL_SOURCE_LOCATION (r),
6615                             "%qD does not have integral or enumeration type",
6616                             r);
6617                 }
6618             }
6619           *non_constant_p = true;
6620         }
6621       break;
6622
6623     case FUNCTION_DECL:
6624     case LABEL_DECL:
6625       return t;
6626
6627     case PARM_DECL:
6628       if (call && DECL_CONTEXT (t) == call->fundef->decl)
6629         r = lookup_parameter_binding (call, t);
6630       else if (addr)
6631         /* Defer in case this is only used for its type.  */;
6632       else
6633         {
6634           if (!allow_non_constant)
6635             error ("%qE is not a constant expression", t);
6636           *non_constant_p = true;
6637         }
6638       break;
6639
6640     case CALL_EXPR:
6641     case AGGR_INIT_EXPR:
6642       r = cxx_eval_call_expression (call, t, allow_non_constant, addr,
6643                                     non_constant_p);
6644       break;
6645
6646     case TARGET_EXPR:
6647     case INIT_EXPR:
6648       /* Pass false for 'addr' because these codes indicate
6649          initialization of a temporary.  */
6650       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6651                                         allow_non_constant, false,
6652                                         non_constant_p);
6653       if (!*non_constant_p)
6654         /* Adjust the type of the result to the type of the temporary.  */
6655         r = adjust_temp_type (TREE_TYPE (t), r);
6656       break;
6657
6658     case SCOPE_REF:
6659       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6660                                         allow_non_constant, addr,
6661                                         non_constant_p);
6662       break;
6663
6664     case RETURN_EXPR:
6665     case NON_LVALUE_EXPR:
6666     case TRY_CATCH_EXPR:
6667     case CLEANUP_POINT_EXPR:
6668     case MUST_NOT_THROW_EXPR:
6669     case SAVE_EXPR:
6670       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6671                                         allow_non_constant, addr,
6672                                         non_constant_p);
6673       break;
6674
6675       /* These differ from cxx_eval_unary_expression in that this doesn't
6676          check for a constant operand or result; an address can be
6677          constant without its operand being, and vice versa.  */
6678     case INDIRECT_REF:
6679       r = cxx_eval_indirect_ref (call, t, allow_non_constant, addr,
6680                                  non_constant_p);
6681       break;
6682
6683     case ADDR_EXPR:
6684       {
6685         tree oldop = TREE_OPERAND (t, 0);
6686         tree op = cxx_eval_constant_expression (call, oldop,
6687                                                 allow_non_constant,
6688                                                 /*addr*/true,
6689                                                 non_constant_p);
6690         /* Don't VERIFY_CONSTANT here.  */
6691         if (*non_constant_p)
6692           return t;
6693         /* This function does more aggressive folding than fold itself.  */
6694         r = build_fold_addr_expr_with_type (op, TREE_TYPE (t));
6695         if (TREE_CODE (r) == ADDR_EXPR && TREE_OPERAND (r, 0) == oldop)
6696           return t;
6697         break;
6698       }
6699
6700     case REALPART_EXPR:
6701     case IMAGPART_EXPR:
6702     case CONJ_EXPR:
6703     case FIX_TRUNC_EXPR:
6704     case FLOAT_EXPR:
6705     case NEGATE_EXPR:
6706     case ABS_EXPR:
6707     case BIT_NOT_EXPR:
6708     case TRUTH_NOT_EXPR:
6709     case FIXED_CONVERT_EXPR:
6710       r = cxx_eval_unary_expression (call, t, allow_non_constant, addr,
6711                                      non_constant_p);
6712       break;
6713
6714     case COMPOUND_EXPR:
6715       {
6716         /* check_return_expr sometimes wraps a TARGET_EXPR in a
6717            COMPOUND_EXPR; don't get confused.  Also handle EMPTY_CLASS_EXPR
6718            introduced by build_call_a.  */
6719         tree op0 = TREE_OPERAND (t, 0);
6720         tree op1 = TREE_OPERAND (t, 1);
6721         STRIP_NOPS (op1);
6722         if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
6723             || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
6724           r = cxx_eval_constant_expression (call, op0, allow_non_constant,
6725                                             addr, non_constant_p);
6726         else
6727           goto binary;
6728       }
6729       break;
6730
6731     case POINTER_PLUS_EXPR:
6732     case PLUS_EXPR:
6733     case MINUS_EXPR:
6734     case MULT_EXPR:
6735     case TRUNC_DIV_EXPR:
6736     case CEIL_DIV_EXPR:
6737     case FLOOR_DIV_EXPR:
6738     case ROUND_DIV_EXPR:
6739     case TRUNC_MOD_EXPR:
6740     case CEIL_MOD_EXPR:
6741     case ROUND_MOD_EXPR:
6742     case RDIV_EXPR:
6743     case EXACT_DIV_EXPR:
6744     case MIN_EXPR:
6745     case MAX_EXPR:
6746     case LSHIFT_EXPR:
6747     case RSHIFT_EXPR:
6748     case LROTATE_EXPR:
6749     case RROTATE_EXPR:
6750     case BIT_IOR_EXPR:
6751     case BIT_XOR_EXPR:
6752     case BIT_AND_EXPR:
6753     case TRUTH_XOR_EXPR:
6754     case LT_EXPR:
6755     case LE_EXPR:
6756     case GT_EXPR:
6757     case GE_EXPR:
6758     case EQ_EXPR:
6759     case NE_EXPR:
6760     case UNORDERED_EXPR:
6761     case ORDERED_EXPR:
6762     case UNLT_EXPR:
6763     case UNLE_EXPR:
6764     case UNGT_EXPR:
6765     case UNGE_EXPR:
6766     case UNEQ_EXPR:
6767     case RANGE_EXPR:
6768     case COMPLEX_EXPR:
6769     binary:
6770       r = cxx_eval_binary_expression (call, t, allow_non_constant, addr,
6771                                       non_constant_p);
6772       break;
6773
6774       /* fold can introduce non-IF versions of these; still treat them as
6775          short-circuiting.  */
6776     case TRUTH_AND_EXPR:
6777     case TRUTH_ANDIF_EXPR:
6778       r = cxx_eval_logical_expression (call, t, boolean_false_node,
6779                                        boolean_true_node,
6780                                        allow_non_constant, addr,
6781                                        non_constant_p);
6782       break;
6783
6784     case TRUTH_OR_EXPR:
6785     case TRUTH_ORIF_EXPR:
6786       r = cxx_eval_logical_expression (call, t, boolean_true_node,
6787                                        boolean_false_node,
6788                                        allow_non_constant, addr,
6789                                        non_constant_p);
6790       break;
6791
6792     case ARRAY_REF:
6793       r = cxx_eval_array_reference (call, t, allow_non_constant, addr,
6794                                     non_constant_p);
6795       break;
6796
6797     case COMPONENT_REF:
6798       r = cxx_eval_component_reference (call, t, allow_non_constant, addr,
6799                                         non_constant_p);
6800       break;
6801
6802     case COND_EXPR:
6803     case VEC_COND_EXPR:
6804       r = cxx_eval_conditional_expression (call, t, allow_non_constant, addr,
6805                                            non_constant_p);
6806       break;
6807
6808     case CONSTRUCTOR:
6809       r = cxx_eval_bare_aggregate (call, t, allow_non_constant, addr,
6810                                    non_constant_p);
6811       break;
6812
6813     case VEC_INIT_EXPR:
6814       /* We can get this in a defaulted constructor for a class with a
6815          non-static data member of array type.  Either the initializer will
6816          be NULL, meaning default-initialization, or it will be an lvalue
6817          or xvalue of the same type, meaning direct-initialization from the
6818          corresponding member.  */
6819       r = cxx_eval_vec_init (call, t, allow_non_constant, addr,
6820                              non_constant_p);
6821       break;
6822
6823     case CONVERT_EXPR:
6824     case VIEW_CONVERT_EXPR:
6825     case NOP_EXPR:
6826       {
6827         tree oldop = TREE_OPERAND (t, 0);
6828         tree op = oldop;
6829         tree to = TREE_TYPE (t);
6830         tree source = TREE_TYPE (op);
6831         if (TYPE_PTR_P (source) && ARITHMETIC_TYPE_P (to)
6832             && !(TREE_CODE (op) == COMPONENT_REF
6833                  && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (op, 0)))))
6834           {
6835             if (!allow_non_constant)
6836               error ("conversion of expression %qE of pointer type "
6837                      "cannot yield a constant expression", op);
6838             *non_constant_p = true;
6839             return t;
6840           }
6841         op = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6842                                            allow_non_constant, addr,
6843                                            non_constant_p);
6844         if (*non_constant_p)
6845           return t;
6846         if (op == oldop)
6847           /* We didn't fold at the top so we could check for ptr-int
6848              conversion.  */
6849           return fold (t);
6850         r = fold_build1 (TREE_CODE (t), to, op);
6851       }
6852       break;
6853
6854     case EMPTY_CLASS_EXPR:
6855       /* This is good enough for a function argument that might not get
6856          used, and they can't do anything with it, so just return it.  */
6857       return t;
6858
6859     case LAMBDA_EXPR:
6860     case DYNAMIC_CAST_EXPR:
6861     case PSEUDO_DTOR_EXPR:
6862     case PREINCREMENT_EXPR:
6863     case POSTINCREMENT_EXPR:
6864     case PREDECREMENT_EXPR:
6865     case POSTDECREMENT_EXPR:
6866     case NEW_EXPR:
6867     case VEC_NEW_EXPR:
6868     case DELETE_EXPR:
6869     case VEC_DELETE_EXPR:
6870     case THROW_EXPR:
6871     case MODIFY_EXPR:
6872     case MODOP_EXPR:
6873       /* GCC internal stuff.  */
6874     case VA_ARG_EXPR:
6875     case OBJ_TYPE_REF:
6876     case WITH_CLEANUP_EXPR:
6877     case STATEMENT_LIST:
6878     case BIND_EXPR:
6879     case NON_DEPENDENT_EXPR:
6880     case BASELINK:
6881     case EXPR_STMT:
6882       if (!allow_non_constant)
6883         error_at (EXPR_LOC_OR_HERE (t),
6884                   "expression %qE is not a constant-expression", t);
6885       *non_constant_p = true;
6886       break;
6887
6888     default:
6889       internal_error ("unexpected expression %qE of kind %s", t,
6890                       tree_code_name[TREE_CODE (t)]);
6891       *non_constant_p = true;
6892       break;
6893     }
6894
6895   if (r == error_mark_node)
6896     *non_constant_p = true;
6897
6898   if (*non_constant_p)
6899     return t;
6900   else
6901     return r;
6902 }
6903
6904 static tree
6905 cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant)
6906 {
6907   bool non_constant_p = false;
6908   tree r = cxx_eval_constant_expression (NULL, t, allow_non_constant,
6909                                          false, &non_constant_p);
6910
6911   verify_constant (r, allow_non_constant, &non_constant_p);
6912
6913   if (non_constant_p && !allow_non_constant)
6914     return error_mark_node;
6915   else if (non_constant_p && TREE_CONSTANT (t))
6916     {
6917       /* This isn't actually constant, so unset TREE_CONSTANT.  */
6918       if (EXPR_P (t) || TREE_CODE (t) == CONSTRUCTOR)
6919         r = copy_node (t);
6920       else
6921         r = build_nop (TREE_TYPE (t), t);
6922       TREE_CONSTANT (r) = false;
6923       return r;
6924     }
6925   else if (non_constant_p || r == t)
6926     return t;
6927   else if (TREE_CODE (r) == CONSTRUCTOR && CLASS_TYPE_P (TREE_TYPE (r)))
6928     {
6929       if (TREE_CODE (t) == TARGET_EXPR
6930           && TARGET_EXPR_INITIAL (t) == r)
6931         return t;
6932       else
6933         {
6934           r = get_target_expr (r);
6935           TREE_CONSTANT (r) = true;
6936           return r;
6937         }
6938     }
6939   else
6940     return r;
6941 }
6942
6943 /* Returns true if T is a valid subexpression of a constant expression,
6944    even if it isn't itself a constant expression.  */
6945
6946 bool
6947 is_sub_constant_expr (tree t)
6948 {
6949   bool non_constant_p = false;
6950   cxx_eval_constant_expression (NULL, t, true, false, &non_constant_p);
6951   return !non_constant_p;
6952 }
6953
6954 /* If T represents a constant expression returns its reduced value.
6955    Otherwise return error_mark_node.  If T is dependent, then
6956    return NULL.  */
6957
6958 tree
6959 cxx_constant_value (tree t)
6960 {
6961   return cxx_eval_outermost_constant_expr (t, false);
6962 }
6963
6964 /* If T is a constant expression, returns its reduced value.
6965    Otherwise, if T does not have TREE_CONSTANT set, returns T.
6966    Otherwise, returns a version of T without TREE_CONSTANT.  */
6967
6968 tree
6969 maybe_constant_value (tree t)
6970 {
6971   tree r;
6972
6973   if (type_dependent_expression_p (t)
6974       /* FIXME shouldn't check value-dependence first; see comment before
6975          value_dependent_expression_p.  */
6976       || value_dependent_expression_p (t))
6977     return t;
6978
6979   r = cxx_eval_outermost_constant_expr (t, true);
6980 #ifdef ENABLE_CHECKING
6981   /* cp_tree_equal looks through NOPs, so allow them.  */
6982   gcc_assert (r == t
6983               || CONVERT_EXPR_P (t)
6984               || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
6985               || !cp_tree_equal (r, t));
6986 #endif
6987   return r;
6988 }
6989
6990 /* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
6991    than wrapped in a TARGET_EXPR.  */
6992
6993 tree
6994 maybe_constant_init (tree t)
6995 {
6996   t = maybe_constant_value (t);
6997   if (TREE_CODE (t) == TARGET_EXPR)
6998     {
6999       tree init = TARGET_EXPR_INITIAL (t);
7000       if (TREE_CODE (init) == CONSTRUCTOR
7001           && TREE_CONSTANT (init))
7002         t = init;
7003     }
7004   return t;
7005 }
7006
7007 /* Return true if the object referred to by REF has automatic or thread
7008    local storage.  */
7009
7010 enum { ck_ok, ck_bad, ck_unknown };
7011 static int
7012 check_automatic_or_tls (tree ref)
7013 {
7014   enum machine_mode mode;
7015   HOST_WIDE_INT bitsize, bitpos;
7016   tree offset;
7017   int volatilep = 0, unsignedp = 0;
7018   tree decl = get_inner_reference (ref, &bitsize, &bitpos, &offset,
7019                                    &mode, &unsignedp, &volatilep, false);
7020   duration_kind dk;
7021
7022   /* If there isn't a decl in the middle, we don't know the linkage here,
7023      and this isn't a constant expression anyway.  */
7024   if (!DECL_P (decl))
7025     return ck_unknown;
7026   dk = decl_storage_duration (decl);
7027   return (dk == dk_auto || dk == dk_thread) ? ck_bad : ck_ok;
7028 }
7029
7030 /* Return true if the DECL designates a builtin function that is
7031    morally constexpr, in the sense that its parameter types and
7032    return type are literal types and the compiler is allowed to
7033    fold its invocations.  */
7034
7035 static bool
7036 morally_constexpr_builtin_function_p (tree decl)
7037 {
7038   tree funtype = TREE_TYPE (decl);
7039   tree t;
7040
7041   if (!is_builtin_fn (decl))
7042     return false;
7043   if (!literal_type_p (TREE_TYPE (funtype)))
7044     return false;
7045   for (t = TYPE_ARG_TYPES (funtype); t != NULL ; t = TREE_CHAIN (t))
7046     {
7047       if (t == void_list_node)
7048         return true;
7049       if (!literal_type_p (TREE_VALUE (t)))
7050         return false;
7051     }
7052   /* We assume no varargs builtins are suitable.  */
7053   return t != NULL;
7054 }
7055
7056 /* Return true if T denotes a constant expression, or potential constant
7057    expression if POTENTIAL is true.
7058    Issue diagnostic as appropriate under control of flags.  Variables
7059    with static storage duration initialized by constant expressions
7060    are guaranteed to be statically initialized.
7061
7062    C++0x [expr.const]
7063
7064    6 An expression is a potential constant expression if it is
7065      a constant expression where all occurences of function
7066      parameters are replaced by arbitrary constant expressions
7067      of the appropriate type.
7068
7069    2  A conditional expression is a constant expression unless it
7070       involves one of the following as a potentially evaluated
7071       subexpression (3.2), but subexpressions of logical AND (5.14),
7072       logical OR (5.15), and conditional (5.16) operations that are
7073       not evaluated are not considered.   */
7074
7075 bool
7076 potential_constant_expression (tree t, tsubst_flags_t flags)
7077 {
7078   int i;
7079   tree tmp;
7080   if (t == error_mark_node)
7081     return false;
7082   if (TREE_THIS_VOLATILE (t))
7083     {
7084       if (flags & tf_error)
7085         error ("expression %qE has side-effects", t);
7086       return false;
7087     }
7088   if (CONSTANT_CLASS_P (t))
7089     return true;
7090
7091   switch (TREE_CODE (t))
7092     {
7093     case FUNCTION_DECL:
7094     case LABEL_DECL:
7095     case CONST_DECL:
7096       return true;
7097
7098     case PARM_DECL:
7099       /* -- this (5.1) unless it appears as the postfix-expression in a
7100             class member access expression, including the result of the
7101             implicit transformation in the body of the non-static
7102             member function (9.3.1);  */
7103       if (is_this_parameter (t))
7104         {
7105           if (flags & tf_error)
7106             error ("%qE is not a potential constant expression", t);
7107           return false;
7108         }
7109       return true;
7110
7111     case AGGR_INIT_EXPR:
7112     case CALL_EXPR:
7113       /* -- an invocation of a function other than a constexpr function
7114             or a constexpr constructor.  */
7115       {
7116         tree fun = get_function_named_in_call (t);
7117         const int nargs = call_expr_nargs (t);
7118         if (TREE_CODE (fun) != FUNCTION_DECL)
7119           {
7120             if (potential_constant_expression (fun, flags))
7121               /* Might end up being a constant function pointer.  */
7122               return true;
7123             if (flags & tf_error)
7124               error ("%qE is not a function name", fun);
7125             return false;
7126           }
7127         /* Skip initial arguments to base constructors.  */
7128         if (DECL_BASE_CONSTRUCTOR_P (fun))
7129           i = num_artificial_parms_for (fun);
7130         else
7131           i = 0;
7132         fun = DECL_ORIGIN (fun);
7133         if (builtin_valid_in_constant_expr_p (fun))
7134           return true;
7135         if (!DECL_DECLARED_CONSTEXPR_P (fun)
7136             && !morally_constexpr_builtin_function_p (fun))
7137           {
7138             if (flags & tf_error)
7139               error ("%qD is not %<constexpr%>", fun);
7140             return false;
7141           }
7142         for (; i < nargs; ++i)
7143           {
7144             tree x = get_nth_callarg (t, i);
7145             /* A call to a non-static member function takes the
7146                address of the object as the first argument.
7147                But in a constant expression the address will be folded
7148                away, so look through it now.  */
7149             if (i == 0 && DECL_NONSTATIC_MEMBER_P (fun)
7150                 && !DECL_CONSTRUCTOR_P (fun))
7151               {
7152                 if (TREE_CODE (x) == ADDR_EXPR)
7153                   x = TREE_OPERAND (x, 0);
7154                 if (is_this_parameter (x))
7155                   /* OK.  */;
7156                 else if (!potential_constant_expression (x, flags))
7157                   {
7158                     if (flags & tf_error)
7159                       error ("object argument is not a potential constant "
7160                              "expression");
7161                     return false;
7162                   }
7163               }
7164             else if (!potential_constant_expression (x, flags))
7165               {
7166                 if (flags & tf_error)
7167                   error ("argument in position %qP is not a "
7168                          "potential constant expression", i);
7169                 return false;
7170               }
7171           }
7172         return true;
7173       }
7174
7175     case NON_LVALUE_EXPR:
7176       /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
7177             -- an lvalue of integral type that refers to a non-volatile
7178                const variable or static data member initialized with
7179                constant expressions, or
7180
7181             -- an lvalue of literal type that refers to non-volatile
7182                object defined with constexpr, or that refers to a
7183                sub-object of such an object;  */
7184       return potential_constant_expression (TREE_OPERAND (t, 0), flags);
7185
7186     case VAR_DECL:
7187       if (!decl_constant_var_p (t))
7188         {
7189           if (flags & tf_error)
7190             error ("variable %qD is not declared constexpr", t);
7191           return false;
7192         }
7193       return true;
7194
7195     case NOP_EXPR:
7196     case CONVERT_EXPR:
7197     case VIEW_CONVERT_EXPR:
7198       /* -- an array-to-pointer conversion that is applied to an lvalue
7199             that designates an object with thread or automatic storage
7200             duration;  FIXME not implemented as it breaks constexpr arrays;
7201             need to fix the standard
7202          -- a type conversion from a pointer or pointer-to-member type
7203             to a literal type.  */
7204       {
7205         tree from = TREE_OPERAND (t, 0);
7206         tree source = TREE_TYPE (from);
7207         tree target = TREE_TYPE (t);
7208         if (TYPE_PTR_P (source) && ARITHMETIC_TYPE_P (target)
7209             && !(TREE_CODE (from) == COMPONENT_REF
7210                  && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (from, 0)))))
7211           {
7212             if (flags & tf_error)
7213               error ("conversion of expression %qE of pointer type "
7214                      "cannot yield a constant expression", from);
7215             return false;
7216           }
7217         return potential_constant_expression (from, flags);
7218       }
7219
7220     case ADDR_EXPR:
7221       /* -- a unary operator & that is applied to an lvalue that
7222             designates an object with thread or automatic storage
7223             duration;  */
7224       t = TREE_OPERAND (t, 0);
7225       i = check_automatic_or_tls (t);
7226       if (i == ck_ok)
7227         return true;
7228       if (i == ck_bad)
7229         {
7230           if (flags & tf_error)
7231             error ("address-of an object %qE with thread local or "
7232                    "automatic storage is not a constant expression", t);
7233           return false;
7234         }
7235       return potential_constant_expression (t, flags);
7236
7237     case COMPONENT_REF:
7238     case BIT_FIELD_REF:
7239       /* -- a class member access unless its postfix-expression is
7240             of literal type or of pointer to literal type.  */
7241       /* This test would be redundant, as it follows from the
7242          postfix-expression being a potential constant expression.  */
7243       return potential_constant_expression (TREE_OPERAND (t, 0), flags);
7244
7245     case INDIRECT_REF:
7246       {
7247         tree x = TREE_OPERAND (t, 0);
7248         STRIP_NOPS (x);
7249         if (is_this_parameter (x))
7250           return true;
7251         return potential_constant_expression (x, flags);
7252       }
7253
7254     case LAMBDA_EXPR:
7255     case DYNAMIC_CAST_EXPR:
7256     case PSEUDO_DTOR_EXPR:
7257     case PREINCREMENT_EXPR:
7258     case POSTINCREMENT_EXPR:
7259     case PREDECREMENT_EXPR:
7260     case POSTDECREMENT_EXPR:
7261     case NEW_EXPR:
7262     case VEC_NEW_EXPR:
7263     case DELETE_EXPR:
7264     case VEC_DELETE_EXPR:
7265     case THROW_EXPR:
7266     case MODIFY_EXPR:
7267     case MODOP_EXPR:
7268       /* GCC internal stuff.  */
7269     case VA_ARG_EXPR:
7270     case OBJ_TYPE_REF:
7271     case WITH_CLEANUP_EXPR:
7272     case CLEANUP_POINT_EXPR:
7273     case MUST_NOT_THROW_EXPR:
7274     case TRY_CATCH_EXPR:
7275     case STATEMENT_LIST:
7276     case BIND_EXPR:
7277       if (flags & tf_error)
7278         error ("expression %qE is not a constant-expression", t);
7279       return false;
7280
7281     case TYPEID_EXPR:
7282       /* -- a typeid expression whose operand is of polymorphic
7283             class type;  */
7284       {
7285         tree e = TREE_OPERAND (t, 0);
7286         if (!TYPE_P (e) && TYPE_POLYMORPHIC_P (TREE_TYPE (e)))
7287           {
7288             if (flags & tf_error)
7289               error ("typeid-expression is not a constant expression "
7290                      "because %qE is of polymorphic type", e);
7291             return false;
7292           }
7293         return true;
7294       }
7295
7296     case MINUS_EXPR:
7297       /* -- a subtraction where both operands are pointers.   */
7298       if (TYPE_PTR_P (TREE_OPERAND (t, 0))
7299           && TYPE_PTR_P (TREE_OPERAND (t, 1)))
7300         {
7301           if (flags & tf_error)
7302             error ("difference of two pointer expressions is not "
7303                    "a constant expression");
7304           return false;
7305         }
7306       goto binary;
7307
7308     case LT_EXPR:
7309     case LE_EXPR:
7310     case GT_EXPR:
7311     case GE_EXPR:
7312     case EQ_EXPR:
7313     case NE_EXPR:
7314       /* -- a relational or equality operator where at least
7315             one of the operands is a pointer.  */
7316       if (TYPE_PTR_P (TREE_OPERAND (t, 0))
7317           || TYPE_PTR_P (TREE_OPERAND (t, 1)))
7318         {
7319           if (flags & tf_error)
7320             error ("pointer comparison expression is not a "
7321                    "constant expression");
7322           return false;
7323         }
7324       goto binary;
7325
7326     case REALPART_EXPR:
7327     case IMAGPART_EXPR:
7328     case CONJ_EXPR:
7329     case SAVE_EXPR:
7330     case FIX_TRUNC_EXPR:
7331     case FLOAT_EXPR:
7332     case NEGATE_EXPR:
7333     case ABS_EXPR:
7334     case BIT_NOT_EXPR:
7335     case TRUTH_NOT_EXPR:
7336     case PAREN_EXPR:
7337     case FIXED_CONVERT_EXPR:
7338       /* For convenience.  */
7339     case RETURN_EXPR:
7340       return potential_constant_expression (TREE_OPERAND (t, 0), flags);
7341
7342     case INIT_EXPR:
7343     case TARGET_EXPR:
7344       return potential_constant_expression (TREE_OPERAND (t, 1), flags);
7345
7346     case CONSTRUCTOR:
7347       {
7348         VEC(constructor_elt, gc) *v = CONSTRUCTOR_ELTS (t);
7349         constructor_elt *ce;
7350         for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
7351           if (!potential_constant_expression (ce->value, flags))
7352             return false;
7353         return true;
7354       }
7355
7356     case TREE_LIST:
7357       {
7358         gcc_assert (TREE_PURPOSE (t) == NULL_TREE
7359                     || DECL_P (TREE_PURPOSE (t)));
7360         if (!potential_constant_expression (TREE_VALUE (t), flags))
7361           return false;
7362         if (TREE_CHAIN (t) == NULL_TREE)
7363           return true;
7364         return potential_constant_expression (TREE_CHAIN (t), flags);
7365       }
7366
7367     case TRUNC_DIV_EXPR:
7368     case CEIL_DIV_EXPR:
7369     case FLOOR_DIV_EXPR:
7370     case ROUND_DIV_EXPR:
7371     case TRUNC_MOD_EXPR:
7372     case CEIL_MOD_EXPR:
7373     case ROUND_MOD_EXPR:
7374       if (integer_zerop (maybe_constant_value (TREE_OPERAND (t, 1))))
7375         return false;
7376       else
7377         goto binary;
7378
7379     case COMPOUND_EXPR:
7380       {
7381         /* check_return_expr sometimes wraps a TARGET_EXPR in a
7382            COMPOUND_EXPR; don't get confused.  Also handle EMPTY_CLASS_EXPR
7383            introduced by build_call_a.  */
7384         tree op0 = TREE_OPERAND (t, 0);
7385         tree op1 = TREE_OPERAND (t, 1);
7386         STRIP_NOPS (op1);
7387         if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
7388             || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
7389           return potential_constant_expression (op0, flags);
7390         else
7391           goto binary;
7392       }
7393
7394       /* If the first operand is the non-short-circuit constant, look at
7395          the second operand; otherwise we only care about the first one for
7396          potentiality.  */
7397     case TRUTH_AND_EXPR:
7398     case TRUTH_ANDIF_EXPR:
7399       tmp = boolean_true_node;
7400       goto truth;
7401     case TRUTH_OR_EXPR:
7402     case TRUTH_ORIF_EXPR:
7403       tmp = boolean_false_node;
7404     truth:
7405       if (TREE_OPERAND (t, 0) == tmp)
7406         return potential_constant_expression (TREE_OPERAND (t, 1), flags);
7407       else
7408         return potential_constant_expression (TREE_OPERAND (t, 0), flags);
7409
7410     case ARRAY_REF:
7411     case ARRAY_RANGE_REF:
7412     case PLUS_EXPR:
7413     case MULT_EXPR:
7414     case POINTER_PLUS_EXPR:
7415     case RDIV_EXPR:
7416     case EXACT_DIV_EXPR:
7417     case MIN_EXPR:
7418     case MAX_EXPR:
7419     case LSHIFT_EXPR:
7420     case RSHIFT_EXPR:
7421     case LROTATE_EXPR:
7422     case RROTATE_EXPR:
7423     case BIT_IOR_EXPR:
7424     case BIT_XOR_EXPR:
7425     case BIT_AND_EXPR:
7426     case UNLT_EXPR:
7427     case UNLE_EXPR:
7428     case UNGT_EXPR:
7429     case UNGE_EXPR:
7430     case UNEQ_EXPR:
7431     case RANGE_EXPR:
7432     case COMPLEX_EXPR:
7433     binary:
7434       for (i = 0; i < 2; ++i)
7435         if (!potential_constant_expression (TREE_OPERAND (t, i),
7436                                       flags))
7437           return false;
7438       return true;
7439
7440     case COND_EXPR:
7441     case VEC_COND_EXPR:
7442       /* If the condition is a known constant, we know which of the legs we
7443          care about; otherwise we only require that the condition and
7444          either of the legs be potentially constant.  */
7445       tmp = TREE_OPERAND (t, 0);
7446       if (!potential_constant_expression (tmp, flags))
7447         return false;
7448       else if (tmp == boolean_true_node)
7449         return potential_constant_expression (TREE_OPERAND (t, 1), flags);
7450       else if (tmp == boolean_false_node)
7451         return potential_constant_expression (TREE_OPERAND (t, 2), flags);
7452       for (i = 1; i < 3; ++i)
7453         if (potential_constant_expression (TREE_OPERAND (t, i), tf_none))
7454           return true;
7455       if (flags & tf_error)
7456         error ("expression %qE is not a constant-expression", t);
7457       return false;
7458
7459     case VEC_INIT_EXPR:
7460       return VEC_INIT_EXPR_IS_CONSTEXPR (t);
7461
7462     default:
7463       sorry ("unexpected ast of kind %s", tree_code_name[TREE_CODE (t)]);
7464       gcc_unreachable();
7465       return false;
7466     }
7467 }
7468
7469 \f
7470 /* Constructor for a lambda expression.  */
7471
7472 tree
7473 build_lambda_expr (void)
7474 {
7475   tree lambda = make_node (LAMBDA_EXPR);
7476   LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) = CPLD_NONE;
7477   LAMBDA_EXPR_CAPTURE_LIST         (lambda) = NULL_TREE;
7478   LAMBDA_EXPR_THIS_CAPTURE         (lambda) = NULL_TREE;
7479   LAMBDA_EXPR_RETURN_TYPE          (lambda) = NULL_TREE;
7480   LAMBDA_EXPR_MUTABLE_P            (lambda) = false;
7481   return lambda;
7482 }
7483
7484 /* Create the closure object for a LAMBDA_EXPR.  */
7485
7486 tree
7487 build_lambda_object (tree lambda_expr)
7488 {
7489   /* Build aggregate constructor call.
7490      - cp_parser_braced_list
7491      - cp_parser_functional_cast  */
7492   VEC(constructor_elt,gc) *elts = NULL;
7493   tree node, expr, type;
7494   location_t saved_loc;
7495
7496   if (processing_template_decl)
7497     return lambda_expr;
7498
7499   /* Make sure any error messages refer to the lambda-introducer.  */
7500   saved_loc = input_location;
7501   input_location = LAMBDA_EXPR_LOCATION (lambda_expr);
7502
7503   for (node = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
7504        node;
7505        node = TREE_CHAIN (node))
7506     {
7507       tree field = TREE_PURPOSE (node);
7508       tree val = TREE_VALUE (node);
7509
7510       if (DECL_P (val))
7511         mark_used (val);
7512
7513       /* Mere mortals can't copy arrays with aggregate initialization, so
7514          do some magic to make it work here.  */
7515       if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
7516         val = build_array_copy (val);
7517       else if (DECL_NORMAL_CAPTURE_P (field)
7518                && TREE_CODE (TREE_TYPE (field)) != REFERENCE_TYPE)
7519         {
7520           /* "the entities that are captured by copy are used to
7521              direct-initialize each corresponding non-static data
7522              member of the resulting closure object."
7523
7524              There's normally no way to express direct-initialization
7525              from an element of a CONSTRUCTOR, so we build up a special
7526              TARGET_EXPR to bypass the usual copy-initialization.  */
7527           val = force_rvalue (val);
7528           if (TREE_CODE (val) == TARGET_EXPR)
7529             TARGET_EXPR_DIRECT_INIT_P (val) = true;
7530         }
7531
7532       CONSTRUCTOR_APPEND_ELT (elts, DECL_NAME (field), val);
7533     }
7534
7535   expr = build_constructor (init_list_type_node, elts);
7536   CONSTRUCTOR_IS_DIRECT_INIT (expr) = 1;
7537
7538   /* N2927: "[The closure] class type is not an aggregate."
7539      But we briefly treat it as an aggregate to make this simpler.  */
7540   type = TREE_TYPE (lambda_expr);
7541   CLASSTYPE_NON_AGGREGATE (type) = 0;
7542   expr = finish_compound_literal (type, expr);
7543   CLASSTYPE_NON_AGGREGATE (type) = 1;
7544
7545   input_location = saved_loc;
7546   return expr;
7547 }
7548
7549 /* Return an initialized RECORD_TYPE for LAMBDA.
7550    LAMBDA must have its explicit captures already.  */
7551
7552 tree
7553 begin_lambda_type (tree lambda)
7554 {
7555   tree type;
7556
7557   {
7558     /* Unique name.  This is just like an unnamed class, but we cannot use
7559        make_anon_name because of certain checks against TYPE_ANONYMOUS_P.  */
7560     tree name;
7561     name = make_lambda_name ();
7562
7563     /* Create the new RECORD_TYPE for this lambda.  */
7564     type = xref_tag (/*tag_code=*/record_type,
7565                      name,
7566                      /*scope=*/ts_within_enclosing_non_class,
7567                      /*template_header_p=*/false);
7568   }
7569
7570   /* Designate it as a struct so that we can use aggregate initialization.  */
7571   CLASSTYPE_DECLARED_CLASS (type) = false;
7572
7573   /* Clear base types.  */
7574   xref_basetypes (type, /*bases=*/NULL_TREE);
7575
7576   /* Start the class.  */
7577   type = begin_class_definition (type, /*attributes=*/NULL_TREE);
7578
7579   /* Cross-reference the expression and the type.  */
7580   TREE_TYPE (lambda) = type;
7581   CLASSTYPE_LAMBDA_EXPR (type) = lambda;
7582
7583   return type;
7584 }
7585
7586 /* Returns the type to use for the return type of the operator() of a
7587    closure class.  */
7588
7589 tree
7590 lambda_return_type (tree expr)
7591 {
7592   tree type;
7593   if (BRACE_ENCLOSED_INITIALIZER_P (expr))
7594     {
7595       warning (0, "cannot deduce lambda return type from a braced-init-list");
7596       return void_type_node;
7597     }
7598   if (type_dependent_expression_p (expr))
7599     {
7600       type = cxx_make_type (DECLTYPE_TYPE);
7601       DECLTYPE_TYPE_EXPR (type) = expr;
7602       DECLTYPE_FOR_LAMBDA_RETURN (type) = true;
7603       SET_TYPE_STRUCTURAL_EQUALITY (type);
7604     }
7605   else
7606     type = type_decays_to (unlowered_expr_type (expr));
7607   return type;
7608 }
7609
7610 /* Given a LAMBDA_EXPR or closure type LAMBDA, return the op() of the
7611    closure type.  */
7612
7613 tree
7614 lambda_function (tree lambda)
7615 {
7616   tree type;
7617   if (TREE_CODE (lambda) == LAMBDA_EXPR)
7618     type = TREE_TYPE (lambda);
7619   else
7620     type = lambda;
7621   gcc_assert (LAMBDA_TYPE_P (type));
7622   /* Don't let debug_tree cause instantiation.  */
7623   if (CLASSTYPE_TEMPLATE_INSTANTIATION (type) && !COMPLETE_TYPE_P (type))
7624     return NULL_TREE;
7625   lambda = lookup_member (type, ansi_opname (CALL_EXPR),
7626                           /*protect=*/0, /*want_type=*/false);
7627   if (lambda)
7628     lambda = BASELINK_FUNCTIONS (lambda);
7629   return lambda;
7630 }
7631
7632 /* Returns the type to use for the FIELD_DECL corresponding to the
7633    capture of EXPR.
7634    The caller should add REFERENCE_TYPE for capture by reference.  */
7635
7636 tree
7637 lambda_capture_field_type (tree expr)
7638 {
7639   tree type;
7640   if (type_dependent_expression_p (expr))
7641     {
7642       type = cxx_make_type (DECLTYPE_TYPE);
7643       DECLTYPE_TYPE_EXPR (type) = expr;
7644       DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true;
7645       SET_TYPE_STRUCTURAL_EQUALITY (type);
7646     }
7647   else
7648     type = non_reference (unlowered_expr_type (expr));
7649   return type;
7650 }
7651
7652 /* Recompute the return type for LAMBDA with body of the form:
7653      { return EXPR ; }  */
7654
7655 void
7656 apply_lambda_return_type (tree lambda, tree return_type)
7657 {
7658   tree fco = lambda_function (lambda);
7659   tree result;
7660
7661   LAMBDA_EXPR_RETURN_TYPE (lambda) = return_type;
7662
7663   /* If we got a DECLTYPE_TYPE, don't stick it in the function yet,
7664      it would interfere with instantiating the closure type.  */
7665   if (dependent_type_p (return_type))
7666     return;
7667   if (return_type == error_mark_node)
7668     return;
7669
7670   /* TREE_TYPE (FUNCTION_DECL) == METHOD_TYPE
7671      TREE_TYPE (METHOD_TYPE)   == return-type  */
7672   TREE_TYPE (fco) = change_return_type (return_type, TREE_TYPE (fco));
7673
7674   result = DECL_RESULT (fco);
7675   if (result == NULL_TREE)
7676     return;
7677
7678   /* We already have a DECL_RESULT from start_preparsed_function.
7679      Now we need to redo the work it and allocate_struct_function
7680      did to reflect the new type.  */
7681   result = build_decl (input_location, RESULT_DECL, NULL_TREE,
7682                        TYPE_MAIN_VARIANT (return_type));
7683   DECL_ARTIFICIAL (result) = 1;
7684   DECL_IGNORED_P (result) = 1;
7685   cp_apply_type_quals_to_decl (cp_type_quals (return_type),
7686                                result);
7687
7688   DECL_RESULT (fco) = result;
7689
7690   if (!processing_template_decl && aggregate_value_p (result, fco))
7691     {
7692 #ifdef PCC_STATIC_STRUCT_RETURN
7693       cfun->returns_pcc_struct = 1;
7694 #endif
7695       cfun->returns_struct = 1;
7696     }
7697
7698 }
7699
7700 /* DECL is a local variable or parameter from the surrounding scope of a
7701    lambda-expression.  Returns the decltype for a use of the capture field
7702    for DECL even if it hasn't been captured yet.  */
7703
7704 static tree
7705 capture_decltype (tree decl)
7706 {
7707   tree lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
7708   /* FIXME do lookup instead of list walk? */
7709   tree cap = value_member (decl, LAMBDA_EXPR_CAPTURE_LIST (lam));
7710   tree type;
7711
7712   if (cap)
7713     type = TREE_TYPE (TREE_PURPOSE (cap));
7714   else
7715     switch (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam))
7716       {
7717       case CPLD_NONE:
7718         error ("%qD is not captured", decl);
7719         return error_mark_node;
7720
7721       case CPLD_COPY:
7722         type = TREE_TYPE (decl);
7723         if (TREE_CODE (type) == REFERENCE_TYPE
7724             && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
7725           type = TREE_TYPE (type);
7726         break;
7727
7728       case CPLD_REFERENCE:
7729         type = TREE_TYPE (decl);
7730         if (TREE_CODE (type) != REFERENCE_TYPE)
7731           type = build_reference_type (TREE_TYPE (decl));
7732         break;
7733
7734       default:
7735         gcc_unreachable ();
7736       }
7737
7738   if (TREE_CODE (type) != REFERENCE_TYPE)
7739     {
7740       if (!LAMBDA_EXPR_MUTABLE_P (lam))
7741         type = cp_build_qualified_type (type, (cp_type_quals (type)
7742                                                |TYPE_QUAL_CONST));
7743       type = build_reference_type (type);
7744     }
7745   return type;
7746 }
7747
7748 /* From an ID and INITIALIZER, create a capture (by reference if
7749    BY_REFERENCE_P is true), add it to the capture-list for LAMBDA,
7750    and return it.  */
7751
7752 tree
7753 add_capture (tree lambda, tree id, tree initializer, bool by_reference_p,
7754              bool explicit_init_p)
7755 {
7756   tree type;
7757   tree member;
7758
7759   type = lambda_capture_field_type (initializer);
7760   if (by_reference_p)
7761     {
7762       type = build_reference_type (type);
7763       if (!real_lvalue_p (initializer))
7764         error ("cannot capture %qE by reference", initializer);
7765     }
7766
7767   /* Make member variable.  */
7768   member = build_lang_decl (FIELD_DECL, id, type);
7769   if (!explicit_init_p)
7770     /* Normal captures are invisible to name lookup but uses are replaced
7771        with references to the capture field; we implement this by only
7772        really making them invisible in unevaluated context; see
7773        qualify_lookup.  For now, let's make explicitly initialized captures
7774        always visible.  */
7775     DECL_NORMAL_CAPTURE_P (member) = true;
7776
7777   /* Add it to the appropriate closure class if we've started it.  */
7778   if (current_class_type && current_class_type == TREE_TYPE (lambda))
7779     finish_member_declaration (member);
7780
7781   LAMBDA_EXPR_CAPTURE_LIST (lambda)
7782     = tree_cons (member, initializer, LAMBDA_EXPR_CAPTURE_LIST (lambda));
7783
7784   if (id == get_identifier ("__this"))
7785     {
7786       if (LAMBDA_EXPR_CAPTURES_THIS_P (lambda))
7787         error ("already captured %<this%> in lambda expression");
7788       LAMBDA_EXPR_THIS_CAPTURE (lambda) = member;
7789     }
7790
7791   return member;
7792 }
7793
7794 /* Register all the capture members on the list CAPTURES, which is the
7795    LAMBDA_EXPR_CAPTURE_LIST for the lambda after the introducer.  */
7796
7797 void register_capture_members (tree captures)
7798 {
7799   if (captures)
7800     {
7801       register_capture_members (TREE_CHAIN (captures));
7802       finish_member_declaration (TREE_PURPOSE (captures));
7803     }
7804 }
7805
7806 /* Given a FIELD_DECL decl belonging to a closure type, return a
7807    COMPONENT_REF of it relative to the 'this' parameter of the op() for
7808    that type.  */
7809
7810 static tree
7811 thisify_lambda_field (tree decl)
7812 {
7813   tree context = lambda_function (DECL_CONTEXT (decl));
7814   tree object = cp_build_indirect_ref (DECL_ARGUMENTS (context),
7815                                        RO_NULL,
7816                                        tf_warning_or_error);
7817   return finish_non_static_data_member (decl, object,
7818                                         /*qualifying_scope*/NULL_TREE);
7819 }
7820
7821 /* Similar to add_capture, except this works on a stack of nested lambdas.
7822    BY_REFERENCE_P in this case is derived from the default capture mode.
7823    Returns the capture for the lambda at the bottom of the stack.  */
7824
7825 tree
7826 add_default_capture (tree lambda_stack, tree id, tree initializer)
7827 {
7828   bool this_capture_p = (id == get_identifier ("__this"));
7829
7830   tree member = NULL_TREE;
7831
7832   tree saved_class_type = current_class_type;
7833
7834   tree node;
7835
7836   for (node = lambda_stack;
7837        node;
7838        node = TREE_CHAIN (node))
7839     {
7840       tree lambda = TREE_VALUE (node);
7841
7842       current_class_type = TREE_TYPE (lambda);
7843       member = add_capture (lambda,
7844                             id,
7845                             initializer,
7846                             /*by_reference_p=*/
7847                             (!this_capture_p
7848                              && (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda)
7849                                  == CPLD_REFERENCE)),
7850                             /*explicit_init_p=*/false);
7851       initializer = thisify_lambda_field (member);
7852     }
7853
7854   current_class_type = saved_class_type;
7855
7856   return member;
7857 }
7858
7859 /* Return the capture pertaining to a use of 'this' in LAMBDA, in the form of an
7860    INDIRECT_REF, possibly adding it through default capturing.  */
7861
7862 tree
7863 lambda_expr_this_capture (tree lambda)
7864 {
7865   tree result;
7866
7867   tree this_capture = LAMBDA_EXPR_THIS_CAPTURE (lambda);
7868
7869   /* Try to default capture 'this' if we can.  */
7870   if (!this_capture
7871       && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE)
7872     {
7873       tree containing_function = TYPE_CONTEXT (TREE_TYPE (lambda));
7874       tree lambda_stack = tree_cons (NULL_TREE, lambda, NULL_TREE);
7875       tree init = NULL_TREE;
7876
7877       /* If we are in a lambda function, we can move out until we hit:
7878            1. a non-lambda function,
7879            2. a lambda function capturing 'this', or
7880            3. a non-default capturing lambda function.  */
7881       while (LAMBDA_FUNCTION_P (containing_function))
7882         {
7883           tree lambda
7884             = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (containing_function));
7885
7886           if (LAMBDA_EXPR_THIS_CAPTURE (lambda))
7887             {
7888               /* An outer lambda has already captured 'this'.  */
7889               tree cap = LAMBDA_EXPR_THIS_CAPTURE (lambda);
7890               init = thisify_lambda_field (cap);
7891               break;
7892             }
7893
7894           if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_NONE)
7895             /* An outer lambda won't let us capture 'this'.  */
7896             break;
7897
7898           lambda_stack = tree_cons (NULL_TREE,
7899                                     lambda,
7900                                     lambda_stack);
7901
7902           containing_function = decl_function_context (containing_function);
7903         }
7904
7905       if (!init && DECL_NONSTATIC_MEMBER_FUNCTION_P (containing_function)
7906           && !LAMBDA_FUNCTION_P (containing_function))
7907         /* First parameter is 'this'.  */
7908         init = DECL_ARGUMENTS (containing_function);
7909
7910       if (init)
7911         this_capture = add_default_capture (lambda_stack,
7912                                             /*id=*/get_identifier ("__this"),
7913                                             init);
7914     }
7915
7916   if (!this_capture)
7917     {
7918       error ("%<this%> was not captured for this lambda function");
7919       result = error_mark_node;
7920     }
7921   else
7922     {
7923       /* To make sure that current_class_ref is for the lambda.  */
7924       gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)) == TREE_TYPE (lambda));
7925
7926       result = finish_non_static_data_member (this_capture,
7927                                               NULL_TREE,
7928                                               /*qualifying_scope=*/NULL_TREE);
7929
7930       /* If 'this' is captured, each use of 'this' is transformed into an
7931          access to the corresponding unnamed data member of the closure
7932          type cast (_expr.cast_ 5.4) to the type of 'this'. [ The cast
7933          ensures that the transformed expression is an rvalue. ] */
7934       result = rvalue (result);
7935     }
7936
7937   return result;
7938 }
7939
7940 /* Returns the method basetype of the innermost non-lambda function, or
7941    NULL_TREE if none.  */
7942
7943 tree
7944 nonlambda_method_basetype (void)
7945 {
7946   tree fn, type;
7947   if (!current_class_ref)
7948     return NULL_TREE;
7949
7950   type = current_class_type;
7951   if (!LAMBDA_TYPE_P (type))
7952     return type;
7953
7954   /* Find the nearest enclosing non-lambda function.  */
7955   fn = TYPE_NAME (type);
7956   do
7957     fn = decl_function_context (fn);
7958   while (fn && LAMBDA_FUNCTION_P (fn));
7959
7960   if (!fn || !DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
7961     return NULL_TREE;
7962
7963   return TYPE_METHOD_BASETYPE (TREE_TYPE (fn));
7964 }
7965
7966 /* If the closure TYPE has a static op(), also add a conversion to function
7967    pointer.  */
7968
7969 void
7970 maybe_add_lambda_conv_op (tree type)
7971 {
7972   bool nested = (current_function_decl != NULL_TREE);
7973   tree callop = lambda_function (type);
7974   tree rettype, name, fntype, fn, body, compound_stmt;
7975   tree thistype, stattype, statfn, convfn, call, arg;
7976   VEC (tree, gc) *argvec;
7977
7978   if (LAMBDA_EXPR_CAPTURE_LIST (CLASSTYPE_LAMBDA_EXPR (type)) != NULL_TREE)
7979     return;
7980
7981   stattype = build_function_type (TREE_TYPE (TREE_TYPE (callop)),
7982                                   FUNCTION_ARG_CHAIN (callop));
7983
7984   /* First build up the conversion op.  */
7985
7986   rettype = build_pointer_type (stattype);
7987   name = mangle_conv_op_name_for_type (rettype);
7988   thistype = cp_build_qualified_type (type, TYPE_QUAL_CONST);
7989   fntype = build_method_type_directly (thistype, rettype, void_list_node);
7990   fn = convfn = build_lang_decl (FUNCTION_DECL, name, fntype);
7991   DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
7992
7993   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7994       && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
7995     DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
7996
7997   SET_OVERLOADED_OPERATOR_CODE (fn, TYPE_EXPR);
7998   grokclassfn (type, fn, NO_SPECIAL);
7999   set_linkage_according_to_type (type, fn);
8000   rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
8001   DECL_IN_AGGR_P (fn) = 1;
8002   DECL_ARTIFICIAL (fn) = 1;
8003   DECL_NOT_REALLY_EXTERN (fn) = 1;
8004   DECL_DECLARED_INLINE_P (fn) = 1;
8005   DECL_ARGUMENTS (fn) = build_this_parm (fntype, TYPE_QUAL_CONST);
8006   if (nested)
8007     DECL_INTERFACE_KNOWN (fn) = 1;
8008
8009   add_method (type, fn, NULL_TREE);
8010
8011   /* Generic thunk code fails for varargs; we'll complain in mark_used if
8012      the conversion op is used.  */
8013   if (varargs_function_p (callop))
8014     {
8015       DECL_DELETED_FN (fn) = 1;
8016       return;
8017     }
8018
8019   /* Now build up the thunk to be returned.  */
8020
8021   name = get_identifier ("_FUN");
8022   fn = statfn = build_lang_decl (FUNCTION_DECL, name, stattype);
8023   DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
8024   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
8025       && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
8026     DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
8027   grokclassfn (type, fn, NO_SPECIAL);
8028   set_linkage_according_to_type (type, fn);
8029   rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
8030   DECL_IN_AGGR_P (fn) = 1;
8031   DECL_ARTIFICIAL (fn) = 1;
8032   DECL_NOT_REALLY_EXTERN (fn) = 1;
8033   DECL_DECLARED_INLINE_P (fn) = 1;
8034   DECL_STATIC_FUNCTION_P (fn) = 1;
8035   DECL_ARGUMENTS (fn) = copy_list (DECL_CHAIN (DECL_ARGUMENTS (callop)));
8036   for (arg = DECL_ARGUMENTS (fn); arg; arg = DECL_CHAIN (arg))
8037     DECL_CONTEXT (arg) = fn;
8038   if (nested)
8039     DECL_INTERFACE_KNOWN (fn) = 1;
8040
8041   add_method (type, fn, NULL_TREE);
8042
8043   if (nested)
8044     push_function_context ();
8045
8046   /* Generate the body of the thunk.  */
8047
8048   start_preparsed_function (statfn, NULL_TREE,
8049                             SF_PRE_PARSED | SF_INCLASS_INLINE);
8050   if (DECL_ONE_ONLY (statfn))
8051     {
8052       /* Put the thunk in the same comdat group as the call op.  */
8053       struct cgraph_node *callop_node, *thunk_node;
8054       DECL_COMDAT_GROUP (statfn) = DECL_COMDAT_GROUP (callop);
8055       callop_node = cgraph_node (callop);
8056       thunk_node = cgraph_node (statfn);
8057       gcc_assert (callop_node->same_comdat_group == NULL);
8058       gcc_assert (thunk_node->same_comdat_group == NULL);
8059       callop_node->same_comdat_group = thunk_node;
8060       thunk_node->same_comdat_group = callop_node;
8061     }
8062   body = begin_function_body ();
8063   compound_stmt = begin_compound_stmt (0);
8064
8065   arg = build1 (NOP_EXPR, TREE_TYPE (DECL_ARGUMENTS (callop)),
8066                 null_pointer_node);
8067   argvec = make_tree_vector ();
8068   VEC_quick_push (tree, argvec, arg);
8069   for (arg = DECL_ARGUMENTS (statfn); arg; arg = DECL_CHAIN (arg))
8070     VEC_safe_push (tree, gc, argvec, arg);
8071   call = build_call_a (callop, VEC_length (tree, argvec),
8072                        VEC_address (tree, argvec));
8073   CALL_FROM_THUNK_P (call) = 1;
8074   if (MAYBE_CLASS_TYPE_P (TREE_TYPE (call)))
8075     call = build_cplus_new (TREE_TYPE (call), call);
8076   call = convert_from_reference (call);
8077   finish_return_stmt (call);
8078
8079   finish_compound_stmt (compound_stmt);
8080   finish_function_body (body);
8081
8082   expand_or_defer_fn (finish_function (2));
8083
8084   /* Generate the body of the conversion op.  */
8085
8086   start_preparsed_function (convfn, NULL_TREE,
8087                             SF_PRE_PARSED | SF_INCLASS_INLINE);
8088   body = begin_function_body ();
8089   compound_stmt = begin_compound_stmt (0);
8090
8091   finish_return_stmt (decay_conversion (statfn));
8092
8093   finish_compound_stmt (compound_stmt);
8094   finish_function_body (body);
8095
8096   expand_or_defer_fn (finish_function (2));
8097
8098   if (nested)
8099     pop_function_context ();
8100 }
8101 #include "gt-cp-semantics.h"