tree-core.h (tree_code_name): Remove.
[platform/upstream/gcc.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-2013 Free Software Foundation, Inc.
7    Written by Mark Mitchell (mmitchell@usa.net) based on code found
8    formerly in parse.y and pt.c.
9
10    This file is part of GCC.
11
12    GCC is free software; you can redistribute it and/or modify it
13    under the terms of the GNU General Public License as published by
14    the Free Software Foundation; either version 3, or (at your option)
15    any later version.
16
17    GCC is distributed in the hope that it will be useful, but
18    WITHOUT ANY WARRANTY; without even the implied warranty of
19    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20    General Public License for more details.
21
22 You should have received a copy of the GNU General Public License
23 along with GCC; see the file COPYING3.  If not see
24 <http://www.gnu.org/licenses/>.  */
25
26 #include "config.h"
27 #include "system.h"
28 #include "coretypes.h"
29 #include "tm.h"
30 #include "tree.h"
31 #include "cp-tree.h"
32 #include "c-family/c-common.h"
33 #include "c-family/c-objc.h"
34 #include "tree-inline.h"
35 #include "intl.h"
36 #include "toplev.h"
37 #include "flags.h"
38 #include "timevar.h"
39 #include "diagnostic.h"
40 #include "cgraph.h"
41 #include "tree-iterator.h"
42 #include "vec.h"
43 #include "target.h"
44 #include "gimple.h"
45 #include "bitmap.h"
46 #include "hash-table.h"
47
48 static bool verify_constant (tree, bool, bool *, bool *);
49 #define VERIFY_CONSTANT(X)                                              \
50 do {                                                                    \
51   if (verify_constant ((X), allow_non_constant, non_constant_p, overflow_p)) \
52     return t;                                                           \
53  } while (0)
54
55 /* There routines provide a modular interface to perform many parsing
56    operations.  They may therefore be used during actual parsing, or
57    during template instantiation, which may be regarded as a
58    degenerate form of parsing.  */
59
60 static tree maybe_convert_cond (tree);
61 static tree finalize_nrv_r (tree *, int *, void *);
62 static tree capture_decltype (tree);
63
64
65 /* Deferred Access Checking Overview
66    ---------------------------------
67
68    Most C++ expressions and declarations require access checking
69    to be performed during parsing.  However, in several cases,
70    this has to be treated differently.
71
72    For member declarations, access checking has to be deferred
73    until more information about the declaration is known.  For
74    example:
75
76      class A {
77          typedef int X;
78        public:
79          X f();
80      };
81
82      A::X A::f();
83      A::X g();
84
85    When we are parsing the function return type `A::X', we don't
86    really know if this is allowed until we parse the function name.
87
88    Furthermore, some contexts require that access checking is
89    never performed at all.  These include class heads, and template
90    instantiations.
91
92    Typical use of access checking functions is described here:
93
94    1. When we enter a context that requires certain access checking
95       mode, the function `push_deferring_access_checks' is called with
96       DEFERRING argument specifying the desired mode.  Access checking
97       may be performed immediately (dk_no_deferred), deferred
98       (dk_deferred), or not performed (dk_no_check).
99
100    2. When a declaration such as a type, or a variable, is encountered,
101       the function `perform_or_defer_access_check' is called.  It
102       maintains a vector of all deferred checks.
103
104    3. The global `current_class_type' or `current_function_decl' is then
105       setup by the parser.  `enforce_access' relies on these information
106       to check access.
107
108    4. Upon exiting the context mentioned in step 1,
109       `perform_deferred_access_checks' is called to check all declaration
110       stored in the vector. `pop_deferring_access_checks' is then
111       called to restore the previous access checking mode.
112
113       In case of parsing error, we simply call `pop_deferring_access_checks'
114       without `perform_deferred_access_checks'.  */
115
116 typedef struct GTY(()) deferred_access {
117   /* A vector representing name-lookups for which we have deferred
118      checking access controls.  We cannot check the accessibility of
119      names used in a decl-specifier-seq until we know what is being
120      declared because code like:
121
122        class A {
123          class B {};
124          B* f();
125        }
126
127        A::B* A::f() { return 0; }
128
129      is valid, even though `A::B' is not generally accessible.  */
130   vec<deferred_access_check, va_gc> * GTY(()) deferred_access_checks;
131
132   /* The current mode of access checks.  */
133   enum deferring_kind deferring_access_checks_kind;
134
135 } deferred_access;
136
137 /* Data for deferred access checking.  */
138 static GTY(()) vec<deferred_access, va_gc> *deferred_access_stack;
139 static GTY(()) unsigned deferred_access_no_check;
140
141 /* Save the current deferred access states and start deferred
142    access checking iff DEFER_P is true.  */
143
144 void
145 push_deferring_access_checks (deferring_kind deferring)
146 {
147   /* For context like template instantiation, access checking
148      disabling applies to all nested context.  */
149   if (deferred_access_no_check || deferring == dk_no_check)
150     deferred_access_no_check++;
151   else
152     {
153       deferred_access e = {NULL, deferring};
154       vec_safe_push (deferred_access_stack, e);
155     }
156 }
157
158 /* Save the current deferred access states and start deferred access
159    checking, continuing the set of deferred checks in CHECKS.  */
160
161 void
162 reopen_deferring_access_checks (vec<deferred_access_check, va_gc> * checks)
163 {
164   push_deferring_access_checks (dk_deferred);
165   if (!deferred_access_no_check)
166     deferred_access_stack->last().deferred_access_checks = checks;
167 }
168
169 /* Resume deferring access checks again after we stopped doing
170    this previously.  */
171
172 void
173 resume_deferring_access_checks (void)
174 {
175   if (!deferred_access_no_check)
176     deferred_access_stack->last().deferring_access_checks_kind = dk_deferred;
177 }
178
179 /* Stop deferring access checks.  */
180
181 void
182 stop_deferring_access_checks (void)
183 {
184   if (!deferred_access_no_check)
185     deferred_access_stack->last().deferring_access_checks_kind = dk_no_deferred;
186 }
187
188 /* Discard the current deferred access checks and restore the
189    previous states.  */
190
191 void
192 pop_deferring_access_checks (void)
193 {
194   if (deferred_access_no_check)
195     deferred_access_no_check--;
196   else
197     deferred_access_stack->pop ();
198 }
199
200 /* Returns a TREE_LIST representing the deferred checks.
201    The TREE_PURPOSE of each node is the type through which the
202    access occurred; the TREE_VALUE is the declaration named.
203    */
204
205 vec<deferred_access_check, va_gc> *
206 get_deferred_access_checks (void)
207 {
208   if (deferred_access_no_check)
209     return NULL;
210   else
211     return (deferred_access_stack->last().deferred_access_checks);
212 }
213
214 /* Take current deferred checks and combine with the
215    previous states if we also defer checks previously.
216    Otherwise perform checks now.  */
217
218 void
219 pop_to_parent_deferring_access_checks (void)
220 {
221   if (deferred_access_no_check)
222     deferred_access_no_check--;
223   else
224     {
225       vec<deferred_access_check, va_gc> *checks;
226       deferred_access *ptr;
227
228       checks = (deferred_access_stack->last ().deferred_access_checks);
229
230       deferred_access_stack->pop ();
231       ptr = &deferred_access_stack->last ();
232       if (ptr->deferring_access_checks_kind == dk_no_deferred)
233         {
234           /* Check access.  */
235           perform_access_checks (checks, tf_warning_or_error);
236         }
237       else
238         {
239           /* Merge with parent.  */
240           int i, j;
241           deferred_access_check *chk, *probe;
242
243           FOR_EACH_VEC_SAFE_ELT (checks, i, chk)
244             {
245               FOR_EACH_VEC_SAFE_ELT (ptr->deferred_access_checks, j, probe)
246                 {
247                   if (probe->binfo == chk->binfo &&
248                       probe->decl == chk->decl &&
249                       probe->diag_decl == chk->diag_decl)
250                     goto found;
251                 }
252               /* Insert into parent's checks.  */
253               vec_safe_push (ptr->deferred_access_checks, *chk);
254             found:;
255             }
256         }
257     }
258 }
259
260 /* Perform the access checks in CHECKS.  The TREE_PURPOSE of each node
261    is the BINFO indicating the qualifying scope used to access the
262    DECL node stored in the TREE_VALUE of the node.  If CHECKS is empty
263    or we aren't in SFINAE context or all the checks succeed return TRUE,
264    otherwise FALSE.  */
265
266 bool
267 perform_access_checks (vec<deferred_access_check, va_gc> *checks,
268                        tsubst_flags_t complain)
269 {
270   int i;
271   deferred_access_check *chk;
272   location_t loc = input_location;
273   bool ok = true;
274
275   if (!checks)
276     return true;
277
278   FOR_EACH_VEC_SAFE_ELT (checks, i, chk)
279     {
280       input_location = chk->loc;
281       ok &= enforce_access (chk->binfo, chk->decl, chk->diag_decl, complain);
282     }
283
284   input_location = loc;
285   return (complain & tf_error) ? true : ok;
286 }
287
288 /* Perform the deferred access checks.
289
290    After performing the checks, we still have to keep the list
291    `deferred_access_stack->deferred_access_checks' since we may want
292    to check access for them again later in a different context.
293    For example:
294
295      class A {
296        typedef int X;
297        static X a;
298      };
299      A::X A::a, x;      // No error for `A::a', error for `x'
300
301    We have to perform deferred access of `A::X', first with `A::a',
302    next with `x'.  Return value like perform_access_checks above.  */
303
304 bool
305 perform_deferred_access_checks (tsubst_flags_t complain)
306 {
307   return perform_access_checks (get_deferred_access_checks (), complain);
308 }
309
310 /* Defer checking the accessibility of DECL, when looked up in
311    BINFO. DIAG_DECL is the declaration to use to print diagnostics.
312    Return value like perform_access_checks above.  */
313
314 bool
315 perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl,
316                                tsubst_flags_t complain)
317 {
318   int i;
319   deferred_access *ptr;
320   deferred_access_check *chk;
321
322
323   /* Exit if we are in a context that no access checking is performed.
324      */
325   if (deferred_access_no_check)
326     return true;
327
328   gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
329
330   ptr = &deferred_access_stack->last ();
331
332   /* If we are not supposed to defer access checks, just check now.  */
333   if (ptr->deferring_access_checks_kind == dk_no_deferred)
334     {
335       bool ok = enforce_access (binfo, decl, diag_decl, complain);
336       return (complain & tf_error) ? true : ok;
337     }
338
339   /* See if we are already going to perform this check.  */
340   FOR_EACH_VEC_SAFE_ELT (ptr->deferred_access_checks, i, chk)
341     {
342       if (chk->decl == decl && chk->binfo == binfo &&
343           chk->diag_decl == diag_decl)
344         {
345           return true;
346         }
347     }
348   /* If not, record the check.  */
349   deferred_access_check new_access = {binfo, decl, diag_decl, input_location};
350   vec_safe_push (ptr->deferred_access_checks, new_access);
351
352   return true;
353 }
354
355 /* Returns nonzero if the current statement is a full expression,
356    i.e. temporaries created during that statement should be destroyed
357    at the end of the statement.  */
358
359 int
360 stmts_are_full_exprs_p (void)
361 {
362   return current_stmt_tree ()->stmts_are_full_exprs_p;
363 }
364
365 /* T is a statement.  Add it to the statement-tree.  This is the C++
366    version.  The C/ObjC frontends have a slightly different version of
367    this function.  */
368
369 tree
370 add_stmt (tree t)
371 {
372   enum tree_code code = TREE_CODE (t);
373
374   if (EXPR_P (t) && code != LABEL_EXPR)
375     {
376       if (!EXPR_HAS_LOCATION (t))
377         SET_EXPR_LOCATION (t, input_location);
378
379       /* When we expand a statement-tree, we must know whether or not the
380          statements are full-expressions.  We record that fact here.  */
381       STMT_IS_FULL_EXPR_P (t) = stmts_are_full_exprs_p ();
382     }
383
384   /* Add T to the statement-tree.  Non-side-effect statements need to be
385      recorded during statement expressions.  */
386   gcc_checking_assert (!stmt_list_stack->is_empty ());
387   append_to_statement_list_force (t, &cur_stmt_list);
388
389   return t;
390 }
391
392 /* Returns the stmt_tree to which statements are currently being added.  */
393
394 stmt_tree
395 current_stmt_tree (void)
396 {
397   return (cfun
398           ? &cfun->language->base.x_stmt_tree
399           : &scope_chain->x_stmt_tree);
400 }
401
402 /* If statements are full expressions, wrap STMT in a CLEANUP_POINT_EXPR.  */
403
404 static tree
405 maybe_cleanup_point_expr (tree expr)
406 {
407   if (!processing_template_decl && stmts_are_full_exprs_p ())
408     expr = fold_build_cleanup_point_expr (TREE_TYPE (expr), expr);
409   return expr;
410 }
411
412 /* Like maybe_cleanup_point_expr except have the type of the new expression be
413    void so we don't need to create a temporary variable to hold the inner
414    expression.  The reason why we do this is because the original type might be
415    an aggregate and we cannot create a temporary variable for that type.  */
416
417 tree
418 maybe_cleanup_point_expr_void (tree expr)
419 {
420   if (!processing_template_decl && stmts_are_full_exprs_p ())
421     expr = fold_build_cleanup_point_expr (void_type_node, expr);
422   return expr;
423 }
424
425
426
427 /* Create a declaration statement for the declaration given by the DECL.  */
428
429 void
430 add_decl_expr (tree decl)
431 {
432   tree r = build_stmt (input_location, DECL_EXPR, decl);
433   if (DECL_INITIAL (decl)
434       || (DECL_SIZE (decl) && TREE_SIDE_EFFECTS (DECL_SIZE (decl))))
435     r = maybe_cleanup_point_expr_void (r);
436   add_stmt (r);
437 }
438
439 /* Finish a scope.  */
440
441 tree
442 do_poplevel (tree stmt_list)
443 {
444   tree block = NULL;
445
446   if (stmts_are_full_exprs_p ())
447     block = poplevel (kept_level_p (), 1, 0);
448
449   stmt_list = pop_stmt_list (stmt_list);
450
451   if (!processing_template_decl)
452     {
453       stmt_list = c_build_bind_expr (input_location, block, stmt_list);
454       /* ??? See c_end_compound_stmt re statement expressions.  */
455     }
456
457   return stmt_list;
458 }
459
460 /* Begin a new scope.  */
461
462 static tree
463 do_pushlevel (scope_kind sk)
464 {
465   tree ret = push_stmt_list ();
466   if (stmts_are_full_exprs_p ())
467     begin_scope (sk, NULL);
468   return ret;
469 }
470
471 /* Queue a cleanup.  CLEANUP is an expression/statement to be executed
472    when the current scope is exited.  EH_ONLY is true when this is not
473    meant to apply to normal control flow transfer.  */
474
475 void
476 push_cleanup (tree decl, tree cleanup, bool eh_only)
477 {
478   tree stmt = build_stmt (input_location, CLEANUP_STMT, NULL, cleanup, decl);
479   CLEANUP_EH_ONLY (stmt) = eh_only;
480   add_stmt (stmt);
481   CLEANUP_BODY (stmt) = push_stmt_list ();
482 }
483
484 /* Begin a conditional that might contain a declaration.  When generating
485    normal code, we want the declaration to appear before the statement
486    containing the conditional.  When generating template code, we want the
487    conditional to be rendered as the raw DECL_EXPR.  */
488
489 static void
490 begin_cond (tree *cond_p)
491 {
492   if (processing_template_decl)
493     *cond_p = push_stmt_list ();
494 }
495
496 /* Finish such a conditional.  */
497
498 static void
499 finish_cond (tree *cond_p, tree expr)
500 {
501   if (processing_template_decl)
502     {
503       tree cond = pop_stmt_list (*cond_p);
504
505       if (expr == NULL_TREE)
506         /* Empty condition in 'for'.  */
507         gcc_assert (empty_expr_stmt_p (cond));
508       else if (check_for_bare_parameter_packs (expr))
509         expr = error_mark_node;
510       else if (!empty_expr_stmt_p (cond))
511         expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), cond, expr);
512     }
513   *cond_p = expr;
514 }
515
516 /* If *COND_P specifies a conditional with a declaration, transform the
517    loop such that
518             while (A x = 42) { }
519             for (; A x = 42;) { }
520    becomes
521             while (true) { A x = 42; if (!x) break; }
522             for (;;) { A x = 42; if (!x) break; }
523    The statement list for BODY will be empty if the conditional did
524    not declare anything.  */
525
526 static void
527 simplify_loop_decl_cond (tree *cond_p, tree body)
528 {
529   tree cond, if_stmt;
530
531   if (!TREE_SIDE_EFFECTS (body))
532     return;
533
534   cond = *cond_p;
535   *cond_p = boolean_true_node;
536
537   if_stmt = begin_if_stmt ();
538   cond = cp_build_unary_op (TRUTH_NOT_EXPR, cond, 0, tf_warning_or_error);
539   finish_if_stmt_cond (cond, if_stmt);
540   finish_break_stmt ();
541   finish_then_clause (if_stmt);
542   finish_if_stmt (if_stmt);
543 }
544
545 /* Finish a goto-statement.  */
546
547 tree
548 finish_goto_stmt (tree destination)
549 {
550   if (identifier_p (destination))
551     destination = lookup_label (destination);
552
553   /* We warn about unused labels with -Wunused.  That means we have to
554      mark the used labels as used.  */
555   if (TREE_CODE (destination) == LABEL_DECL)
556     TREE_USED (destination) = 1;
557   else
558     {
559       destination = mark_rvalue_use (destination);
560       if (!processing_template_decl)
561         {
562           destination = cp_convert (ptr_type_node, destination,
563                                     tf_warning_or_error);
564           if (error_operand_p (destination))
565             return NULL_TREE;
566           destination
567             = fold_build_cleanup_point_expr (TREE_TYPE (destination),
568                                              destination);
569         }
570     }
571
572   check_goto (destination);
573
574   return add_stmt (build_stmt (input_location, GOTO_EXPR, destination));
575 }
576
577 /* COND is the condition-expression for an if, while, etc.,
578    statement.  Convert it to a boolean value, if appropriate.
579    In addition, verify sequence points if -Wsequence-point is enabled.  */
580
581 static tree
582 maybe_convert_cond (tree cond)
583 {
584   /* Empty conditions remain empty.  */
585   if (!cond)
586     return NULL_TREE;
587
588   /* Wait until we instantiate templates before doing conversion.  */
589   if (processing_template_decl)
590     return cond;
591
592   if (warn_sequence_point)
593     verify_sequence_points (cond);
594
595   /* Do the conversion.  */
596   cond = convert_from_reference (cond);
597
598   if (TREE_CODE (cond) == MODIFY_EXPR
599       && !TREE_NO_WARNING (cond)
600       && warn_parentheses)
601     {
602       warning (OPT_Wparentheses,
603                "suggest parentheses around assignment used as truth value");
604       TREE_NO_WARNING (cond) = 1;
605     }
606
607   return condition_conversion (cond);
608 }
609
610 /* Finish an expression-statement, whose EXPRESSION is as indicated.  */
611
612 tree
613 finish_expr_stmt (tree expr)
614 {
615   tree r = NULL_TREE;
616
617   if (expr != NULL_TREE)
618     {
619       if (!processing_template_decl)
620         {
621           if (warn_sequence_point)
622             verify_sequence_points (expr);
623           expr = convert_to_void (expr, ICV_STATEMENT, tf_warning_or_error);
624         }
625       else if (!type_dependent_expression_p (expr))
626         convert_to_void (build_non_dependent_expr (expr), ICV_STATEMENT, 
627                          tf_warning_or_error);
628
629       if (check_for_bare_parameter_packs (expr))
630         expr = error_mark_node;
631
632       /* Simplification of inner statement expressions, compound exprs,
633          etc can result in us already having an EXPR_STMT.  */
634       if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
635         {
636           if (TREE_CODE (expr) != EXPR_STMT)
637             expr = build_stmt (input_location, EXPR_STMT, expr);
638           expr = maybe_cleanup_point_expr_void (expr);
639         }
640
641       r = add_stmt (expr);
642     }
643
644   return r;
645 }
646
647
648 /* Begin an if-statement.  Returns a newly created IF_STMT if
649    appropriate.  */
650
651 tree
652 begin_if_stmt (void)
653 {
654   tree r, scope;
655   scope = do_pushlevel (sk_cond);
656   r = build_stmt (input_location, IF_STMT, NULL_TREE,
657                   NULL_TREE, NULL_TREE, scope);
658   begin_cond (&IF_COND (r));
659   return r;
660 }
661
662 /* Process the COND of an if-statement, which may be given by
663    IF_STMT.  */
664
665 void
666 finish_if_stmt_cond (tree cond, tree if_stmt)
667 {
668   finish_cond (&IF_COND (if_stmt), maybe_convert_cond (cond));
669   add_stmt (if_stmt);
670   THEN_CLAUSE (if_stmt) = push_stmt_list ();
671 }
672
673 /* Finish the then-clause of an if-statement, which may be given by
674    IF_STMT.  */
675
676 tree
677 finish_then_clause (tree if_stmt)
678 {
679   THEN_CLAUSE (if_stmt) = pop_stmt_list (THEN_CLAUSE (if_stmt));
680   return if_stmt;
681 }
682
683 /* Begin the else-clause of an if-statement.  */
684
685 void
686 begin_else_clause (tree if_stmt)
687 {
688   ELSE_CLAUSE (if_stmt) = push_stmt_list ();
689 }
690
691 /* Finish the else-clause of an if-statement, which may be given by
692    IF_STMT.  */
693
694 void
695 finish_else_clause (tree if_stmt)
696 {
697   ELSE_CLAUSE (if_stmt) = pop_stmt_list (ELSE_CLAUSE (if_stmt));
698 }
699
700 /* Finish an if-statement.  */
701
702 void
703 finish_if_stmt (tree if_stmt)
704 {
705   tree scope = IF_SCOPE (if_stmt);
706   IF_SCOPE (if_stmt) = NULL;
707   add_stmt (do_poplevel (scope));
708 }
709
710 /* Begin a while-statement.  Returns a newly created WHILE_STMT if
711    appropriate.  */
712
713 tree
714 begin_while_stmt (void)
715 {
716   tree r;
717   r = build_stmt (input_location, WHILE_STMT, NULL_TREE, NULL_TREE);
718   add_stmt (r);
719   WHILE_BODY (r) = do_pushlevel (sk_block);
720   begin_cond (&WHILE_COND (r));
721   return r;
722 }
723
724 /* Process the COND of a while-statement, which may be given by
725    WHILE_STMT.  */
726
727 void
728 finish_while_stmt_cond (tree cond, tree while_stmt)
729 {
730   finish_cond (&WHILE_COND (while_stmt), maybe_convert_cond (cond));
731   simplify_loop_decl_cond (&WHILE_COND (while_stmt), WHILE_BODY (while_stmt));
732 }
733
734 /* Finish a while-statement, which may be given by WHILE_STMT.  */
735
736 void
737 finish_while_stmt (tree while_stmt)
738 {
739   WHILE_BODY (while_stmt) = do_poplevel (WHILE_BODY (while_stmt));
740 }
741
742 /* Begin a do-statement.  Returns a newly created DO_STMT if
743    appropriate.  */
744
745 tree
746 begin_do_stmt (void)
747 {
748   tree r = build_stmt (input_location, DO_STMT, NULL_TREE, NULL_TREE);
749   add_stmt (r);
750   DO_BODY (r) = push_stmt_list ();
751   return r;
752 }
753
754 /* Finish the body of a do-statement, which may be given by DO_STMT.  */
755
756 void
757 finish_do_body (tree do_stmt)
758 {
759   tree body = DO_BODY (do_stmt) = pop_stmt_list (DO_BODY (do_stmt));
760
761   if (TREE_CODE (body) == STATEMENT_LIST && STATEMENT_LIST_TAIL (body))
762     body = STATEMENT_LIST_TAIL (body)->stmt;
763
764   if (IS_EMPTY_STMT (body))
765     warning (OPT_Wempty_body,
766             "suggest explicit braces around empty body in %<do%> statement");
767 }
768
769 /* Finish a do-statement, which may be given by DO_STMT, and whose
770    COND is as indicated.  */
771
772 void
773 finish_do_stmt (tree cond, tree do_stmt)
774 {
775   cond = maybe_convert_cond (cond);
776   DO_COND (do_stmt) = cond;
777 }
778
779 /* Finish a return-statement.  The EXPRESSION returned, if any, is as
780    indicated.  */
781
782 tree
783 finish_return_stmt (tree expr)
784 {
785   tree r;
786   bool no_warning;
787
788   expr = check_return_expr (expr, &no_warning);
789
790   if (error_operand_p (expr)
791       || (flag_openmp && !check_omp_return ()))
792     return error_mark_node;
793   if (!processing_template_decl)
794     {
795       if (warn_sequence_point)
796         verify_sequence_points (expr);
797       
798       if (DECL_DESTRUCTOR_P (current_function_decl)
799           || (DECL_CONSTRUCTOR_P (current_function_decl)
800               && targetm.cxx.cdtor_returns_this ()))
801         {
802           /* Similarly, all destructors must run destructors for
803              base-classes before returning.  So, all returns in a
804              destructor get sent to the DTOR_LABEL; finish_function emits
805              code to return a value there.  */
806           return finish_goto_stmt (cdtor_label);
807         }
808     }
809
810   r = build_stmt (input_location, RETURN_EXPR, expr);
811   TREE_NO_WARNING (r) |= no_warning;
812   r = maybe_cleanup_point_expr_void (r);
813   r = add_stmt (r);
814
815   return r;
816 }
817
818 /* Begin the scope of a for-statement or a range-for-statement.
819    Both the returned trees are to be used in a call to
820    begin_for_stmt or begin_range_for_stmt.  */
821
822 tree
823 begin_for_scope (tree *init)
824 {
825   tree scope = NULL_TREE;
826   if (flag_new_for_scope > 0)
827     scope = do_pushlevel (sk_for);
828
829   if (processing_template_decl)
830     *init = push_stmt_list ();
831   else
832     *init = NULL_TREE;
833
834   return scope;
835 }
836
837 /* Begin a for-statement.  Returns a new FOR_STMT.
838    SCOPE and INIT should be the return of begin_for_scope,
839    or both NULL_TREE  */
840
841 tree
842 begin_for_stmt (tree scope, tree init)
843 {
844   tree r;
845
846   r = build_stmt (input_location, FOR_STMT, NULL_TREE, NULL_TREE,
847                   NULL_TREE, NULL_TREE, NULL_TREE);
848
849   if (scope == NULL_TREE)
850     {
851       gcc_assert (!init || !(flag_new_for_scope > 0));
852       if (!init)
853         scope = begin_for_scope (&init);
854     }
855   FOR_INIT_STMT (r) = init;
856   FOR_SCOPE (r) = scope;
857
858   return r;
859 }
860
861 /* Finish the for-init-statement of a for-statement, which may be
862    given by FOR_STMT.  */
863
864 void
865 finish_for_init_stmt (tree for_stmt)
866 {
867   if (processing_template_decl)
868     FOR_INIT_STMT (for_stmt) = pop_stmt_list (FOR_INIT_STMT (for_stmt));
869   add_stmt (for_stmt);
870   FOR_BODY (for_stmt) = do_pushlevel (sk_block);
871   begin_cond (&FOR_COND (for_stmt));
872 }
873
874 /* Finish the COND of a for-statement, which may be given by
875    FOR_STMT.  */
876
877 void
878 finish_for_cond (tree cond, tree for_stmt)
879 {
880   finish_cond (&FOR_COND (for_stmt), maybe_convert_cond (cond));
881   simplify_loop_decl_cond (&FOR_COND (for_stmt), FOR_BODY (for_stmt));
882 }
883
884 /* Finish the increment-EXPRESSION in a for-statement, which may be
885    given by FOR_STMT.  */
886
887 void
888 finish_for_expr (tree expr, tree for_stmt)
889 {
890   if (!expr)
891     return;
892   /* If EXPR is an overloaded function, issue an error; there is no
893      context available to use to perform overload resolution.  */
894   if (type_unknown_p (expr))
895     {
896       cxx_incomplete_type_error (expr, TREE_TYPE (expr));
897       expr = error_mark_node;
898     }
899   if (!processing_template_decl)
900     {
901       if (warn_sequence_point)
902         verify_sequence_points (expr);
903       expr = convert_to_void (expr, ICV_THIRD_IN_FOR,
904                               tf_warning_or_error);
905     }
906   else if (!type_dependent_expression_p (expr))
907     convert_to_void (build_non_dependent_expr (expr), ICV_THIRD_IN_FOR,
908                      tf_warning_or_error);
909   expr = maybe_cleanup_point_expr_void (expr);
910   if (check_for_bare_parameter_packs (expr))
911     expr = error_mark_node;
912   FOR_EXPR (for_stmt) = expr;
913 }
914
915 /* Finish the body of a for-statement, which may be given by
916    FOR_STMT.  The increment-EXPR for the loop must be
917    provided.
918    It can also finish RANGE_FOR_STMT. */
919
920 void
921 finish_for_stmt (tree for_stmt)
922 {
923   if (TREE_CODE (for_stmt) == RANGE_FOR_STMT)
924     RANGE_FOR_BODY (for_stmt) = do_poplevel (RANGE_FOR_BODY (for_stmt));
925   else
926     FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt));
927
928   /* Pop the scope for the body of the loop.  */
929   if (flag_new_for_scope > 0)
930     {
931       tree scope;
932       tree *scope_ptr = (TREE_CODE (for_stmt) == RANGE_FOR_STMT
933                          ? &RANGE_FOR_SCOPE (for_stmt)
934                          : &FOR_SCOPE (for_stmt));
935       scope = *scope_ptr;
936       *scope_ptr = NULL;
937       add_stmt (do_poplevel (scope));
938     }
939 }
940
941 /* Begin a range-for-statement.  Returns a new RANGE_FOR_STMT.
942    SCOPE and INIT should be the return of begin_for_scope,
943    or both NULL_TREE  .
944    To finish it call finish_for_stmt(). */
945
946 tree
947 begin_range_for_stmt (tree scope, tree init)
948 {
949   tree r;
950
951   r = build_stmt (input_location, RANGE_FOR_STMT,
952                   NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE);
953
954   if (scope == NULL_TREE)
955     {
956       gcc_assert (!init || !(flag_new_for_scope > 0));
957       if (!init)
958         scope = begin_for_scope (&init);
959     }
960
961   /* RANGE_FOR_STMTs do not use nor save the init tree, so we
962      pop it now.  */
963   if (init)
964     pop_stmt_list (init);
965   RANGE_FOR_SCOPE (r) = scope;
966
967   return r;
968 }
969
970 /* Finish the head of a range-based for statement, which may
971    be given by RANGE_FOR_STMT. DECL must be the declaration
972    and EXPR must be the loop expression. */
973
974 void
975 finish_range_for_decl (tree range_for_stmt, tree decl, tree expr)
976 {
977   RANGE_FOR_DECL (range_for_stmt) = decl;
978   RANGE_FOR_EXPR (range_for_stmt) = expr;
979   add_stmt (range_for_stmt);
980   RANGE_FOR_BODY (range_for_stmt) = do_pushlevel (sk_block);
981 }
982
983 /* Finish a break-statement.  */
984
985 tree
986 finish_break_stmt (void)
987 {
988   /* In switch statements break is sometimes stylistically used after
989      a return statement.  This can lead to spurious warnings about
990      control reaching the end of a non-void function when it is
991      inlined.  Note that we are calling block_may_fallthru with
992      language specific tree nodes; this works because
993      block_may_fallthru returns true when given something it does not
994      understand.  */
995   if (!block_may_fallthru (cur_stmt_list))
996     return void_zero_node;
997   return add_stmt (build_stmt (input_location, BREAK_STMT));
998 }
999
1000 /* Finish a continue-statement.  */
1001
1002 tree
1003 finish_continue_stmt (void)
1004 {
1005   return add_stmt (build_stmt (input_location, CONTINUE_STMT));
1006 }
1007
1008 /* Begin a switch-statement.  Returns a new SWITCH_STMT if
1009    appropriate.  */
1010
1011 tree
1012 begin_switch_stmt (void)
1013 {
1014   tree r, scope;
1015
1016   scope = do_pushlevel (sk_cond);
1017   r = build_stmt (input_location, SWITCH_STMT, NULL_TREE, NULL_TREE, NULL_TREE, scope);
1018
1019   begin_cond (&SWITCH_STMT_COND (r));
1020
1021   return r;
1022 }
1023
1024 /* Finish the cond of a switch-statement.  */
1025
1026 void
1027 finish_switch_cond (tree cond, tree switch_stmt)
1028 {
1029   tree orig_type = NULL;
1030   if (!processing_template_decl)
1031     {
1032       /* Convert the condition to an integer or enumeration type.  */
1033       cond = build_expr_type_conversion (WANT_INT | WANT_ENUM, cond, true);
1034       if (cond == NULL_TREE)
1035         {
1036           error ("switch quantity not an integer");
1037           cond = error_mark_node;
1038         }
1039       orig_type = TREE_TYPE (cond);
1040       if (cond != error_mark_node)
1041         {
1042           /* [stmt.switch]
1043
1044              Integral promotions are performed.  */
1045           cond = perform_integral_promotions (cond);
1046           cond = maybe_cleanup_point_expr (cond);
1047         }
1048     }
1049   if (check_for_bare_parameter_packs (cond))
1050     cond = error_mark_node;
1051   else if (!processing_template_decl && warn_sequence_point)
1052     verify_sequence_points (cond);
1053
1054   finish_cond (&SWITCH_STMT_COND (switch_stmt), cond);
1055   SWITCH_STMT_TYPE (switch_stmt) = orig_type;
1056   add_stmt (switch_stmt);
1057   push_switch (switch_stmt);
1058   SWITCH_STMT_BODY (switch_stmt) = push_stmt_list ();
1059 }
1060
1061 /* Finish the body of a switch-statement, which may be given by
1062    SWITCH_STMT.  The COND to switch on is indicated.  */
1063
1064 void
1065 finish_switch_stmt (tree switch_stmt)
1066 {
1067   tree scope;
1068
1069   SWITCH_STMT_BODY (switch_stmt) =
1070     pop_stmt_list (SWITCH_STMT_BODY (switch_stmt));
1071   pop_switch ();
1072
1073   scope = SWITCH_STMT_SCOPE (switch_stmt);
1074   SWITCH_STMT_SCOPE (switch_stmt) = NULL;
1075   add_stmt (do_poplevel (scope));
1076 }
1077
1078 /* Begin a try-block.  Returns a newly-created TRY_BLOCK if
1079    appropriate.  */
1080
1081 tree
1082 begin_try_block (void)
1083 {
1084   tree r = build_stmt (input_location, TRY_BLOCK, NULL_TREE, NULL_TREE);
1085   add_stmt (r);
1086   TRY_STMTS (r) = push_stmt_list ();
1087   return r;
1088 }
1089
1090 /* Likewise, for a function-try-block.  The block returned in
1091    *COMPOUND_STMT is an artificial outer scope, containing the
1092    function-try-block.  */
1093
1094 tree
1095 begin_function_try_block (tree *compound_stmt)
1096 {
1097   tree r;
1098   /* This outer scope does not exist in the C++ standard, but we need
1099      a place to put __FUNCTION__ and similar variables.  */
1100   *compound_stmt = begin_compound_stmt (0);
1101   r = begin_try_block ();
1102   FN_TRY_BLOCK_P (r) = 1;
1103   return r;
1104 }
1105
1106 /* Finish a try-block, which may be given by TRY_BLOCK.  */
1107
1108 void
1109 finish_try_block (tree try_block)
1110 {
1111   TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1112   TRY_HANDLERS (try_block) = push_stmt_list ();
1113 }
1114
1115 /* Finish the body of a cleanup try-block, which may be given by
1116    TRY_BLOCK.  */
1117
1118 void
1119 finish_cleanup_try_block (tree try_block)
1120 {
1121   TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1122 }
1123
1124 /* Finish an implicitly generated try-block, with a cleanup is given
1125    by CLEANUP.  */
1126
1127 void
1128 finish_cleanup (tree cleanup, tree try_block)
1129 {
1130   TRY_HANDLERS (try_block) = cleanup;
1131   CLEANUP_P (try_block) = 1;
1132 }
1133
1134 /* Likewise, for a function-try-block.  */
1135
1136 void
1137 finish_function_try_block (tree try_block)
1138 {
1139   finish_try_block (try_block);
1140   /* FIXME : something queer about CTOR_INITIALIZER somehow following
1141      the try block, but moving it inside.  */
1142   in_function_try_handler = 1;
1143 }
1144
1145 /* Finish a handler-sequence for a try-block, which may be given by
1146    TRY_BLOCK.  */
1147
1148 void
1149 finish_handler_sequence (tree try_block)
1150 {
1151   TRY_HANDLERS (try_block) = pop_stmt_list (TRY_HANDLERS (try_block));
1152   check_handlers (TRY_HANDLERS (try_block));
1153 }
1154
1155 /* Finish the handler-seq for a function-try-block, given by
1156    TRY_BLOCK.  COMPOUND_STMT is the outer block created by
1157    begin_function_try_block.  */
1158
1159 void
1160 finish_function_handler_sequence (tree try_block, tree compound_stmt)
1161 {
1162   in_function_try_handler = 0;
1163   finish_handler_sequence (try_block);
1164   finish_compound_stmt (compound_stmt);
1165 }
1166
1167 /* Begin a handler.  Returns a HANDLER if appropriate.  */
1168
1169 tree
1170 begin_handler (void)
1171 {
1172   tree r;
1173
1174   r = build_stmt (input_location, HANDLER, NULL_TREE, NULL_TREE);
1175   add_stmt (r);
1176
1177   /* Create a binding level for the eh_info and the exception object
1178      cleanup.  */
1179   HANDLER_BODY (r) = do_pushlevel (sk_catch);
1180
1181   return r;
1182 }
1183
1184 /* Finish the handler-parameters for a handler, which may be given by
1185    HANDLER.  DECL is the declaration for the catch parameter, or NULL
1186    if this is a `catch (...)' clause.  */
1187
1188 void
1189 finish_handler_parms (tree decl, tree handler)
1190 {
1191   tree type = NULL_TREE;
1192   if (processing_template_decl)
1193     {
1194       if (decl)
1195         {
1196           decl = pushdecl (decl);
1197           decl = push_template_decl (decl);
1198           HANDLER_PARMS (handler) = decl;
1199           type = TREE_TYPE (decl);
1200         }
1201     }
1202   else
1203     type = expand_start_catch_block (decl);
1204   HANDLER_TYPE (handler) = type;
1205 }
1206
1207 /* Finish a handler, which may be given by HANDLER.  The BLOCKs are
1208    the return value from the matching call to finish_handler_parms.  */
1209
1210 void
1211 finish_handler (tree handler)
1212 {
1213   if (!processing_template_decl)
1214     expand_end_catch_block ();
1215   HANDLER_BODY (handler) = do_poplevel (HANDLER_BODY (handler));
1216 }
1217
1218 /* Begin a compound statement.  FLAGS contains some bits that control the
1219    behavior and context.  If BCS_NO_SCOPE is set, the compound statement
1220    does not define a scope.  If BCS_FN_BODY is set, this is the outermost
1221    block of a function.  If BCS_TRY_BLOCK is set, this is the block
1222    created on behalf of a TRY statement.  Returns a token to be passed to
1223    finish_compound_stmt.  */
1224
1225 tree
1226 begin_compound_stmt (unsigned int flags)
1227 {
1228   tree r;
1229
1230   if (flags & BCS_NO_SCOPE)
1231     {
1232       r = push_stmt_list ();
1233       STATEMENT_LIST_NO_SCOPE (r) = 1;
1234
1235       /* Normally, we try hard to keep the BLOCK for a statement-expression.
1236          But, if it's a statement-expression with a scopeless block, there's
1237          nothing to keep, and we don't want to accidentally keep a block
1238          *inside* the scopeless block.  */
1239       keep_next_level (false);
1240     }
1241   else
1242     r = do_pushlevel (flags & BCS_TRY_BLOCK ? sk_try : sk_block);
1243
1244   /* When processing a template, we need to remember where the braces were,
1245      so that we can set up identical scopes when instantiating the template
1246      later.  BIND_EXPR is a handy candidate for this.
1247      Note that do_poplevel won't create a BIND_EXPR itself here (and thus
1248      result in nested BIND_EXPRs), since we don't build BLOCK nodes when
1249      processing templates.  */
1250   if (processing_template_decl)
1251     {
1252       r = build3 (BIND_EXPR, NULL, NULL, r, NULL);
1253       BIND_EXPR_TRY_BLOCK (r) = (flags & BCS_TRY_BLOCK) != 0;
1254       BIND_EXPR_BODY_BLOCK (r) = (flags & BCS_FN_BODY) != 0;
1255       TREE_SIDE_EFFECTS (r) = 1;
1256     }
1257
1258   return r;
1259 }
1260
1261 /* Finish a compound-statement, which is given by STMT.  */
1262
1263 void
1264 finish_compound_stmt (tree stmt)
1265 {
1266   if (TREE_CODE (stmt) == BIND_EXPR)
1267     {
1268       tree body = do_poplevel (BIND_EXPR_BODY (stmt));
1269       /* If the STATEMENT_LIST is empty and this BIND_EXPR isn't special,
1270          discard the BIND_EXPR so it can be merged with the containing
1271          STATEMENT_LIST.  */
1272       if (TREE_CODE (body) == STATEMENT_LIST
1273           && STATEMENT_LIST_HEAD (body) == NULL
1274           && !BIND_EXPR_BODY_BLOCK (stmt)
1275           && !BIND_EXPR_TRY_BLOCK (stmt))
1276         stmt = body;
1277       else
1278         BIND_EXPR_BODY (stmt) = body;
1279     }
1280   else if (STATEMENT_LIST_NO_SCOPE (stmt))
1281     stmt = pop_stmt_list (stmt);
1282   else
1283     {
1284       /* Destroy any ObjC "super" receivers that may have been
1285          created.  */
1286       objc_clear_super_receiver ();
1287
1288       stmt = do_poplevel (stmt);
1289     }
1290
1291   /* ??? See c_end_compound_stmt wrt statement expressions.  */
1292   add_stmt (stmt);
1293 }
1294
1295 /* Finish an asm-statement, whose components are a STRING, some
1296    OUTPUT_OPERANDS, some INPUT_OPERANDS, some CLOBBERS and some
1297    LABELS.  Also note whether the asm-statement should be
1298    considered volatile.  */
1299
1300 tree
1301 finish_asm_stmt (int volatile_p, tree string, tree output_operands,
1302                  tree input_operands, tree clobbers, tree labels)
1303 {
1304   tree r;
1305   tree t;
1306   int ninputs = list_length (input_operands);
1307   int noutputs = list_length (output_operands);
1308
1309   if (!processing_template_decl)
1310     {
1311       const char *constraint;
1312       const char **oconstraints;
1313       bool allows_mem, allows_reg, is_inout;
1314       tree operand;
1315       int i;
1316
1317       oconstraints = XALLOCAVEC (const char *, noutputs);
1318
1319       string = resolve_asm_operand_names (string, output_operands,
1320                                           input_operands, labels);
1321
1322       for (i = 0, t = output_operands; t; t = TREE_CHAIN (t), ++i)
1323         {
1324           operand = TREE_VALUE (t);
1325
1326           /* ??? Really, this should not be here.  Users should be using a
1327              proper lvalue, dammit.  But there's a long history of using
1328              casts in the output operands.  In cases like longlong.h, this
1329              becomes a primitive form of typechecking -- if the cast can be
1330              removed, then the output operand had a type of the proper width;
1331              otherwise we'll get an error.  Gross, but ...  */
1332           STRIP_NOPS (operand);
1333
1334           operand = mark_lvalue_use (operand);
1335
1336           if (!lvalue_or_else (operand, lv_asm, tf_warning_or_error))
1337             operand = error_mark_node;
1338
1339           if (operand != error_mark_node
1340               && (TREE_READONLY (operand)
1341                   || CP_TYPE_CONST_P (TREE_TYPE (operand))
1342                   /* Functions are not modifiable, even though they are
1343                      lvalues.  */
1344                   || TREE_CODE (TREE_TYPE (operand)) == FUNCTION_TYPE
1345                   || TREE_CODE (TREE_TYPE (operand)) == METHOD_TYPE
1346                   /* If it's an aggregate and any field is const, then it is
1347                      effectively const.  */
1348                   || (CLASS_TYPE_P (TREE_TYPE (operand))
1349                       && C_TYPE_FIELDS_READONLY (TREE_TYPE (operand)))))
1350             cxx_readonly_error (operand, lv_asm);
1351
1352           constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1353           oconstraints[i] = constraint;
1354
1355           if (parse_output_constraint (&constraint, i, ninputs, noutputs,
1356                                        &allows_mem, &allows_reg, &is_inout))
1357             {
1358               /* If the operand is going to end up in memory,
1359                  mark it addressable.  */
1360               if (!allows_reg && !cxx_mark_addressable (operand))
1361                 operand = error_mark_node;
1362             }
1363           else
1364             operand = error_mark_node;
1365
1366           TREE_VALUE (t) = operand;
1367         }
1368
1369       for (i = 0, t = input_operands; t; ++i, t = TREE_CHAIN (t))
1370         {
1371           constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1372           bool constraint_parsed
1373             = parse_input_constraint (&constraint, i, ninputs, noutputs, 0,   
1374                                       oconstraints, &allows_mem, &allows_reg);
1375           /* If the operand is going to end up in memory, don't call
1376              decay_conversion.  */
1377           if (constraint_parsed && !allows_reg && allows_mem)
1378             operand = mark_lvalue_use (TREE_VALUE (t));
1379           else
1380             operand = decay_conversion (TREE_VALUE (t), tf_warning_or_error);
1381
1382           /* If the type of the operand hasn't been determined (e.g.,
1383              because it involves an overloaded function), then issue
1384              an error message.  There's no context available to
1385              resolve the overloading.  */
1386           if (TREE_TYPE (operand) == unknown_type_node)
1387             {
1388               error ("type of asm operand %qE could not be determined",
1389                      TREE_VALUE (t));
1390               operand = error_mark_node;
1391             }
1392
1393           if (constraint_parsed)
1394             {
1395               /* If the operand is going to end up in memory,
1396                  mark it addressable.  */
1397               if (!allows_reg && allows_mem)
1398                 {
1399                   /* Strip the nops as we allow this case.  FIXME, this really
1400                      should be rejected or made deprecated.  */
1401                   STRIP_NOPS (operand);
1402                   if (!cxx_mark_addressable (operand))
1403                     operand = error_mark_node;
1404                 }
1405               else if (!allows_reg && !allows_mem)
1406                 {
1407                   /* If constraint allows neither register nor memory,
1408                      try harder to get a constant.  */
1409                   tree constop = maybe_constant_value (operand);
1410                   if (TREE_CONSTANT (constop))
1411                     operand = constop;
1412                 }
1413             }
1414           else
1415             operand = error_mark_node;
1416
1417           TREE_VALUE (t) = operand;
1418         }
1419     }
1420
1421   r = build_stmt (input_location, ASM_EXPR, string,
1422                   output_operands, input_operands,
1423                   clobbers, labels);
1424   ASM_VOLATILE_P (r) = volatile_p || noutputs == 0;
1425   r = maybe_cleanup_point_expr_void (r);
1426   return add_stmt (r);
1427 }
1428
1429 /* Finish a label with the indicated NAME.  Returns the new label.  */
1430
1431 tree
1432 finish_label_stmt (tree name)
1433 {
1434   tree decl = define_label (input_location, name);
1435
1436   if (decl == error_mark_node)
1437     return error_mark_node;
1438
1439   add_stmt (build_stmt (input_location, LABEL_EXPR, decl));
1440
1441   return decl;
1442 }
1443
1444 /* Finish a series of declarations for local labels.  G++ allows users
1445    to declare "local" labels, i.e., labels with scope.  This extension
1446    is useful when writing code involving statement-expressions.  */
1447
1448 void
1449 finish_label_decl (tree name)
1450 {
1451   if (!at_function_scope_p ())
1452     {
1453       error ("__label__ declarations are only allowed in function scopes");
1454       return;
1455     }
1456
1457   add_decl_expr (declare_local_label (name));
1458 }
1459
1460 /* When DECL goes out of scope, make sure that CLEANUP is executed.  */
1461
1462 void
1463 finish_decl_cleanup (tree decl, tree cleanup)
1464 {
1465   push_cleanup (decl, cleanup, false);
1466 }
1467
1468 /* If the current scope exits with an exception, run CLEANUP.  */
1469
1470 void
1471 finish_eh_cleanup (tree cleanup)
1472 {
1473   push_cleanup (NULL, cleanup, true);
1474 }
1475
1476 /* The MEM_INITS is a list of mem-initializers, in reverse of the
1477    order they were written by the user.  Each node is as for
1478    emit_mem_initializers.  */
1479
1480 void
1481 finish_mem_initializers (tree mem_inits)
1482 {
1483   /* Reorder the MEM_INITS so that they are in the order they appeared
1484      in the source program.  */
1485   mem_inits = nreverse (mem_inits);
1486
1487   if (processing_template_decl)
1488     {
1489       tree mem;
1490
1491       for (mem = mem_inits; mem; mem = TREE_CHAIN (mem))
1492         {
1493           /* If the TREE_PURPOSE is a TYPE_PACK_EXPANSION, skip the
1494              check for bare parameter packs in the TREE_VALUE, because
1495              any parameter packs in the TREE_VALUE have already been
1496              bound as part of the TREE_PURPOSE.  See
1497              make_pack_expansion for more information.  */
1498           if (TREE_CODE (TREE_PURPOSE (mem)) != TYPE_PACK_EXPANSION
1499               && check_for_bare_parameter_packs (TREE_VALUE (mem)))
1500             TREE_VALUE (mem) = error_mark_node;
1501         }
1502
1503       add_stmt (build_min_nt_loc (UNKNOWN_LOCATION,
1504                                   CTOR_INITIALIZER, mem_inits));
1505     }
1506   else
1507     emit_mem_initializers (mem_inits);
1508 }
1509
1510 /* Obfuscate EXPR if it looks like an id-expression or member access so
1511    that the call to finish_decltype in do_auto_deduction will give the
1512    right result.  */
1513
1514 tree
1515 force_paren_expr (tree expr)
1516 {
1517   /* This is only needed for decltype(auto) in C++14.  */
1518   if (cxx_dialect < cxx1y)
1519     return expr;
1520
1521   if (!DECL_P (expr) && TREE_CODE (expr) != COMPONENT_REF
1522       && TREE_CODE (expr) != SCOPE_REF)
1523     return expr;
1524
1525   if (processing_template_decl)
1526     expr = build1 (PAREN_EXPR, TREE_TYPE (expr), expr);
1527   else
1528     {
1529       cp_lvalue_kind kind = lvalue_kind (expr);
1530       if ((kind & ~clk_class) != clk_none)
1531         {
1532           tree type = unlowered_expr_type (expr);
1533           bool rval = !!(kind & clk_rvalueref);
1534           type = cp_build_reference_type (type, rval);
1535           expr = build_static_cast (type, expr, tf_warning_or_error);
1536         }
1537     }
1538
1539   return expr;
1540 }
1541
1542 /* Finish a parenthesized expression EXPR.  */
1543
1544 tree
1545 finish_parenthesized_expr (tree expr)
1546 {
1547   if (EXPR_P (expr))
1548     /* This inhibits warnings in c_common_truthvalue_conversion.  */
1549     TREE_NO_WARNING (expr) = 1;
1550
1551   if (TREE_CODE (expr) == OFFSET_REF
1552       || TREE_CODE (expr) == SCOPE_REF)
1553     /* [expr.unary.op]/3 The qualified id of a pointer-to-member must not be
1554        enclosed in parentheses.  */
1555     PTRMEM_OK_P (expr) = 0;
1556
1557   if (TREE_CODE (expr) == STRING_CST)
1558     PAREN_STRING_LITERAL_P (expr) = 1;
1559
1560   expr = force_paren_expr (expr);
1561
1562   return expr;
1563 }
1564
1565 /* Finish a reference to a non-static data member (DECL) that is not
1566    preceded by `.' or `->'.  */
1567
1568 tree
1569 finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
1570 {
1571   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
1572
1573   if (!object)
1574     {
1575       tree scope = qualifying_scope;
1576       if (scope == NULL_TREE)
1577         scope = context_for_name_lookup (decl);
1578       object = maybe_dummy_object (scope, NULL);
1579     }
1580
1581   object = maybe_resolve_dummy (object);
1582   if (object == error_mark_node)
1583     return error_mark_node;
1584
1585   /* DR 613: Can use non-static data members without an associated
1586      object in sizeof/decltype/alignof.  */
1587   if (is_dummy_object (object) && cp_unevaluated_operand == 0
1588       && (!processing_template_decl || !current_class_ref))
1589     {
1590       if (current_function_decl
1591           && DECL_STATIC_FUNCTION_P (current_function_decl))
1592         error ("invalid use of member %q+D in static member function", decl);
1593       else
1594         error ("invalid use of non-static data member %q+D", decl);
1595       error ("from this location");
1596
1597       return error_mark_node;
1598     }
1599
1600   if (current_class_ptr)
1601     TREE_USED (current_class_ptr) = 1;
1602   if (processing_template_decl && !qualifying_scope)
1603     {
1604       tree type = TREE_TYPE (decl);
1605
1606       if (TREE_CODE (type) == REFERENCE_TYPE)
1607         /* Quals on the object don't matter.  */;
1608       else if (PACK_EXPANSION_P (type))
1609         /* Don't bother trying to represent this.  */
1610         type = NULL_TREE;
1611       else
1612         {
1613           /* Set the cv qualifiers.  */
1614           int quals = cp_type_quals (TREE_TYPE (object));
1615
1616           if (DECL_MUTABLE_P (decl))
1617             quals &= ~TYPE_QUAL_CONST;
1618
1619           quals |= cp_type_quals (TREE_TYPE (decl));
1620           type = cp_build_qualified_type (type, quals);
1621         }
1622
1623       return (convert_from_reference
1624               (build_min (COMPONENT_REF, type, object, decl, NULL_TREE)));
1625     }
1626   /* If PROCESSING_TEMPLATE_DECL is nonzero here, then
1627      QUALIFYING_SCOPE is also non-null.  Wrap this in a SCOPE_REF
1628      for now.  */
1629   else if (processing_template_decl)
1630     return build_qualified_name (TREE_TYPE (decl),
1631                                  qualifying_scope,
1632                                  decl,
1633                                  /*template_p=*/false);
1634   else
1635     {
1636       tree access_type = TREE_TYPE (object);
1637
1638       perform_or_defer_access_check (TYPE_BINFO (access_type), decl,
1639                                      decl, tf_warning_or_error);
1640
1641       /* If the data member was named `C::M', convert `*this' to `C'
1642          first.  */
1643       if (qualifying_scope)
1644         {
1645           tree binfo = NULL_TREE;
1646           object = build_scoped_ref (object, qualifying_scope,
1647                                      &binfo);
1648         }
1649
1650       return build_class_member_access_expr (object, decl,
1651                                              /*access_path=*/NULL_TREE,
1652                                              /*preserve_reference=*/false,
1653                                              tf_warning_or_error);
1654     }
1655 }
1656
1657 /* If we are currently parsing a template and we encountered a typedef
1658    TYPEDEF_DECL that is being accessed though CONTEXT, this function
1659    adds the typedef to a list tied to the current template.
1660    At template instantiation time, that list is walked and access check
1661    performed for each typedef.
1662    LOCATION is the location of the usage point of TYPEDEF_DECL.  */
1663
1664 void
1665 add_typedef_to_current_template_for_access_check (tree typedef_decl,
1666                                                   tree context,
1667                                                   location_t location)
1668 {
1669     tree template_info = NULL;
1670     tree cs = current_scope ();
1671
1672     if (!is_typedef_decl (typedef_decl)
1673         || !context
1674         || !CLASS_TYPE_P (context)
1675         || !cs)
1676       return;
1677
1678     if (CLASS_TYPE_P (cs) || TREE_CODE (cs) == FUNCTION_DECL)
1679       template_info = get_template_info (cs);
1680
1681     if (template_info
1682         && TI_TEMPLATE (template_info)
1683         && !currently_open_class (context))
1684       append_type_to_template_for_access_check (cs, typedef_decl,
1685                                                 context, location);
1686 }
1687
1688 /* DECL was the declaration to which a qualified-id resolved.  Issue
1689    an error message if it is not accessible.  If OBJECT_TYPE is
1690    non-NULL, we have just seen `x->' or `x.' and OBJECT_TYPE is the
1691    type of `*x', or `x', respectively.  If the DECL was named as
1692    `A::B' then NESTED_NAME_SPECIFIER is `A'.  */
1693
1694 void
1695 check_accessibility_of_qualified_id (tree decl,
1696                                      tree object_type,
1697                                      tree nested_name_specifier)
1698 {
1699   tree scope;
1700   tree qualifying_type = NULL_TREE;
1701
1702   /* If we are parsing a template declaration and if decl is a typedef,
1703      add it to a list tied to the template.
1704      At template instantiation time, that list will be walked and
1705      access check performed.  */
1706   add_typedef_to_current_template_for_access_check (decl,
1707                                                     nested_name_specifier
1708                                                     ? nested_name_specifier
1709                                                     : DECL_CONTEXT (decl),
1710                                                     input_location);
1711
1712   /* If we're not checking, return immediately.  */
1713   if (deferred_access_no_check)
1714     return;
1715
1716   /* Determine the SCOPE of DECL.  */
1717   scope = context_for_name_lookup (decl);
1718   /* If the SCOPE is not a type, then DECL is not a member.  */
1719   if (!TYPE_P (scope))
1720     return;
1721   /* Compute the scope through which DECL is being accessed.  */
1722   if (object_type
1723       /* OBJECT_TYPE might not be a class type; consider:
1724
1725            class A { typedef int I; };
1726            I *p;
1727            p->A::I::~I();
1728
1729          In this case, we will have "A::I" as the DECL, but "I" as the
1730          OBJECT_TYPE.  */
1731       && CLASS_TYPE_P (object_type)
1732       && DERIVED_FROM_P (scope, object_type))
1733     /* If we are processing a `->' or `.' expression, use the type of the
1734        left-hand side.  */
1735     qualifying_type = object_type;
1736   else if (nested_name_specifier)
1737     {
1738       /* If the reference is to a non-static member of the
1739          current class, treat it as if it were referenced through
1740          `this'.  */
1741       if (DECL_NONSTATIC_MEMBER_P (decl)
1742           && current_class_ptr
1743           && DERIVED_FROM_P (scope, current_class_type))
1744         qualifying_type = current_class_type;
1745       /* Otherwise, use the type indicated by the
1746          nested-name-specifier.  */
1747       else
1748         qualifying_type = nested_name_specifier;
1749     }
1750   else
1751     /* Otherwise, the name must be from the current class or one of
1752        its bases.  */
1753     qualifying_type = currently_open_derived_class (scope);
1754
1755   if (qualifying_type 
1756       /* It is possible for qualifying type to be a TEMPLATE_TYPE_PARM
1757          or similar in a default argument value.  */
1758       && CLASS_TYPE_P (qualifying_type)
1759       && !dependent_type_p (qualifying_type))
1760     perform_or_defer_access_check (TYPE_BINFO (qualifying_type), decl,
1761                                    decl, tf_warning_or_error);
1762 }
1763
1764 /* EXPR is the result of a qualified-id.  The QUALIFYING_CLASS was the
1765    class named to the left of the "::" operator.  DONE is true if this
1766    expression is a complete postfix-expression; it is false if this
1767    expression is followed by '->', '[', '(', etc.  ADDRESS_P is true
1768    iff this expression is the operand of '&'.  TEMPLATE_P is true iff
1769    the qualified-id was of the form "A::template B".  TEMPLATE_ARG_P
1770    is true iff this qualified name appears as a template argument.  */
1771
1772 tree
1773 finish_qualified_id_expr (tree qualifying_class,
1774                           tree expr,
1775                           bool done,
1776                           bool address_p,
1777                           bool template_p,
1778                           bool template_arg_p,
1779                           tsubst_flags_t complain)
1780 {
1781   gcc_assert (TYPE_P (qualifying_class));
1782
1783   if (error_operand_p (expr))
1784     return error_mark_node;
1785
1786   if ((DECL_P (expr) || BASELINK_P (expr))
1787       && !mark_used (expr, complain))
1788     return error_mark_node;
1789
1790   if (template_p)
1791     check_template_keyword (expr);
1792
1793   /* If EXPR occurs as the operand of '&', use special handling that
1794      permits a pointer-to-member.  */
1795   if (address_p && done)
1796     {
1797       if (TREE_CODE (expr) == SCOPE_REF)
1798         expr = TREE_OPERAND (expr, 1);
1799       expr = build_offset_ref (qualifying_class, expr,
1800                                /*address_p=*/true, complain);
1801       return expr;
1802     }
1803
1804   /* No need to check access within an enum.  */
1805   if (TREE_CODE (qualifying_class) == ENUMERAL_TYPE)
1806     return expr;
1807
1808   /* Within the scope of a class, turn references to non-static
1809      members into expression of the form "this->...".  */
1810   if (template_arg_p)
1811     /* But, within a template argument, we do not want make the
1812        transformation, as there is no "this" pointer.  */
1813     ;
1814   else if (TREE_CODE (expr) == FIELD_DECL)
1815     {
1816       push_deferring_access_checks (dk_no_check);
1817       expr = finish_non_static_data_member (expr, NULL_TREE,
1818                                             qualifying_class);
1819       pop_deferring_access_checks ();
1820     }
1821   else if (BASELINK_P (expr) && !processing_template_decl)
1822     {
1823       /* See if any of the functions are non-static members.  */
1824       /* If so, the expression may be relative to 'this'.  */
1825       if (!shared_member_p (expr)
1826           && current_class_ptr
1827           && DERIVED_FROM_P (qualifying_class,
1828                              current_nonlambda_class_type ()))
1829         expr = (build_class_member_access_expr
1830                 (maybe_dummy_object (qualifying_class, NULL),
1831                  expr,
1832                  BASELINK_ACCESS_BINFO (expr),
1833                  /*preserve_reference=*/false,
1834                  complain));
1835       else if (done)
1836         /* The expression is a qualified name whose address is not
1837            being taken.  */
1838         expr = build_offset_ref (qualifying_class, expr, /*address_p=*/false,
1839                                  complain);
1840     }
1841   else if (BASELINK_P (expr))
1842     ;
1843   else
1844     {
1845       /* In a template, return a SCOPE_REF for most qualified-ids
1846          so that we can check access at instantiation time.  But if
1847          we're looking at a member of the current instantiation, we
1848          know we have access and building up the SCOPE_REF confuses
1849          non-type template argument handling.  */
1850       if (processing_template_decl
1851           && !currently_open_class (qualifying_class))
1852         expr = build_qualified_name (TREE_TYPE (expr),
1853                                      qualifying_class, expr,
1854                                      template_p);
1855
1856       expr = convert_from_reference (expr);
1857     }
1858
1859   return expr;
1860 }
1861
1862 /* Begin a statement-expression.  The value returned must be passed to
1863    finish_stmt_expr.  */
1864
1865 tree
1866 begin_stmt_expr (void)
1867 {
1868   return push_stmt_list ();
1869 }
1870
1871 /* Process the final expression of a statement expression. EXPR can be
1872    NULL, if the final expression is empty.  Return a STATEMENT_LIST
1873    containing all the statements in the statement-expression, or
1874    ERROR_MARK_NODE if there was an error.  */
1875
1876 tree
1877 finish_stmt_expr_expr (tree expr, tree stmt_expr)
1878 {
1879   if (error_operand_p (expr))
1880     {
1881       /* The type of the statement-expression is the type of the last
1882          expression.  */
1883       TREE_TYPE (stmt_expr) = error_mark_node;
1884       return error_mark_node;
1885     }
1886
1887   /* If the last statement does not have "void" type, then the value
1888      of the last statement is the value of the entire expression.  */
1889   if (expr)
1890     {
1891       tree type = TREE_TYPE (expr);
1892
1893       if (processing_template_decl)
1894         {
1895           expr = build_stmt (input_location, EXPR_STMT, expr);
1896           expr = add_stmt (expr);
1897           /* Mark the last statement so that we can recognize it as such at
1898              template-instantiation time.  */
1899           EXPR_STMT_STMT_EXPR_RESULT (expr) = 1;
1900         }
1901       else if (VOID_TYPE_P (type))
1902         {
1903           /* Just treat this like an ordinary statement.  */
1904           expr = finish_expr_stmt (expr);
1905         }
1906       else
1907         {
1908           /* It actually has a value we need to deal with.  First, force it
1909              to be an rvalue so that we won't need to build up a copy
1910              constructor call later when we try to assign it to something.  */
1911           expr = force_rvalue (expr, tf_warning_or_error);
1912           if (error_operand_p (expr))
1913             return error_mark_node;
1914
1915           /* Update for array-to-pointer decay.  */
1916           type = TREE_TYPE (expr);
1917
1918           /* Wrap it in a CLEANUP_POINT_EXPR and add it to the list like a
1919              normal statement, but don't convert to void or actually add
1920              the EXPR_STMT.  */
1921           if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
1922             expr = maybe_cleanup_point_expr (expr);
1923           add_stmt (expr);
1924         }
1925
1926       /* The type of the statement-expression is the type of the last
1927          expression.  */
1928       TREE_TYPE (stmt_expr) = type;
1929     }
1930
1931   return stmt_expr;
1932 }
1933
1934 /* Finish a statement-expression.  EXPR should be the value returned
1935    by the previous begin_stmt_expr.  Returns an expression
1936    representing the statement-expression.  */
1937
1938 tree
1939 finish_stmt_expr (tree stmt_expr, bool has_no_scope)
1940 {
1941   tree type;
1942   tree result;
1943
1944   if (error_operand_p (stmt_expr))
1945     {
1946       pop_stmt_list (stmt_expr);
1947       return error_mark_node;
1948     }
1949
1950   gcc_assert (TREE_CODE (stmt_expr) == STATEMENT_LIST);
1951
1952   type = TREE_TYPE (stmt_expr);
1953   result = pop_stmt_list (stmt_expr);
1954   TREE_TYPE (result) = type;
1955
1956   if (processing_template_decl)
1957     {
1958       result = build_min (STMT_EXPR, type, result);
1959       TREE_SIDE_EFFECTS (result) = 1;
1960       STMT_EXPR_NO_SCOPE (result) = has_no_scope;
1961     }
1962   else if (CLASS_TYPE_P (type))
1963     {
1964       /* Wrap the statement-expression in a TARGET_EXPR so that the
1965          temporary object created by the final expression is destroyed at
1966          the end of the full-expression containing the
1967          statement-expression.  */
1968       result = force_target_expr (type, result, tf_warning_or_error);
1969     }
1970
1971   return result;
1972 }
1973
1974 /* Returns the expression which provides the value of STMT_EXPR.  */
1975
1976 tree
1977 stmt_expr_value_expr (tree stmt_expr)
1978 {
1979   tree t = STMT_EXPR_STMT (stmt_expr);
1980
1981   if (TREE_CODE (t) == BIND_EXPR)
1982     t = BIND_EXPR_BODY (t);
1983
1984   if (TREE_CODE (t) == STATEMENT_LIST && STATEMENT_LIST_TAIL (t))
1985     t = STATEMENT_LIST_TAIL (t)->stmt;
1986
1987   if (TREE_CODE (t) == EXPR_STMT)
1988     t = EXPR_STMT_EXPR (t);
1989
1990   return t;
1991 }
1992
1993 /* Return TRUE iff EXPR_STMT is an empty list of
1994    expression statements.  */
1995
1996 bool
1997 empty_expr_stmt_p (tree expr_stmt)
1998 {
1999   tree body = NULL_TREE;
2000
2001   if (expr_stmt == void_zero_node)
2002     return true;
2003
2004   if (expr_stmt)
2005     {
2006       if (TREE_CODE (expr_stmt) == EXPR_STMT)
2007         body = EXPR_STMT_EXPR (expr_stmt);
2008       else if (TREE_CODE (expr_stmt) == STATEMENT_LIST)
2009         body = expr_stmt;
2010     }
2011
2012   if (body)
2013     {
2014       if (TREE_CODE (body) == STATEMENT_LIST)
2015         return tsi_end_p (tsi_start (body));
2016       else
2017         return empty_expr_stmt_p (body);
2018     }
2019   return false;
2020 }
2021
2022 /* Perform Koenig lookup.  FN is the postfix-expression representing
2023    the function (or functions) to call; ARGS are the arguments to the
2024    call; if INCLUDE_STD then the `std' namespace is automatically
2025    considered an associated namespace (used in range-based for loops).
2026    Returns the functions to be considered by overload resolution.  */
2027
2028 tree
2029 perform_koenig_lookup (tree fn, vec<tree, va_gc> *args, bool include_std,
2030                        tsubst_flags_t complain)
2031 {
2032   tree identifier = NULL_TREE;
2033   tree functions = NULL_TREE;
2034   tree tmpl_args = NULL_TREE;
2035   bool template_id = false;
2036
2037   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2038     {
2039       /* Use a separate flag to handle null args.  */
2040       template_id = true;
2041       tmpl_args = TREE_OPERAND (fn, 1);
2042       fn = TREE_OPERAND (fn, 0);
2043     }
2044
2045   /* Find the name of the overloaded function.  */
2046   if (identifier_p (fn))
2047     identifier = fn;
2048   else if (is_overloaded_fn (fn))
2049     {
2050       functions = fn;
2051       identifier = DECL_NAME (get_first_fn (functions));
2052     }
2053   else if (DECL_P (fn))
2054     {
2055       functions = fn;
2056       identifier = DECL_NAME (fn);
2057     }
2058
2059   /* A call to a namespace-scope function using an unqualified name.
2060
2061      Do Koenig lookup -- unless any of the arguments are
2062      type-dependent.  */
2063   if (!any_type_dependent_arguments_p (args)
2064       && !any_dependent_template_arguments_p (tmpl_args))
2065     {
2066       fn = lookup_arg_dependent (identifier, functions, args, include_std);
2067       if (!fn)
2068         {
2069           /* The unqualified name could not be resolved.  */
2070           if (complain)
2071             fn = unqualified_fn_lookup_error (identifier);
2072           else
2073             fn = identifier;
2074         }
2075     }
2076
2077   if (fn && template_id)
2078     fn = build2 (TEMPLATE_ID_EXPR, unknown_type_node, fn, tmpl_args);
2079   
2080   return fn;
2081 }
2082
2083 /* Generate an expression for `FN (ARGS)'.  This may change the
2084    contents of ARGS.
2085
2086    If DISALLOW_VIRTUAL is true, the call to FN will be not generated
2087    as a virtual call, even if FN is virtual.  (This flag is set when
2088    encountering an expression where the function name is explicitly
2089    qualified.  For example a call to `X::f' never generates a virtual
2090    call.)
2091
2092    Returns code for the call.  */
2093
2094 tree
2095 finish_call_expr (tree fn, vec<tree, va_gc> **args, bool disallow_virtual,
2096                   bool koenig_p, tsubst_flags_t complain)
2097 {
2098   tree result;
2099   tree orig_fn;
2100   vec<tree, va_gc> *orig_args = NULL;
2101
2102   if (fn == error_mark_node)
2103     return error_mark_node;
2104
2105   gcc_assert (!TYPE_P (fn));
2106
2107   orig_fn = fn;
2108
2109   if (processing_template_decl)
2110     {
2111       /* If the call expression is dependent, build a CALL_EXPR node
2112          with no type; type_dependent_expression_p recognizes
2113          expressions with no type as being dependent.  */
2114       if (type_dependent_expression_p (fn)
2115           || any_type_dependent_arguments_p (*args)
2116           /* For a non-static member function that doesn't have an
2117              explicit object argument, we need to specifically
2118              test the type dependency of the "this" pointer because it
2119              is not included in *ARGS even though it is considered to
2120              be part of the list of arguments.  Note that this is
2121              related to CWG issues 515 and 1005.  */
2122           || (TREE_CODE (fn) != COMPONENT_REF
2123               && non_static_member_function_p (fn)
2124               && current_class_ref
2125               && type_dependent_expression_p (current_class_ref)))
2126         {
2127           result = build_nt_call_vec (fn, *args);
2128           SET_EXPR_LOCATION (result, EXPR_LOC_OR_HERE (fn));
2129           KOENIG_LOOKUP_P (result) = koenig_p;
2130           if (cfun)
2131             {
2132               do
2133                 {
2134                   tree fndecl = OVL_CURRENT (fn);
2135                   if (TREE_CODE (fndecl) != FUNCTION_DECL
2136                       || !TREE_THIS_VOLATILE (fndecl))
2137                     break;
2138                   fn = OVL_NEXT (fn);
2139                 }
2140               while (fn);
2141               if (!fn)
2142                 current_function_returns_abnormally = 1;
2143             }
2144           return result;
2145         }
2146       orig_args = make_tree_vector_copy (*args);
2147       if (!BASELINK_P (fn)
2148           && TREE_CODE (fn) != PSEUDO_DTOR_EXPR
2149           && TREE_TYPE (fn) != unknown_type_node)
2150         fn = build_non_dependent_expr (fn);
2151       make_args_non_dependent (*args);
2152     }
2153
2154   if (TREE_CODE (fn) == COMPONENT_REF)
2155     {
2156       tree member = TREE_OPERAND (fn, 1);
2157       if (BASELINK_P (member))
2158         {
2159           tree object = TREE_OPERAND (fn, 0);
2160           return build_new_method_call (object, member,
2161                                         args, NULL_TREE,
2162                                         (disallow_virtual
2163                                          ? LOOKUP_NORMAL | LOOKUP_NONVIRTUAL
2164                                          : LOOKUP_NORMAL),
2165                                         /*fn_p=*/NULL,
2166                                         complain);
2167         }
2168     }
2169
2170   if (is_overloaded_fn (fn))
2171     fn = baselink_for_fns (fn);
2172
2173   result = NULL_TREE;
2174   if (BASELINK_P (fn))
2175     {
2176       tree object;
2177
2178       /* A call to a member function.  From [over.call.func]:
2179
2180            If the keyword this is in scope and refers to the class of
2181            that member function, or a derived class thereof, then the
2182            function call is transformed into a qualified function call
2183            using (*this) as the postfix-expression to the left of the
2184            . operator.... [Otherwise] a contrived object of type T
2185            becomes the implied object argument.
2186
2187         In this situation:
2188
2189           struct A { void f(); };
2190           struct B : public A {};
2191           struct C : public A { void g() { B::f(); }};
2192
2193         "the class of that member function" refers to `A'.  But 11.2
2194         [class.access.base] says that we need to convert 'this' to B* as
2195         part of the access, so we pass 'B' to maybe_dummy_object.  */
2196
2197       object = maybe_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
2198                                    NULL);
2199
2200       if (processing_template_decl)
2201         {
2202           if (type_dependent_expression_p (object))
2203             {
2204               tree ret = build_nt_call_vec (orig_fn, orig_args);
2205               release_tree_vector (orig_args);
2206               return ret;
2207             }
2208           object = build_non_dependent_expr (object);
2209         }
2210
2211       result = build_new_method_call (object, fn, args, NULL_TREE,
2212                                       (disallow_virtual
2213                                        ? LOOKUP_NORMAL|LOOKUP_NONVIRTUAL
2214                                        : LOOKUP_NORMAL),
2215                                       /*fn_p=*/NULL,
2216                                       complain);
2217     }
2218   else if (is_overloaded_fn (fn))
2219     {
2220       /* If the function is an overloaded builtin, resolve it.  */
2221       if (TREE_CODE (fn) == FUNCTION_DECL
2222           && (DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL
2223               || DECL_BUILT_IN_CLASS (fn) == BUILT_IN_MD))
2224         result = resolve_overloaded_builtin (input_location, fn, *args);
2225
2226       if (!result)
2227         {
2228           if (warn_sizeof_pointer_memaccess
2229               && !vec_safe_is_empty (*args)
2230               && !processing_template_decl)
2231             {
2232               location_t sizeof_arg_loc[3];
2233               tree sizeof_arg[3];
2234               unsigned int i;
2235               for (i = 0; i < 3; i++)
2236                 {
2237                   tree t;
2238
2239                   sizeof_arg_loc[i] = UNKNOWN_LOCATION;
2240                   sizeof_arg[i] = NULL_TREE;
2241                   if (i >= (*args)->length ())
2242                     continue;
2243                   t = (**args)[i];
2244                   if (TREE_CODE (t) != SIZEOF_EXPR)
2245                     continue;
2246                   if (SIZEOF_EXPR_TYPE_P (t))
2247                     sizeof_arg[i] = TREE_TYPE (TREE_OPERAND (t, 0));
2248                   else
2249                     sizeof_arg[i] = TREE_OPERAND (t, 0);
2250                   sizeof_arg_loc[i] = EXPR_LOCATION (t);
2251                 }
2252               sizeof_pointer_memaccess_warning
2253                 (sizeof_arg_loc, fn, *args,
2254                  sizeof_arg, same_type_ignoring_top_level_qualifiers_p);
2255             }
2256
2257           /* A call to a namespace-scope function.  */
2258           result = build_new_function_call (fn, args, koenig_p, complain);
2259         }
2260     }
2261   else if (TREE_CODE (fn) == PSEUDO_DTOR_EXPR)
2262     {
2263       if (!vec_safe_is_empty (*args))
2264         error ("arguments to destructor are not allowed");
2265       /* Mark the pseudo-destructor call as having side-effects so
2266          that we do not issue warnings about its use.  */
2267       result = build1 (NOP_EXPR,
2268                        void_type_node,
2269                        TREE_OPERAND (fn, 0));
2270       TREE_SIDE_EFFECTS (result) = 1;
2271     }
2272   else if (CLASS_TYPE_P (TREE_TYPE (fn)))
2273     /* If the "function" is really an object of class type, it might
2274        have an overloaded `operator ()'.  */
2275     result = build_op_call (fn, args, complain);
2276
2277   if (!result)
2278     /* A call where the function is unknown.  */
2279     result = cp_build_function_call_vec (fn, args, complain);
2280
2281   if (processing_template_decl && result != error_mark_node)
2282     {
2283       if (INDIRECT_REF_P (result))
2284         result = TREE_OPERAND (result, 0);
2285       result = build_call_vec (TREE_TYPE (result), orig_fn, orig_args);
2286       SET_EXPR_LOCATION (result, input_location);
2287       KOENIG_LOOKUP_P (result) = koenig_p;
2288       release_tree_vector (orig_args);
2289       result = convert_from_reference (result);
2290     }
2291
2292   if (koenig_p)
2293     {
2294       /* Free garbage OVERLOADs from arg-dependent lookup.  */
2295       tree next = NULL_TREE;
2296       for (fn = orig_fn;
2297            fn && TREE_CODE (fn) == OVERLOAD && OVL_ARG_DEPENDENT (fn);
2298            fn = next)
2299         {
2300           if (processing_template_decl)
2301             /* In a template, we'll re-use them at instantiation time.  */
2302             OVL_ARG_DEPENDENT (fn) = false;
2303           else
2304             {
2305               next = OVL_CHAIN (fn);
2306               ggc_free (fn);
2307             }
2308         }
2309     }
2310
2311   return result;
2312 }
2313
2314 /* Finish a call to a postfix increment or decrement or EXPR.  (Which
2315    is indicated by CODE, which should be POSTINCREMENT_EXPR or
2316    POSTDECREMENT_EXPR.)  */
2317
2318 tree
2319 finish_increment_expr (tree expr, enum tree_code code)
2320 {
2321   return build_x_unary_op (input_location, code, expr, tf_warning_or_error);
2322 }
2323
2324 /* Finish a use of `this'.  Returns an expression for `this'.  */
2325
2326 tree
2327 finish_this_expr (void)
2328 {
2329   tree result;
2330
2331   if (current_class_ptr)
2332     {
2333       tree type = TREE_TYPE (current_class_ref);
2334
2335       /* In a lambda expression, 'this' refers to the captured 'this'.  */
2336       if (LAMBDA_TYPE_P (type))
2337         result = lambda_expr_this_capture (CLASSTYPE_LAMBDA_EXPR (type));
2338       else
2339         result = current_class_ptr;
2340     }
2341   else if (current_function_decl
2342            && DECL_STATIC_FUNCTION_P (current_function_decl))
2343     {
2344       error ("%<this%> is unavailable for static member functions");
2345       result = error_mark_node;
2346     }
2347   else
2348     {
2349       if (current_function_decl)
2350         error ("invalid use of %<this%> in non-member function");
2351       else
2352         error ("invalid use of %<this%> at top level");
2353       result = error_mark_node;
2354     }
2355
2356   /* The keyword 'this' is a prvalue expression.  */
2357   result = rvalue (result);
2358
2359   return result;
2360 }
2361
2362 /* Finish a pseudo-destructor expression.  If SCOPE is NULL, the
2363    expression was of the form `OBJECT.~DESTRUCTOR' where DESTRUCTOR is
2364    the TYPE for the type given.  If SCOPE is non-NULL, the expression
2365    was of the form `OBJECT.SCOPE::~DESTRUCTOR'.  */
2366
2367 tree
2368 finish_pseudo_destructor_expr (tree object, tree scope, tree destructor,
2369                                location_t loc)
2370 {
2371   if (object == error_mark_node || destructor == error_mark_node)
2372     return error_mark_node;
2373
2374   gcc_assert (TYPE_P (destructor));
2375
2376   if (!processing_template_decl)
2377     {
2378       if (scope == error_mark_node)
2379         {
2380           error_at (loc, "invalid qualifying scope in pseudo-destructor name");
2381           return error_mark_node;
2382         }
2383       if (is_auto (destructor))
2384         destructor = TREE_TYPE (object);
2385       if (scope && TYPE_P (scope) && !check_dtor_name (scope, destructor))
2386         {
2387           error_at (loc,
2388                     "qualified type %qT does not match destructor name ~%qT",
2389                     scope, destructor);
2390           return error_mark_node;
2391         }
2392
2393
2394       /* [expr.pseudo] says both:
2395
2396            The type designated by the pseudo-destructor-name shall be
2397            the same as the object type.
2398
2399          and:
2400
2401            The cv-unqualified versions of the object type and of the
2402            type designated by the pseudo-destructor-name shall be the
2403            same type.
2404
2405          We implement the more generous second sentence, since that is
2406          what most other compilers do.  */
2407       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (object),
2408                                                       destructor))
2409         {
2410           error_at (loc, "%qE is not of type %qT", object, destructor);
2411           return error_mark_node;
2412         }
2413     }
2414
2415   return build3_loc (loc, PSEUDO_DTOR_EXPR, void_type_node, object,
2416                      scope, destructor);
2417 }
2418
2419 /* Finish an expression of the form CODE EXPR.  */
2420
2421 tree
2422 finish_unary_op_expr (location_t loc, enum tree_code code, tree expr,
2423                       tsubst_flags_t complain)
2424 {
2425   tree result = build_x_unary_op (loc, code, expr, complain);
2426   if ((complain & tf_warning)
2427       && TREE_OVERFLOW_P (result) && !TREE_OVERFLOW_P (expr))
2428     overflow_warning (input_location, result);
2429
2430   return result;
2431 }
2432
2433 /* Finish a compound-literal expression.  TYPE is the type to which
2434    the CONSTRUCTOR in COMPOUND_LITERAL is being cast.  */
2435
2436 tree
2437 finish_compound_literal (tree type, tree compound_literal,
2438                          tsubst_flags_t complain)
2439 {
2440   if (type == error_mark_node)
2441     return error_mark_node;
2442
2443   if (TREE_CODE (type) == REFERENCE_TYPE)
2444     {
2445       compound_literal
2446         = finish_compound_literal (TREE_TYPE (type), compound_literal,
2447                                    complain);
2448       return cp_build_c_cast (type, compound_literal, complain);
2449     }
2450
2451   if (!TYPE_OBJ_P (type))
2452     {
2453       if (complain & tf_error)
2454         error ("compound literal of non-object type %qT", type);
2455       return error_mark_node;
2456     }
2457
2458   if (processing_template_decl)
2459     {
2460       TREE_TYPE (compound_literal) = type;
2461       /* Mark the expression as a compound literal.  */
2462       TREE_HAS_CONSTRUCTOR (compound_literal) = 1;
2463       return compound_literal;
2464     }
2465
2466   type = complete_type (type);
2467
2468   if (TYPE_NON_AGGREGATE_CLASS (type))
2469     {
2470       /* Trying to deal with a CONSTRUCTOR instead of a TREE_LIST
2471          everywhere that deals with function arguments would be a pain, so
2472          just wrap it in a TREE_LIST.  The parser set a flag so we know
2473          that it came from T{} rather than T({}).  */
2474       CONSTRUCTOR_IS_DIRECT_INIT (compound_literal) = 1;
2475       compound_literal = build_tree_list (NULL_TREE, compound_literal);
2476       return build_functional_cast (type, compound_literal, complain);
2477     }
2478
2479   if (TREE_CODE (type) == ARRAY_TYPE
2480       && check_array_initializer (NULL_TREE, type, compound_literal))
2481     return error_mark_node;
2482   compound_literal = reshape_init (type, compound_literal, complain);
2483   if (SCALAR_TYPE_P (type)
2484       && !BRACE_ENCLOSED_INITIALIZER_P (compound_literal)
2485       && (complain & tf_warning_or_error))
2486     check_narrowing (type, compound_literal);
2487   if (TREE_CODE (type) == ARRAY_TYPE
2488       && TYPE_DOMAIN (type) == NULL_TREE)
2489     {
2490       cp_complete_array_type_or_error (&type, compound_literal,
2491                                        false, complain);
2492       if (type == error_mark_node)
2493         return error_mark_node;
2494     }
2495   compound_literal = digest_init (type, compound_literal, complain);
2496   if (TREE_CODE (compound_literal) == CONSTRUCTOR)
2497     TREE_HAS_CONSTRUCTOR (compound_literal) = true;
2498   /* Put static/constant array temporaries in static variables, but always
2499      represent class temporaries with TARGET_EXPR so we elide copies.  */
2500   if ((!at_function_scope_p () || CP_TYPE_CONST_P (type))
2501       && TREE_CODE (type) == ARRAY_TYPE
2502       && !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
2503       && initializer_constant_valid_p (compound_literal, type))
2504     {
2505       tree decl = create_temporary_var (type);
2506       DECL_INITIAL (decl) = compound_literal;
2507       TREE_STATIC (decl) = 1;
2508       if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
2509         {
2510           /* 5.19 says that a constant expression can include an
2511              lvalue-rvalue conversion applied to "a glvalue of literal type
2512              that refers to a non-volatile temporary object initialized
2513              with a constant expression".  Rather than try to communicate
2514              that this VAR_DECL is a temporary, just mark it constexpr.  */
2515           DECL_DECLARED_CONSTEXPR_P (decl) = true;
2516           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = true;
2517           TREE_CONSTANT (decl) = true;
2518         }
2519       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
2520       decl = pushdecl_top_level (decl);
2521       DECL_NAME (decl) = make_anon_name ();
2522       SET_DECL_ASSEMBLER_NAME (decl, DECL_NAME (decl));
2523       return decl;
2524     }
2525   else
2526     return get_target_expr_sfinae (compound_literal, complain);
2527 }
2528
2529 /* Return the declaration for the function-name variable indicated by
2530    ID.  */
2531
2532 tree
2533 finish_fname (tree id)
2534 {
2535   tree decl;
2536
2537   decl = fname_decl (input_location, C_RID_CODE (id), id);
2538   if (processing_template_decl && current_function_decl)
2539     decl = DECL_NAME (decl);
2540   return decl;
2541 }
2542
2543 /* Finish a translation unit.  */
2544
2545 void
2546 finish_translation_unit (void)
2547 {
2548   /* In case there were missing closebraces,
2549      get us back to the global binding level.  */
2550   pop_everything ();
2551   while (current_namespace != global_namespace)
2552     pop_namespace ();
2553
2554   /* Do file scope __FUNCTION__ et al.  */
2555   finish_fname_decls ();
2556 }
2557
2558 /* Finish a template type parameter, specified as AGGR IDENTIFIER.
2559    Returns the parameter.  */
2560
2561 tree
2562 finish_template_type_parm (tree aggr, tree identifier)
2563 {
2564   if (aggr != class_type_node)
2565     {
2566       permerror (input_location, "template type parameters must use the keyword %<class%> or %<typename%>");
2567       aggr = class_type_node;
2568     }
2569
2570   return build_tree_list (aggr, identifier);
2571 }
2572
2573 /* Finish a template template parameter, specified as AGGR IDENTIFIER.
2574    Returns the parameter.  */
2575
2576 tree
2577 finish_template_template_parm (tree aggr, tree identifier)
2578 {
2579   tree decl = build_decl (input_location,
2580                           TYPE_DECL, identifier, NULL_TREE);
2581   tree tmpl = build_lang_decl (TEMPLATE_DECL, identifier, NULL_TREE);
2582   DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
2583   DECL_TEMPLATE_RESULT (tmpl) = decl;
2584   DECL_ARTIFICIAL (decl) = 1;
2585   end_template_decl ();
2586
2587   gcc_assert (DECL_TEMPLATE_PARMS (tmpl));
2588
2589   check_default_tmpl_args (decl, DECL_TEMPLATE_PARMS (tmpl), 
2590                            /*is_primary=*/true, /*is_partial=*/false,
2591                            /*is_friend=*/0);
2592
2593   return finish_template_type_parm (aggr, tmpl);
2594 }
2595
2596 /* ARGUMENT is the default-argument value for a template template
2597    parameter.  If ARGUMENT is invalid, issue error messages and return
2598    the ERROR_MARK_NODE.  Otherwise, ARGUMENT itself is returned.  */
2599
2600 tree
2601 check_template_template_default_arg (tree argument)
2602 {
2603   if (TREE_CODE (argument) != TEMPLATE_DECL
2604       && TREE_CODE (argument) != TEMPLATE_TEMPLATE_PARM
2605       && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
2606     {
2607       if (TREE_CODE (argument) == TYPE_DECL)
2608         error ("invalid use of type %qT as a default value for a template "
2609                "template-parameter", TREE_TYPE (argument));
2610       else
2611         error ("invalid default argument for a template template parameter");
2612       return error_mark_node;
2613     }
2614
2615   return argument;
2616 }
2617
2618 /* Begin a class definition, as indicated by T.  */
2619
2620 tree
2621 begin_class_definition (tree t)
2622 {
2623   if (error_operand_p (t) || error_operand_p (TYPE_MAIN_DECL (t)))
2624     return error_mark_node;
2625
2626   if (processing_template_parmlist)
2627     {
2628       error ("definition of %q#T inside template parameter list", t);
2629       return error_mark_node;
2630     }
2631
2632   /* According to the C++ ABI, decimal classes defined in ISO/IEC TR 24733
2633      are passed the same as decimal scalar types.  */
2634   if (TREE_CODE (t) == RECORD_TYPE
2635       && !processing_template_decl)
2636     {
2637       tree ns = TYPE_CONTEXT (t);
2638       if (ns && TREE_CODE (ns) == NAMESPACE_DECL
2639           && DECL_CONTEXT (ns) == std_node
2640           && DECL_NAME (ns)
2641           && !strcmp (IDENTIFIER_POINTER (DECL_NAME (ns)), "decimal"))
2642         {
2643           const char *n = TYPE_NAME_STRING (t);
2644           if ((strcmp (n, "decimal32") == 0)
2645               || (strcmp (n, "decimal64") == 0)
2646               || (strcmp (n, "decimal128") == 0))
2647             TYPE_TRANSPARENT_AGGR (t) = 1;
2648         }
2649     }
2650
2651   /* A non-implicit typename comes from code like:
2652
2653        template <typename T> struct A {
2654          template <typename U> struct A<T>::B ...
2655
2656      This is erroneous.  */
2657   else if (TREE_CODE (t) == TYPENAME_TYPE)
2658     {
2659       error ("invalid definition of qualified type %qT", t);
2660       t = error_mark_node;
2661     }
2662
2663   if (t == error_mark_node || ! MAYBE_CLASS_TYPE_P (t))
2664     {
2665       t = make_class_type (RECORD_TYPE);
2666       pushtag (make_anon_name (), t, /*tag_scope=*/ts_current);
2667     }
2668
2669   if (TYPE_BEING_DEFINED (t))
2670     {
2671       t = make_class_type (TREE_CODE (t));
2672       pushtag (TYPE_IDENTIFIER (t), t, /*tag_scope=*/ts_current);
2673     }
2674   maybe_process_partial_specialization (t);
2675   pushclass (t);
2676   TYPE_BEING_DEFINED (t) = 1;
2677
2678   if (flag_pack_struct)
2679     {
2680       tree v;
2681       TYPE_PACKED (t) = 1;
2682       /* Even though the type is being defined for the first time
2683          here, there might have been a forward declaration, so there
2684          might be cv-qualified variants of T.  */
2685       for (v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
2686         TYPE_PACKED (v) = 1;
2687     }
2688   /* Reset the interface data, at the earliest possible
2689      moment, as it might have been set via a class foo;
2690      before.  */
2691   if (! TYPE_ANONYMOUS_P (t))
2692     {
2693       struct c_fileinfo *finfo = get_fileinfo (input_filename);
2694       CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
2695       SET_CLASSTYPE_INTERFACE_UNKNOWN_X
2696         (t, finfo->interface_unknown);
2697     }
2698   reset_specialization();
2699
2700   /* Make a declaration for this class in its own scope.  */
2701   build_self_reference ();
2702
2703   return t;
2704 }
2705
2706 /* Finish the member declaration given by DECL.  */
2707
2708 void
2709 finish_member_declaration (tree decl)
2710 {
2711   if (decl == error_mark_node || decl == NULL_TREE)
2712     return;
2713
2714   if (decl == void_type_node)
2715     /* The COMPONENT was a friend, not a member, and so there's
2716        nothing for us to do.  */
2717     return;
2718
2719   /* We should see only one DECL at a time.  */
2720   gcc_assert (DECL_CHAIN (decl) == NULL_TREE);
2721
2722   /* Set up access control for DECL.  */
2723   TREE_PRIVATE (decl)
2724     = (current_access_specifier == access_private_node);
2725   TREE_PROTECTED (decl)
2726     = (current_access_specifier == access_protected_node);
2727   if (TREE_CODE (decl) == TEMPLATE_DECL)
2728     {
2729       TREE_PRIVATE (DECL_TEMPLATE_RESULT (decl)) = TREE_PRIVATE (decl);
2730       TREE_PROTECTED (DECL_TEMPLATE_RESULT (decl)) = TREE_PROTECTED (decl);
2731     }
2732
2733   /* Mark the DECL as a member of the current class, unless it's
2734      a member of an enumeration.  */
2735   if (TREE_CODE (decl) != CONST_DECL)
2736     DECL_CONTEXT (decl) = current_class_type;
2737
2738   /* Check for bare parameter packs in the member variable declaration.  */
2739   if (TREE_CODE (decl) == FIELD_DECL)
2740     {
2741       if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
2742         TREE_TYPE (decl) = error_mark_node;
2743       if (check_for_bare_parameter_packs (DECL_ATTRIBUTES (decl)))
2744         DECL_ATTRIBUTES (decl) = NULL_TREE;
2745     }
2746
2747   /* [dcl.link]
2748
2749      A C language linkage is ignored for the names of class members
2750      and the member function type of class member functions.  */
2751   if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
2752     SET_DECL_LANGUAGE (decl, lang_cplusplus);
2753
2754   /* Put functions on the TYPE_METHODS list and everything else on the
2755      TYPE_FIELDS list.  Note that these are built up in reverse order.
2756      We reverse them (to obtain declaration order) in finish_struct.  */
2757   if (DECL_DECLARES_FUNCTION_P (decl))
2758     {
2759       /* We also need to add this function to the
2760          CLASSTYPE_METHOD_VEC.  */
2761       if (add_method (current_class_type, decl, NULL_TREE))
2762         {
2763           DECL_CHAIN (decl) = TYPE_METHODS (current_class_type);
2764           TYPE_METHODS (current_class_type) = decl;
2765
2766           maybe_add_class_template_decl_list (current_class_type, decl,
2767                                               /*friend_p=*/0);
2768         }
2769     }
2770   /* Enter the DECL into the scope of the class, if the class
2771      isn't a closure (whose fields are supposed to be unnamed).  */
2772   else if (CLASSTYPE_LAMBDA_EXPR (current_class_type)
2773            || pushdecl_class_level (decl))
2774     {
2775       if (TREE_CODE (decl) == USING_DECL)
2776         {
2777           /* For now, ignore class-scope USING_DECLS, so that
2778              debugging backends do not see them. */
2779           DECL_IGNORED_P (decl) = 1;
2780         }
2781
2782       /* All TYPE_DECLs go at the end of TYPE_FIELDS.  Ordinary fields
2783          go at the beginning.  The reason is that lookup_field_1
2784          searches the list in order, and we want a field name to
2785          override a type name so that the "struct stat hack" will
2786          work.  In particular:
2787
2788            struct S { enum E { }; int E } s;
2789            s.E = 3;
2790
2791          is valid.  In addition, the FIELD_DECLs must be maintained in
2792          declaration order so that class layout works as expected.
2793          However, we don't need that order until class layout, so we
2794          save a little time by putting FIELD_DECLs on in reverse order
2795          here, and then reversing them in finish_struct_1.  (We could
2796          also keep a pointer to the correct insertion points in the
2797          list.)  */
2798
2799       if (TREE_CODE (decl) == TYPE_DECL)
2800         TYPE_FIELDS (current_class_type)
2801           = chainon (TYPE_FIELDS (current_class_type), decl);
2802       else
2803         {
2804           DECL_CHAIN (decl) = TYPE_FIELDS (current_class_type);
2805           TYPE_FIELDS (current_class_type) = decl;
2806         }
2807
2808       maybe_add_class_template_decl_list (current_class_type, decl,
2809                                           /*friend_p=*/0);
2810     }
2811
2812   if (pch_file)
2813     note_decl_for_pch (decl);
2814 }
2815
2816 /* DECL has been declared while we are building a PCH file.  Perform
2817    actions that we might normally undertake lazily, but which can be
2818    performed now so that they do not have to be performed in
2819    translation units which include the PCH file.  */
2820
2821 void
2822 note_decl_for_pch (tree decl)
2823 {
2824   gcc_assert (pch_file);
2825
2826   /* There's a good chance that we'll have to mangle names at some
2827      point, even if only for emission in debugging information.  */
2828   if (VAR_OR_FUNCTION_DECL_P (decl)
2829       && !processing_template_decl)
2830     mangle_decl (decl);
2831 }
2832
2833 /* Finish processing a complete template declaration.  The PARMS are
2834    the template parameters.  */
2835
2836 void
2837 finish_template_decl (tree parms)
2838 {
2839   if (parms)
2840     end_template_decl ();
2841   else
2842     end_specialization ();
2843 }
2844
2845 /* Finish processing a template-id (which names a type) of the form
2846    NAME < ARGS >.  Return the TYPE_DECL for the type named by the
2847    template-id.  If ENTERING_SCOPE is nonzero we are about to enter
2848    the scope of template-id indicated.  */
2849
2850 tree
2851 finish_template_type (tree name, tree args, int entering_scope)
2852 {
2853   tree type;
2854
2855   type = lookup_template_class (name, args,
2856                                 NULL_TREE, NULL_TREE, entering_scope,
2857                                 tf_warning_or_error | tf_user);
2858   if (type == error_mark_node)
2859     return type;
2860   else if (CLASS_TYPE_P (type) && !alias_type_or_template_p (type))
2861     return TYPE_STUB_DECL (type);
2862   else
2863     return TYPE_NAME (type);
2864 }
2865
2866 /* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2867    Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2868    BASE_CLASS, or NULL_TREE if an error occurred.  The
2869    ACCESS_SPECIFIER is one of
2870    access_{default,public,protected_private}_node.  For a virtual base
2871    we set TREE_TYPE.  */
2872
2873 tree
2874 finish_base_specifier (tree base, tree access, bool virtual_p)
2875 {
2876   tree result;
2877
2878   if (base == error_mark_node)
2879     {
2880       error ("invalid base-class specification");
2881       result = NULL_TREE;
2882     }
2883   else if (! MAYBE_CLASS_TYPE_P (base))
2884     {
2885       error ("%qT is not a class type", base);
2886       result = NULL_TREE;
2887     }
2888   else
2889     {
2890       if (cp_type_quals (base) != 0)
2891         {
2892           /* DR 484: Can a base-specifier name a cv-qualified
2893              class type?  */
2894           base = TYPE_MAIN_VARIANT (base);
2895         }
2896       result = build_tree_list (access, base);
2897       if (virtual_p)
2898         TREE_TYPE (result) = integer_type_node;
2899     }
2900
2901   return result;
2902 }
2903
2904 /* If FNS is a member function, a set of member functions, or a
2905    template-id referring to one or more member functions, return a
2906    BASELINK for FNS, incorporating the current access context.
2907    Otherwise, return FNS unchanged.  */
2908
2909 tree
2910 baselink_for_fns (tree fns)
2911 {
2912   tree scope;
2913   tree cl;
2914
2915   if (BASELINK_P (fns) 
2916       || error_operand_p (fns))
2917     return fns;
2918
2919   scope = ovl_scope (fns);
2920   if (!CLASS_TYPE_P (scope))
2921     return fns;
2922
2923   cl = currently_open_derived_class (scope);
2924   if (!cl)
2925     cl = scope;
2926   cl = TYPE_BINFO (cl);
2927   return build_baselink (cl, cl, fns, /*optype=*/NULL_TREE);
2928 }
2929
2930 /* Returns true iff DECL is a variable from a function outside
2931    the current one.  */
2932
2933 static bool
2934 outer_var_p (tree decl)
2935 {
2936   return ((VAR_P (decl) || TREE_CODE (decl) == PARM_DECL)
2937           && DECL_FUNCTION_SCOPE_P (decl)
2938           && (DECL_CONTEXT (decl) != current_function_decl
2939               || parsing_nsdmi ()));
2940 }
2941
2942 /* As above, but also checks that DECL is automatic.  */
2943
2944 static bool
2945 outer_automatic_var_p (tree decl)
2946 {
2947   return (outer_var_p (decl)
2948           && !TREE_STATIC (decl));
2949 }
2950
2951 /* ID_EXPRESSION is a representation of parsed, but unprocessed,
2952    id-expression.  (See cp_parser_id_expression for details.)  SCOPE,
2953    if non-NULL, is the type or namespace used to explicitly qualify
2954    ID_EXPRESSION.  DECL is the entity to which that name has been
2955    resolved.
2956
2957    *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2958    constant-expression.  In that case, *NON_CONSTANT_EXPRESSION_P will
2959    be set to true if this expression isn't permitted in a
2960    constant-expression, but it is otherwise not set by this function.
2961    *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2962    constant-expression, but a non-constant expression is also
2963    permissible.
2964
2965    DONE is true if this expression is a complete postfix-expression;
2966    it is false if this expression is followed by '->', '[', '(', etc.
2967    ADDRESS_P is true iff this expression is the operand of '&'.
2968    TEMPLATE_P is true iff the qualified-id was of the form
2969    "A::template B".  TEMPLATE_ARG_P is true iff this qualified name
2970    appears as a template argument.
2971
2972    If an error occurs, and it is the kind of error that might cause
2973    the parser to abort a tentative parse, *ERROR_MSG is filled in.  It
2974    is the caller's responsibility to issue the message.  *ERROR_MSG
2975    will be a string with static storage duration, so the caller need
2976    not "free" it.
2977
2978    Return an expression for the entity, after issuing appropriate
2979    diagnostics.  This function is also responsible for transforming a
2980    reference to a non-static member into a COMPONENT_REF that makes
2981    the use of "this" explicit.
2982
2983    Upon return, *IDK will be filled in appropriately.  */
2984 tree
2985 finish_id_expression (tree id_expression,
2986                       tree decl,
2987                       tree scope,
2988                       cp_id_kind *idk,
2989                       bool integral_constant_expression_p,
2990                       bool allow_non_integral_constant_expression_p,
2991                       bool *non_integral_constant_expression_p,
2992                       bool template_p,
2993                       bool done,
2994                       bool address_p,
2995                       bool template_arg_p,
2996                       const char **error_msg,
2997                       location_t location)
2998 {
2999   decl = strip_using_decl (decl);
3000
3001   /* Initialize the output parameters.  */
3002   *idk = CP_ID_KIND_NONE;
3003   *error_msg = NULL;
3004
3005   if (id_expression == error_mark_node)
3006     return error_mark_node;
3007   /* If we have a template-id, then no further lookup is
3008      required.  If the template-id was for a template-class, we
3009      will sometimes have a TYPE_DECL at this point.  */
3010   else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
3011            || TREE_CODE (decl) == TYPE_DECL)
3012     ;
3013   /* Look up the name.  */
3014   else
3015     {
3016       if (decl == error_mark_node)
3017         {
3018           /* Name lookup failed.  */
3019           if (scope
3020               && (!TYPE_P (scope)
3021                   || (!dependent_type_p (scope)
3022                       && !(identifier_p (id_expression)
3023                            && IDENTIFIER_TYPENAME_P (id_expression)
3024                            && dependent_type_p (TREE_TYPE (id_expression))))))
3025             {
3026               /* If the qualifying type is non-dependent (and the name
3027                  does not name a conversion operator to a dependent
3028                  type), issue an error.  */
3029               qualified_name_lookup_error (scope, id_expression, decl, location);
3030               return error_mark_node;
3031             }
3032           else if (!scope)
3033             {
3034               /* It may be resolved via Koenig lookup.  */
3035               *idk = CP_ID_KIND_UNQUALIFIED;
3036               return id_expression;
3037             }
3038           else
3039             decl = id_expression;
3040         }
3041       /* If DECL is a variable that would be out of scope under
3042          ANSI/ISO rules, but in scope in the ARM, name lookup
3043          will succeed.  Issue a diagnostic here.  */
3044       else
3045         decl = check_for_out_of_scope_variable (decl);
3046
3047       /* Remember that the name was used in the definition of
3048          the current class so that we can check later to see if
3049          the meaning would have been different after the class
3050          was entirely defined.  */
3051       if (!scope && decl != error_mark_node && identifier_p (id_expression))
3052         maybe_note_name_used_in_class (id_expression, decl);
3053
3054       /* Disallow uses of local variables from containing functions, except
3055          within lambda-expressions.  */
3056       if (!outer_var_p (decl))
3057         /* OK */;
3058       else if (TREE_STATIC (decl)
3059                /* It's not a use (3.2) if we're in an unevaluated context.  */
3060                || cp_unevaluated_operand)
3061         {
3062           if (processing_template_decl)
3063             /* For a use of an outer static/unevaluated var, return the id
3064                so that we'll look it up again in the instantiation.  */
3065             return id_expression;
3066         }
3067       else
3068         {
3069           tree context = DECL_CONTEXT (decl);
3070           tree containing_function = current_function_decl;
3071           tree lambda_stack = NULL_TREE;
3072           tree lambda_expr = NULL_TREE;
3073           tree initializer = convert_from_reference (decl);
3074
3075           /* Mark it as used now even if the use is ill-formed.  */
3076           mark_used (decl);
3077
3078           /* Core issue 696: "[At the July 2009 meeting] the CWG expressed
3079              support for an approach in which a reference to a local
3080              [constant] automatic variable in a nested class or lambda body
3081              would enter the expression as an rvalue, which would reduce
3082              the complexity of the problem"
3083
3084              FIXME update for final resolution of core issue 696.  */
3085           if (decl_constant_var_p (decl))
3086             {
3087               if (processing_template_decl)
3088                 /* In a template, the constant value may not be in a usable
3089                    form, so look it up again at instantiation time.  */
3090                 return id_expression;
3091               else
3092                 return integral_constant_value (decl);
3093             }
3094
3095           if (parsing_nsdmi ())
3096             containing_function = NULL_TREE;
3097           /* If we are in a lambda function, we can move out until we hit
3098              1. the context,
3099              2. a non-lambda function, or
3100              3. a non-default capturing lambda function.  */
3101           else while (context != containing_function
3102                       && LAMBDA_FUNCTION_P (containing_function))
3103             {
3104               lambda_expr = CLASSTYPE_LAMBDA_EXPR
3105                 (DECL_CONTEXT (containing_function));
3106
3107               if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr)
3108                   == CPLD_NONE)
3109                 break;
3110
3111               lambda_stack = tree_cons (NULL_TREE,
3112                                         lambda_expr,
3113                                         lambda_stack);
3114
3115               containing_function
3116                 = decl_function_context (containing_function);
3117             }
3118
3119           if (lambda_expr && TREE_CODE (decl) == VAR_DECL
3120               && DECL_ANON_UNION_VAR_P (decl))
3121             {
3122               error ("cannot capture member %qD of anonymous union", decl);
3123               return error_mark_node;
3124             }
3125           if (context == containing_function)
3126             {
3127               decl = add_default_capture (lambda_stack,
3128                                           /*id=*/DECL_NAME (decl),
3129                                           initializer);
3130             }
3131           else if (lambda_expr)
3132             {
3133               error ("%qD is not captured", decl);
3134               return error_mark_node;
3135             }
3136           else
3137             {
3138               error (VAR_P (decl)
3139                      ? G_("use of local variable with automatic storage from containing function")
3140                      : G_("use of parameter from containing function"));
3141               inform (input_location, "%q+#D declared here", decl);
3142               return error_mark_node;
3143             }
3144         }
3145
3146       /* Also disallow uses of function parameters outside the function
3147          body, except inside an unevaluated context (i.e. decltype).  */
3148       if (TREE_CODE (decl) == PARM_DECL
3149           && DECL_CONTEXT (decl) == NULL_TREE
3150           && !cp_unevaluated_operand)
3151         {
3152           error ("use of parameter %qD outside function body", decl);
3153           return error_mark_node;
3154         }
3155     }
3156
3157   /* If we didn't find anything, or what we found was a type,
3158      then this wasn't really an id-expression.  */
3159   if (TREE_CODE (decl) == TEMPLATE_DECL
3160       && !DECL_FUNCTION_TEMPLATE_P (decl))
3161     {
3162       *error_msg = "missing template arguments";
3163       return error_mark_node;
3164     }
3165   else if (TREE_CODE (decl) == TYPE_DECL
3166            || TREE_CODE (decl) == NAMESPACE_DECL)
3167     {
3168       *error_msg = "expected primary-expression";
3169       return error_mark_node;
3170     }
3171
3172   /* If the name resolved to a template parameter, there is no
3173      need to look it up again later.  */
3174   if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
3175       || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
3176     {
3177       tree r;
3178
3179       *idk = CP_ID_KIND_NONE;
3180       if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
3181         decl = TEMPLATE_PARM_DECL (decl);
3182       r = convert_from_reference (DECL_INITIAL (decl));
3183
3184       if (integral_constant_expression_p
3185           && !dependent_type_p (TREE_TYPE (decl))
3186           && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
3187         {
3188           if (!allow_non_integral_constant_expression_p)
3189             error ("template parameter %qD of type %qT is not allowed in "
3190                    "an integral constant expression because it is not of "
3191                    "integral or enumeration type", decl, TREE_TYPE (decl));
3192           *non_integral_constant_expression_p = true;
3193         }
3194       return r;
3195     }
3196   else
3197     {
3198       bool dependent_p;
3199
3200       /* If the declaration was explicitly qualified indicate
3201          that.  The semantics of `A::f(3)' are different than
3202          `f(3)' if `f' is virtual.  */
3203       *idk = (scope
3204               ? CP_ID_KIND_QUALIFIED
3205               : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
3206                  ? CP_ID_KIND_TEMPLATE_ID
3207                  : CP_ID_KIND_UNQUALIFIED));
3208
3209
3210       /* [temp.dep.expr]
3211
3212          An id-expression is type-dependent if it contains an
3213          identifier that was declared with a dependent type.
3214
3215          The standard is not very specific about an id-expression that
3216          names a set of overloaded functions.  What if some of them
3217          have dependent types and some of them do not?  Presumably,
3218          such a name should be treated as a dependent name.  */
3219       /* Assume the name is not dependent.  */
3220       dependent_p = false;
3221       if (!processing_template_decl)
3222         /* No names are dependent outside a template.  */
3223         ;
3224       else if (TREE_CODE (decl) == CONST_DECL)
3225         /* We don't want to treat enumerators as dependent.  */
3226         ;
3227       /* A template-id where the name of the template was not resolved
3228          is definitely dependent.  */
3229       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
3230                && (identifier_p (TREE_OPERAND (decl, 0))))
3231         dependent_p = true;
3232       /* For anything except an overloaded function, just check its
3233          type.  */
3234       else if (!is_overloaded_fn (decl))
3235         dependent_p
3236           = dependent_type_p (TREE_TYPE (decl));
3237       /* For a set of overloaded functions, check each of the
3238          functions.  */
3239       else
3240         {
3241           tree fns = decl;
3242
3243           if (BASELINK_P (fns))
3244             fns = BASELINK_FUNCTIONS (fns);
3245
3246           /* For a template-id, check to see if the template
3247              arguments are dependent.  */
3248           if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
3249             {
3250               tree args = TREE_OPERAND (fns, 1);
3251               dependent_p = any_dependent_template_arguments_p (args);
3252               /* The functions are those referred to by the
3253                  template-id.  */
3254               fns = TREE_OPERAND (fns, 0);
3255             }
3256
3257           /* If there are no dependent template arguments, go through
3258              the overloaded functions.  */
3259           while (fns && !dependent_p)
3260             {
3261               tree fn = OVL_CURRENT (fns);
3262
3263               /* Member functions of dependent classes are
3264                  dependent.  */
3265               if (TREE_CODE (fn) == FUNCTION_DECL
3266                   && type_dependent_expression_p (fn))
3267                 dependent_p = true;
3268               else if (TREE_CODE (fn) == TEMPLATE_DECL
3269                        && dependent_template_p (fn))
3270                 dependent_p = true;
3271
3272               fns = OVL_NEXT (fns);
3273             }
3274         }
3275
3276       /* If the name was dependent on a template parameter, we will
3277          resolve the name at instantiation time.  */
3278       if (dependent_p)
3279         {
3280           /* Create a SCOPE_REF for qualified names, if the scope is
3281              dependent.  */
3282           if (scope)
3283             {
3284               if (TYPE_P (scope))
3285                 {
3286                   if (address_p && done)
3287                     decl = finish_qualified_id_expr (scope, decl,
3288                                                      done, address_p,
3289                                                      template_p,
3290                                                      template_arg_p,
3291                                                      tf_warning_or_error);
3292                   else
3293                     {
3294                       tree type = NULL_TREE;
3295                       if (DECL_P (decl) && !dependent_scope_p (scope))
3296                         type = TREE_TYPE (decl);
3297                       decl = build_qualified_name (type,
3298                                                    scope,
3299                                                    id_expression,
3300                                                    template_p);
3301                     }
3302                 }
3303               if (TREE_TYPE (decl))
3304                 decl = convert_from_reference (decl);
3305               return decl;
3306             }
3307           /* A TEMPLATE_ID already contains all the information we
3308              need.  */
3309           if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
3310             return id_expression;
3311           *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
3312           /* If we found a variable, then name lookup during the
3313              instantiation will always resolve to the same VAR_DECL
3314              (or an instantiation thereof).  */
3315           if (VAR_P (decl)
3316               || TREE_CODE (decl) == PARM_DECL)
3317             {
3318               mark_used (decl);
3319               return convert_from_reference (decl);
3320             }
3321           /* The same is true for FIELD_DECL, but we also need to
3322              make sure that the syntax is correct.  */
3323           else if (TREE_CODE (decl) == FIELD_DECL)
3324             {
3325               /* Since SCOPE is NULL here, this is an unqualified name.
3326                  Access checking has been performed during name lookup
3327                  already.  Turn off checking to avoid duplicate errors.  */
3328               push_deferring_access_checks (dk_no_check);
3329               decl = finish_non_static_data_member
3330                        (decl, NULL_TREE,
3331                         /*qualifying_scope=*/NULL_TREE);
3332               pop_deferring_access_checks ();
3333               return decl;
3334             }
3335           return id_expression;
3336         }
3337
3338       if (TREE_CODE (decl) == NAMESPACE_DECL)
3339         {
3340           error ("use of namespace %qD as expression", decl);
3341           return error_mark_node;
3342         }
3343       else if (DECL_CLASS_TEMPLATE_P (decl))
3344         {
3345           error ("use of class template %qT as expression", decl);
3346           return error_mark_node;
3347         }
3348       else if (TREE_CODE (decl) == TREE_LIST)
3349         {
3350           /* Ambiguous reference to base members.  */
3351           error ("request for member %qD is ambiguous in "
3352                  "multiple inheritance lattice", id_expression);
3353           print_candidates (decl);
3354           return error_mark_node;
3355         }
3356
3357       /* Mark variable-like entities as used.  Functions are similarly
3358          marked either below or after overload resolution.  */
3359       if ((VAR_P (decl)
3360            || TREE_CODE (decl) == PARM_DECL
3361            || TREE_CODE (decl) == CONST_DECL
3362            || TREE_CODE (decl) == RESULT_DECL)
3363           && !mark_used (decl))
3364         return error_mark_node;
3365
3366       /* Only certain kinds of names are allowed in constant
3367          expression.  Template parameters have already
3368          been handled above.  */
3369       if (! error_operand_p (decl)
3370           && integral_constant_expression_p
3371           && ! decl_constant_var_p (decl)
3372           && TREE_CODE (decl) != CONST_DECL
3373           && ! builtin_valid_in_constant_expr_p (decl))
3374         {
3375           if (!allow_non_integral_constant_expression_p)
3376             {
3377               error ("%qD cannot appear in a constant-expression", decl);
3378               return error_mark_node;
3379             }
3380           *non_integral_constant_expression_p = true;
3381         }
3382
3383       tree wrap;
3384       if (VAR_P (decl)
3385           && !cp_unevaluated_operand
3386           && DECL_THREAD_LOCAL_P (decl)
3387           && (wrap = get_tls_wrapper_fn (decl)))
3388         {
3389           /* Replace an evaluated use of the thread_local variable with
3390              a call to its wrapper.  */
3391           decl = build_cxx_call (wrap, 0, NULL, tf_warning_or_error);
3392         }
3393       else if (scope)
3394         {
3395           decl = (adjust_result_of_qualified_name_lookup
3396                   (decl, scope, current_nonlambda_class_type()));
3397
3398           if (TREE_CODE (decl) == FUNCTION_DECL)
3399             mark_used (decl);
3400
3401           if (TYPE_P (scope))
3402             decl = finish_qualified_id_expr (scope,
3403                                              decl,
3404                                              done,
3405                                              address_p,
3406                                              template_p,
3407                                              template_arg_p,
3408                                              tf_warning_or_error);
3409           else
3410             decl = convert_from_reference (decl);
3411         }
3412       else if (TREE_CODE (decl) == FIELD_DECL)
3413         {
3414           /* Since SCOPE is NULL here, this is an unqualified name.
3415              Access checking has been performed during name lookup
3416              already.  Turn off checking to avoid duplicate errors.  */
3417           push_deferring_access_checks (dk_no_check);
3418           decl = finish_non_static_data_member (decl, NULL_TREE,
3419                                                 /*qualifying_scope=*/NULL_TREE);
3420           pop_deferring_access_checks ();
3421         }
3422       else if (is_overloaded_fn (decl))
3423         {
3424           tree first_fn;
3425
3426           first_fn = get_first_fn (decl);
3427           if (TREE_CODE (first_fn) == TEMPLATE_DECL)
3428             first_fn = DECL_TEMPLATE_RESULT (first_fn);
3429
3430           if (!really_overloaded_fn (decl)
3431               && !mark_used (first_fn))
3432             return error_mark_node;
3433
3434           if (!template_arg_p
3435               && TREE_CODE (first_fn) == FUNCTION_DECL
3436               && DECL_FUNCTION_MEMBER_P (first_fn)
3437               && !shared_member_p (decl))
3438             {
3439               /* A set of member functions.  */
3440               decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
3441               return finish_class_member_access_expr (decl, id_expression,
3442                                                       /*template_p=*/false,
3443                                                       tf_warning_or_error);
3444             }
3445
3446           decl = baselink_for_fns (decl);
3447         }
3448       else
3449         {
3450           if (DECL_P (decl) && DECL_NONLOCAL (decl)
3451               && DECL_CLASS_SCOPE_P (decl))
3452             {
3453               tree context = context_for_name_lookup (decl); 
3454               if (context != current_class_type)
3455                 {
3456                   tree path = currently_open_derived_class (context);
3457                   perform_or_defer_access_check (TYPE_BINFO (path),
3458                                                  decl, decl,
3459                                                  tf_warning_or_error);
3460                 }
3461             }
3462
3463           decl = convert_from_reference (decl);
3464         }
3465     }
3466
3467   /* Handle references (c++/56130).  */
3468   tree t = REFERENCE_REF_P (decl) ? TREE_OPERAND (decl, 0) : decl;
3469   if (TREE_DEPRECATED (t))
3470     warn_deprecated_use (t, NULL_TREE);
3471
3472   return decl;
3473 }
3474
3475 /* Implement the __typeof keyword: Return the type of EXPR, suitable for
3476    use as a type-specifier.  */
3477
3478 tree
3479 finish_typeof (tree expr)
3480 {
3481   tree type;
3482
3483   if (type_dependent_expression_p (expr))
3484     {
3485       type = cxx_make_type (TYPEOF_TYPE);
3486       TYPEOF_TYPE_EXPR (type) = expr;
3487       SET_TYPE_STRUCTURAL_EQUALITY (type);
3488
3489       return type;
3490     }
3491
3492   expr = mark_type_use (expr);
3493
3494   type = unlowered_expr_type (expr);
3495
3496   if (!type || type == unknown_type_node)
3497     {
3498       error ("type of %qE is unknown", expr);
3499       return error_mark_node;
3500     }
3501
3502   return type;
3503 }
3504
3505 /* Implement the __underlying_type keyword: Return the underlying
3506    type of TYPE, suitable for use as a type-specifier.  */
3507
3508 tree
3509 finish_underlying_type (tree type)
3510 {
3511   tree underlying_type;
3512
3513   if (processing_template_decl)
3514     {
3515       underlying_type = cxx_make_type (UNDERLYING_TYPE);
3516       UNDERLYING_TYPE_TYPE (underlying_type) = type;
3517       SET_TYPE_STRUCTURAL_EQUALITY (underlying_type);
3518
3519       return underlying_type;
3520     }
3521
3522   complete_type (type);
3523
3524   if (TREE_CODE (type) != ENUMERAL_TYPE)
3525     {
3526       error ("%qT is not an enumeration type", type);
3527       return error_mark_node;
3528     }
3529
3530   underlying_type = ENUM_UNDERLYING_TYPE (type);
3531
3532   /* Fixup necessary in this case because ENUM_UNDERLYING_TYPE
3533      includes TYPE_MIN_VALUE and TYPE_MAX_VALUE information.
3534      See finish_enum_value_list for details.  */
3535   if (!ENUM_FIXED_UNDERLYING_TYPE_P (type))
3536     underlying_type
3537       = c_common_type_for_mode (TYPE_MODE (underlying_type),
3538                                 TYPE_UNSIGNED (underlying_type));
3539
3540   return underlying_type;
3541 }
3542
3543 /* Implement the __direct_bases keyword: Return the direct base classes
3544    of type */
3545
3546 tree
3547 calculate_direct_bases (tree type)
3548 {
3549   vec<tree, va_gc> *vector = make_tree_vector();
3550   tree bases_vec = NULL_TREE;
3551   vec<tree, va_gc> *base_binfos;
3552   tree binfo;
3553   unsigned i;
3554
3555   complete_type (type);
3556
3557   if (!NON_UNION_CLASS_TYPE_P (type))
3558     return make_tree_vec (0);
3559
3560   base_binfos = BINFO_BASE_BINFOS (TYPE_BINFO (type));
3561
3562   /* Virtual bases are initialized first */
3563   for (i = 0; base_binfos->iterate (i, &binfo); i++)
3564     {
3565       if (BINFO_VIRTUAL_P (binfo))
3566        {
3567          vec_safe_push (vector, binfo);
3568        }
3569     }
3570
3571   /* Now non-virtuals */
3572   for (i = 0; base_binfos->iterate (i, &binfo); i++)
3573     {
3574       if (!BINFO_VIRTUAL_P (binfo))
3575        {
3576          vec_safe_push (vector, binfo);
3577        }
3578     }
3579
3580
3581   bases_vec = make_tree_vec (vector->length ());
3582
3583   for (i = 0; i < vector->length (); ++i)
3584     {
3585       TREE_VEC_ELT (bases_vec, i) = BINFO_TYPE ((*vector)[i]);
3586     }
3587   return bases_vec;
3588 }
3589
3590 /* Implement the __bases keyword: Return the base classes
3591    of type */
3592
3593 /* Find morally non-virtual base classes by walking binfo hierarchy */
3594 /* Virtual base classes are handled separately in finish_bases */
3595
3596 static tree
3597 dfs_calculate_bases_pre (tree binfo, void * /*data_*/)
3598 {
3599   /* Don't walk bases of virtual bases */
3600   return BINFO_VIRTUAL_P (binfo) ? dfs_skip_bases : NULL_TREE;
3601 }
3602
3603 static tree
3604 dfs_calculate_bases_post (tree binfo, void *data_)
3605 {
3606   vec<tree, va_gc> **data = ((vec<tree, va_gc> **) data_);
3607   if (!BINFO_VIRTUAL_P (binfo))
3608     {
3609       vec_safe_push (*data, BINFO_TYPE (binfo));
3610     }
3611   return NULL_TREE;
3612 }
3613
3614 /* Calculates the morally non-virtual base classes of a class */
3615 static vec<tree, va_gc> *
3616 calculate_bases_helper (tree type)
3617 {
3618   vec<tree, va_gc> *vector = make_tree_vector();
3619
3620   /* Now add non-virtual base classes in order of construction */
3621   dfs_walk_all (TYPE_BINFO (type),
3622                 dfs_calculate_bases_pre, dfs_calculate_bases_post, &vector);
3623   return vector;
3624 }
3625
3626 tree
3627 calculate_bases (tree type)
3628 {
3629   vec<tree, va_gc> *vector = make_tree_vector();
3630   tree bases_vec = NULL_TREE;
3631   unsigned i;
3632   vec<tree, va_gc> *vbases;
3633   vec<tree, va_gc> *nonvbases;
3634   tree binfo;
3635
3636   complete_type (type);
3637
3638   if (!NON_UNION_CLASS_TYPE_P (type))
3639     return make_tree_vec (0);
3640
3641   /* First go through virtual base classes */
3642   for (vbases = CLASSTYPE_VBASECLASSES (type), i = 0;
3643        vec_safe_iterate (vbases, i, &binfo); i++)
3644     {
3645       vec<tree, va_gc> *vbase_bases;
3646       vbase_bases = calculate_bases_helper (BINFO_TYPE (binfo));
3647       vec_safe_splice (vector, vbase_bases);
3648       release_tree_vector (vbase_bases);
3649     }
3650
3651   /* Now for the non-virtual bases */
3652   nonvbases = calculate_bases_helper (type);
3653   vec_safe_splice (vector, nonvbases);
3654   release_tree_vector (nonvbases);
3655
3656   /* Last element is entire class, so don't copy */
3657   bases_vec = make_tree_vec (vector->length () - 1);
3658
3659   for (i = 0; i < vector->length () - 1; ++i)
3660     {
3661       TREE_VEC_ELT (bases_vec, i) = (*vector)[i];
3662     }
3663   release_tree_vector (vector);
3664   return bases_vec;
3665 }
3666
3667 tree
3668 finish_bases (tree type, bool direct)
3669 {
3670   tree bases = NULL_TREE;
3671
3672   if (!processing_template_decl)
3673     {
3674       /* Parameter packs can only be used in templates */
3675       error ("Parameter pack __bases only valid in template declaration");
3676       return error_mark_node;
3677     }
3678
3679   bases = cxx_make_type (BASES);
3680   BASES_TYPE (bases) = type;
3681   BASES_DIRECT (bases) = direct;
3682   SET_TYPE_STRUCTURAL_EQUALITY (bases);
3683
3684   return bases;
3685 }
3686
3687 /* Perform C++-specific checks for __builtin_offsetof before calling
3688    fold_offsetof.  */
3689
3690 tree
3691 finish_offsetof (tree expr)
3692 {
3693   if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
3694     {
3695       error ("cannot apply %<offsetof%> to destructor %<~%T%>",
3696               TREE_OPERAND (expr, 2));
3697       return error_mark_node;
3698     }
3699   if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
3700       || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
3701       || TREE_TYPE (expr) == unknown_type_node)
3702     {
3703       if (INDIRECT_REF_P (expr))
3704         error ("second operand of %<offsetof%> is neither a single "
3705                "identifier nor a sequence of member accesses and "
3706                "array references");
3707       else
3708         {
3709           if (TREE_CODE (expr) == COMPONENT_REF
3710               || TREE_CODE (expr) == COMPOUND_EXPR)
3711             expr = TREE_OPERAND (expr, 1);
3712           error ("cannot apply %<offsetof%> to member function %qD", expr);
3713         }
3714       return error_mark_node;
3715     }
3716   if (REFERENCE_REF_P (expr))
3717     expr = TREE_OPERAND (expr, 0);
3718   if (TREE_CODE (expr) == COMPONENT_REF)
3719     {
3720       tree object = TREE_OPERAND (expr, 0);
3721       if (!complete_type_or_else (TREE_TYPE (object), object))
3722         return error_mark_node;
3723     }
3724   return fold_offsetof (expr);
3725 }
3726
3727 /* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR.  This
3728    function is broken out from the above for the benefit of the tree-ssa
3729    project.  */
3730
3731 void
3732 simplify_aggr_init_expr (tree *tp)
3733 {
3734   tree aggr_init_expr = *tp;
3735
3736   /* Form an appropriate CALL_EXPR.  */
3737   tree fn = AGGR_INIT_EXPR_FN (aggr_init_expr);
3738   tree slot = AGGR_INIT_EXPR_SLOT (aggr_init_expr);
3739   tree type = TREE_TYPE (slot);
3740
3741   tree call_expr;
3742   enum style_t { ctor, arg, pcc } style;
3743
3744   if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
3745     style = ctor;
3746 #ifdef PCC_STATIC_STRUCT_RETURN
3747   else if (1)
3748     style = pcc;
3749 #endif
3750   else
3751     {
3752       gcc_assert (TREE_ADDRESSABLE (type));
3753       style = arg;
3754     }
3755
3756   call_expr = build_call_array_loc (input_location,
3757                                     TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
3758                                     fn,
3759                                     aggr_init_expr_nargs (aggr_init_expr),
3760                                     AGGR_INIT_EXPR_ARGP (aggr_init_expr));
3761   TREE_NOTHROW (call_expr) = TREE_NOTHROW (aggr_init_expr);
3762
3763   if (style == ctor)
3764     {
3765       /* Replace the first argument to the ctor with the address of the
3766          slot.  */
3767       cxx_mark_addressable (slot);
3768       CALL_EXPR_ARG (call_expr, 0) =
3769         build1 (ADDR_EXPR, build_pointer_type (type), slot);
3770     }
3771   else if (style == arg)
3772     {
3773       /* Just mark it addressable here, and leave the rest to
3774          expand_call{,_inline}.  */
3775       cxx_mark_addressable (slot);
3776       CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
3777       call_expr = build2 (INIT_EXPR, TREE_TYPE (call_expr), slot, call_expr);
3778     }
3779   else if (style == pcc)
3780     {
3781       /* If we're using the non-reentrant PCC calling convention, then we
3782          need to copy the returned value out of the static buffer into the
3783          SLOT.  */
3784       push_deferring_access_checks (dk_no_check);
3785       call_expr = build_aggr_init (slot, call_expr,
3786                                    DIRECT_BIND | LOOKUP_ONLYCONVERTING,
3787                                    tf_warning_or_error);
3788       pop_deferring_access_checks ();
3789       call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
3790     }
3791
3792   if (AGGR_INIT_ZERO_FIRST (aggr_init_expr))
3793     {
3794       tree init = build_zero_init (type, NULL_TREE,
3795                                    /*static_storage_p=*/false);
3796       init = build2 (INIT_EXPR, void_type_node, slot, init);
3797       call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (call_expr),
3798                           init, call_expr);
3799     }
3800
3801   *tp = call_expr;
3802 }
3803
3804 /* Emit all thunks to FN that should be emitted when FN is emitted.  */
3805
3806 void
3807 emit_associated_thunks (tree fn)
3808 {
3809   /* When we use vcall offsets, we emit thunks with the virtual
3810      functions to which they thunk. The whole point of vcall offsets
3811      is so that you can know statically the entire set of thunks that
3812      will ever be needed for a given virtual function, thereby
3813      enabling you to output all the thunks with the function itself.  */
3814   if (DECL_VIRTUAL_P (fn)
3815       /* Do not emit thunks for extern template instantiations.  */
3816       && ! DECL_REALLY_EXTERN (fn))
3817     {
3818       tree thunk;
3819
3820       for (thunk = DECL_THUNKS (fn); thunk; thunk = DECL_CHAIN (thunk))
3821         {
3822           if (!THUNK_ALIAS (thunk))
3823             {
3824               use_thunk (thunk, /*emit_p=*/1);
3825               if (DECL_RESULT_THUNK_P (thunk))
3826                 {
3827                   tree probe;
3828
3829                   for (probe = DECL_THUNKS (thunk);
3830                        probe; probe = DECL_CHAIN (probe))
3831                     use_thunk (probe, /*emit_p=*/1);
3832                 }
3833             }
3834           else
3835             gcc_assert (!DECL_THUNKS (thunk));
3836         }
3837     }
3838 }
3839
3840 /* Returns true iff FUN is an instantiation of a constexpr function
3841    template.  */
3842
3843 static inline bool
3844 is_instantiation_of_constexpr (tree fun)
3845 {
3846   return (DECL_TEMPLOID_INSTANTIATION (fun)
3847           && DECL_DECLARED_CONSTEXPR_P (DECL_TEMPLATE_RESULT
3848                                         (DECL_TI_TEMPLATE (fun))));
3849 }
3850
3851 /* Generate RTL for FN.  */
3852
3853 bool
3854 expand_or_defer_fn_1 (tree fn)
3855 {
3856   /* When the parser calls us after finishing the body of a template
3857      function, we don't really want to expand the body.  */
3858   if (processing_template_decl)
3859     {
3860       /* Normally, collection only occurs in rest_of_compilation.  So,
3861          if we don't collect here, we never collect junk generated
3862          during the processing of templates until we hit a
3863          non-template function.  It's not safe to do this inside a
3864          nested class, though, as the parser may have local state that
3865          is not a GC root.  */
3866       if (!function_depth)
3867         ggc_collect ();
3868       return false;
3869     }
3870
3871   gcc_assert (DECL_SAVED_TREE (fn));
3872
3873   /* If this is a constructor or destructor body, we have to clone
3874      it.  */
3875   if (maybe_clone_body (fn))
3876     {
3877       /* We don't want to process FN again, so pretend we've written
3878          it out, even though we haven't.  */
3879       TREE_ASM_WRITTEN (fn) = 1;
3880       /* If this is an instantiation of a constexpr function, keep
3881          DECL_SAVED_TREE for explain_invalid_constexpr_fn.  */
3882       if (!is_instantiation_of_constexpr (fn))
3883         DECL_SAVED_TREE (fn) = NULL_TREE;
3884       return false;
3885     }
3886
3887   /* We make a decision about linkage for these functions at the end
3888      of the compilation.  Until that point, we do not want the back
3889      end to output them -- but we do want it to see the bodies of
3890      these functions so that it can inline them as appropriate.  */
3891   if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3892     {
3893       if (DECL_INTERFACE_KNOWN (fn))
3894         /* We've already made a decision as to how this function will
3895            be handled.  */;
3896       else if (!at_eof)
3897         {
3898           DECL_EXTERNAL (fn) = 1;
3899           DECL_NOT_REALLY_EXTERN (fn) = 1;
3900           note_vague_linkage_fn (fn);
3901           /* A non-template inline function with external linkage will
3902              always be COMDAT.  As we must eventually determine the
3903              linkage of all functions, and as that causes writes to
3904              the data mapped in from the PCH file, it's advantageous
3905              to mark the functions at this point.  */
3906           if (!DECL_IMPLICIT_INSTANTIATION (fn))
3907             {
3908               /* This function must have external linkage, as
3909                  otherwise DECL_INTERFACE_KNOWN would have been
3910                  set.  */
3911               gcc_assert (TREE_PUBLIC (fn));
3912               comdat_linkage (fn);
3913               DECL_INTERFACE_KNOWN (fn) = 1;
3914             }
3915         }
3916       else
3917         import_export_decl (fn);
3918
3919       /* If the user wants us to keep all inline functions, then mark
3920          this function as needed so that finish_file will make sure to
3921          output it later.  Similarly, all dllexport'd functions must
3922          be emitted; there may be callers in other DLLs.  */
3923       if ((flag_keep_inline_functions
3924            && DECL_DECLARED_INLINE_P (fn)
3925            && !DECL_REALLY_EXTERN (fn))
3926           || (flag_keep_inline_dllexport
3927               && lookup_attribute ("dllexport", DECL_ATTRIBUTES (fn))))
3928         {
3929           mark_needed (fn);
3930           DECL_EXTERNAL (fn) = 0;
3931         }
3932     }
3933
3934   /* There's no reason to do any of the work here if we're only doing
3935      semantic analysis; this code just generates RTL.  */
3936   if (flag_syntax_only)
3937     return false;
3938
3939   return true;
3940 }
3941
3942 void
3943 expand_or_defer_fn (tree fn)
3944 {
3945   if (expand_or_defer_fn_1 (fn))
3946     {
3947       function_depth++;
3948
3949       /* Expand or defer, at the whim of the compilation unit manager.  */
3950       cgraph_finalize_function (fn, function_depth > 1);
3951       emit_associated_thunks (fn);
3952
3953       function_depth--;
3954     }
3955 }
3956
3957 struct nrv_data
3958 {
3959   tree var;
3960   tree result;
3961   hash_table <pointer_hash <tree_node> > visited;
3962 };
3963
3964 /* Helper function for walk_tree, used by finalize_nrv below.  */
3965
3966 static tree
3967 finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
3968 {
3969   struct nrv_data *dp = (struct nrv_data *)data;
3970   tree_node **slot;
3971
3972   /* No need to walk into types.  There wouldn't be any need to walk into
3973      non-statements, except that we have to consider STMT_EXPRs.  */
3974   if (TYPE_P (*tp))
3975     *walk_subtrees = 0;
3976   /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3977      but differs from using NULL_TREE in that it indicates that we care
3978      about the value of the RESULT_DECL.  */
3979   else if (TREE_CODE (*tp) == RETURN_EXPR)
3980     TREE_OPERAND (*tp, 0) = dp->result;
3981   /* Change all cleanups for the NRV to only run when an exception is
3982      thrown.  */
3983   else if (TREE_CODE (*tp) == CLEANUP_STMT
3984            && CLEANUP_DECL (*tp) == dp->var)
3985     CLEANUP_EH_ONLY (*tp) = 1;
3986   /* Replace the DECL_EXPR for the NRV with an initialization of the
3987      RESULT_DECL, if needed.  */
3988   else if (TREE_CODE (*tp) == DECL_EXPR
3989            && DECL_EXPR_DECL (*tp) == dp->var)
3990     {
3991       tree init;
3992       if (DECL_INITIAL (dp->var)
3993           && DECL_INITIAL (dp->var) != error_mark_node)
3994         init = build2 (INIT_EXPR, void_type_node, dp->result,
3995                        DECL_INITIAL (dp->var));
3996       else
3997         init = build_empty_stmt (EXPR_LOCATION (*tp));
3998       DECL_INITIAL (dp->var) = NULL_TREE;
3999       SET_EXPR_LOCATION (init, EXPR_LOCATION (*tp));
4000       *tp = init;
4001     }
4002   /* And replace all uses of the NRV with the RESULT_DECL.  */
4003   else if (*tp == dp->var)
4004     *tp = dp->result;
4005
4006   /* Avoid walking into the same tree more than once.  Unfortunately, we
4007      can't just use walk_tree_without duplicates because it would only call
4008      us for the first occurrence of dp->var in the function body.  */
4009   slot = dp->visited.find_slot (*tp, INSERT);
4010   if (*slot)
4011     *walk_subtrees = 0;
4012   else
4013     *slot = *tp;
4014
4015   /* Keep iterating.  */
4016   return NULL_TREE;
4017 }
4018
4019 /* Called from finish_function to implement the named return value
4020    optimization by overriding all the RETURN_EXPRs and pertinent
4021    CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
4022    RESULT_DECL for the function.  */
4023
4024 void
4025 finalize_nrv (tree *tp, tree var, tree result)
4026 {
4027   struct nrv_data data;
4028
4029   /* Copy name from VAR to RESULT.  */
4030   DECL_NAME (result) = DECL_NAME (var);
4031   /* Don't forget that we take its address.  */
4032   TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
4033   /* Finally set DECL_VALUE_EXPR to avoid assigning
4034      a stack slot at -O0 for the original var and debug info
4035      uses RESULT location for VAR.  */
4036   SET_DECL_VALUE_EXPR (var, result);
4037   DECL_HAS_VALUE_EXPR_P (var) = 1;
4038
4039   data.var = var;
4040   data.result = result;
4041   data.visited.create (37);
4042   cp_walk_tree (tp, finalize_nrv_r, &data, 0);
4043   data.visited.dispose ();
4044 }
4045 \f
4046 /* Create CP_OMP_CLAUSE_INFO for clause C.  Returns true if it is invalid.  */
4047
4048 bool
4049 cxx_omp_create_clause_info (tree c, tree type, bool need_default_ctor,
4050                             bool need_copy_ctor, bool need_copy_assignment,
4051                             bool need_dtor)
4052 {
4053   int save_errorcount = errorcount;
4054   tree info, t;
4055
4056   /* Always allocate 3 elements for simplicity.  These are the
4057      function decls for the ctor, dtor, and assignment op.
4058      This layout is known to the three lang hooks,
4059      cxx_omp_clause_default_init, cxx_omp_clause_copy_init,
4060      and cxx_omp_clause_assign_op.  */
4061   info = make_tree_vec (3);
4062   CP_OMP_CLAUSE_INFO (c) = info;
4063
4064   if (need_default_ctor || need_copy_ctor)
4065     {
4066       if (need_default_ctor)
4067         t = get_default_ctor (type);
4068       else
4069         t = get_copy_ctor (type, tf_warning_or_error);
4070
4071       if (t && !trivial_fn_p (t))
4072         TREE_VEC_ELT (info, 0) = t;
4073     }
4074
4075   if (need_dtor && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4076     TREE_VEC_ELT (info, 1) = get_dtor (type, tf_warning_or_error);
4077
4078   if (need_copy_assignment)
4079     {
4080       t = get_copy_assign (type);
4081
4082       if (t && !trivial_fn_p (t))
4083         TREE_VEC_ELT (info, 2) = t;
4084     }
4085
4086   return errorcount != save_errorcount;
4087 }
4088
4089 /* Helper function for handle_omp_array_sections.  Called recursively
4090    to handle multiple array-section-subscripts.  C is the clause,
4091    T current expression (initially OMP_CLAUSE_DECL), which is either
4092    a TREE_LIST for array-section-subscript (TREE_PURPOSE is low-bound
4093    expression if specified, TREE_VALUE length expression if specified,
4094    TREE_CHAIN is what it has been specified after, or some decl.
4095    TYPES vector is populated with array section types, MAYBE_ZERO_LEN
4096    set to true if any of the array-section-subscript could have length
4097    of zero (explicit or implicit), FIRST_NON_ONE is the index of the
4098    first array-section-subscript which is known not to have length
4099    of one.  Given say:
4100    map(a[:b][2:1][:c][:2][:d][e:f][2:5])
4101    FIRST_NON_ONE will be 3, array-section-subscript [:b], [2:1] and [:c]
4102    all are or may have length of 1, array-section-subscript [:2] is the
4103    first one knonwn not to have length 1.  For array-section-subscript
4104    <= FIRST_NON_ONE we diagnose non-contiguous arrays if low bound isn't
4105    0 or length isn't the array domain max + 1, for > FIRST_NON_ONE we
4106    can if MAYBE_ZERO_LEN is false.  MAYBE_ZERO_LEN will be true in the above
4107    case though, as some lengths could be zero.  */
4108
4109 static tree
4110 handle_omp_array_sections_1 (tree c, tree t, vec<tree> &types,
4111                              bool &maybe_zero_len, unsigned int &first_non_one)
4112 {
4113   tree ret, low_bound, length, type;
4114   if (TREE_CODE (t) != TREE_LIST)
4115     {
4116       if (error_operand_p (t))
4117         return error_mark_node;
4118       if (type_dependent_expression_p (t))
4119         return NULL_TREE;
4120       if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
4121         {
4122           if (processing_template_decl)
4123             return NULL_TREE;
4124           if (DECL_P (t))
4125             error_at (OMP_CLAUSE_LOCATION (c),
4126                       "%qD is not a variable in %qs clause", t,
4127                       omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4128           else
4129             error_at (OMP_CLAUSE_LOCATION (c),
4130                       "%qE is not a variable in %qs clause", t,
4131                       omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4132           return error_mark_node;
4133         }
4134       else if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND
4135                && TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
4136         {
4137           error_at (OMP_CLAUSE_LOCATION (c),
4138                     "%qD is threadprivate variable in %qs clause", t,
4139                     omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4140           return error_mark_node;
4141         }
4142       t = convert_from_reference (t);
4143       return t;
4144     }
4145
4146   ret = handle_omp_array_sections_1 (c, TREE_CHAIN (t), types,
4147                                      maybe_zero_len, first_non_one);
4148   if (ret == error_mark_node || ret == NULL_TREE)
4149     return ret;
4150
4151   type = TREE_TYPE (ret);
4152   low_bound = TREE_PURPOSE (t);
4153   length = TREE_VALUE (t);
4154   if ((low_bound && type_dependent_expression_p (low_bound))
4155       || (length && type_dependent_expression_p (length)))
4156     return NULL_TREE;
4157
4158   if (low_bound == error_mark_node || length == error_mark_node)
4159     return error_mark_node;
4160
4161   if (low_bound && !INTEGRAL_TYPE_P (TREE_TYPE (low_bound)))
4162     {
4163       error_at (OMP_CLAUSE_LOCATION (c),
4164                 "low bound %qE of array section does not have integral type",
4165                 low_bound);
4166       return error_mark_node;
4167     }
4168   if (length && !INTEGRAL_TYPE_P (TREE_TYPE (length)))
4169     {
4170       error_at (OMP_CLAUSE_LOCATION (c),
4171                 "length %qE of array section does not have integral type",
4172                 length);
4173       return error_mark_node;
4174     }
4175   if (low_bound
4176       && TREE_CODE (low_bound) == INTEGER_CST
4177       && TYPE_PRECISION (TREE_TYPE (low_bound))
4178          > TYPE_PRECISION (sizetype))
4179     low_bound = fold_convert (sizetype, low_bound);
4180   if (length
4181       && TREE_CODE (length) == INTEGER_CST
4182       && TYPE_PRECISION (TREE_TYPE (length))
4183          > TYPE_PRECISION (sizetype))
4184     length = fold_convert (sizetype, length);
4185   if (low_bound == NULL_TREE)
4186     low_bound = integer_zero_node;
4187
4188   if (length != NULL_TREE)
4189     {
4190       if (!integer_nonzerop (length))
4191         maybe_zero_len = true;
4192       if (first_non_one == types.length ()
4193           && (TREE_CODE (length) != INTEGER_CST || integer_onep (length)))
4194         first_non_one++;
4195     }
4196   if (TREE_CODE (type) == ARRAY_TYPE)
4197     {
4198       if (length == NULL_TREE
4199           && (TYPE_DOMAIN (type) == NULL_TREE
4200               || TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE))
4201         {
4202           error_at (OMP_CLAUSE_LOCATION (c),
4203                     "for unknown bound array type length expression must "
4204                     "be specified");
4205           return error_mark_node;
4206         }
4207       if (TREE_CODE (low_bound) == INTEGER_CST
4208           && tree_int_cst_sgn (low_bound) == -1)
4209         {
4210           error_at (OMP_CLAUSE_LOCATION (c),
4211                     "negative low bound in array section in %qs clause",
4212                     omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4213           return error_mark_node;
4214         }
4215       if (length != NULL_TREE
4216           && TREE_CODE (length) == INTEGER_CST
4217           && tree_int_cst_sgn (length) == -1)
4218         {
4219           error_at (OMP_CLAUSE_LOCATION (c),
4220                     "negative length in array section in %qs clause",
4221                     omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4222           return error_mark_node;
4223         }
4224       if (TYPE_DOMAIN (type)
4225           && TYPE_MAX_VALUE (TYPE_DOMAIN (type))
4226           && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
4227                         == INTEGER_CST)
4228         {
4229           tree size = size_binop (PLUS_EXPR,
4230                                   TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
4231                                   size_one_node);
4232           if (TREE_CODE (low_bound) == INTEGER_CST)
4233             {
4234               if (tree_int_cst_lt (size, low_bound))
4235                 {
4236                   error_at (OMP_CLAUSE_LOCATION (c),
4237                             "low bound %qE above array section size "
4238                             "in %qs clause", low_bound,
4239                             omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4240                   return error_mark_node;
4241                 }
4242               if (tree_int_cst_equal (size, low_bound))
4243                 maybe_zero_len = true;
4244               else if (length == NULL_TREE
4245                        && first_non_one == types.length ()
4246                        && tree_int_cst_equal
4247                             (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
4248                              low_bound))
4249                 first_non_one++;
4250             }
4251           else if (length == NULL_TREE)
4252             {
4253               maybe_zero_len = true;
4254               if (first_non_one == types.length ())
4255                 first_non_one++;
4256             }
4257           if (length && TREE_CODE (length) == INTEGER_CST)
4258             {
4259               if (tree_int_cst_lt (size, length))
4260                 {
4261                   error_at (OMP_CLAUSE_LOCATION (c),
4262                             "length %qE above array section size "
4263                             "in %qs clause", length,
4264                             omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4265                   return error_mark_node;
4266                 }
4267               if (TREE_CODE (low_bound) == INTEGER_CST)
4268                 {
4269                   tree lbpluslen
4270                     = size_binop (PLUS_EXPR,
4271                                   fold_convert (sizetype, low_bound),
4272                                   fold_convert (sizetype, length));
4273                   if (TREE_CODE (lbpluslen) == INTEGER_CST
4274                       && tree_int_cst_lt (size, lbpluslen))
4275                     {
4276                       error_at (OMP_CLAUSE_LOCATION (c),
4277                                 "high bound %qE above array section size "
4278                                 "in %qs clause", lbpluslen,
4279                                 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4280                       return error_mark_node;
4281                     }
4282                 }
4283             }
4284         }
4285       else if (length == NULL_TREE)
4286         {
4287           maybe_zero_len = true;
4288           if (first_non_one == types.length ())
4289             first_non_one++;
4290         }
4291
4292       /* For [lb:] we will need to evaluate lb more than once.  */
4293       if (length == NULL_TREE && OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND)
4294         {
4295           tree lb = cp_save_expr (low_bound);
4296           if (lb != low_bound)
4297             {
4298               TREE_PURPOSE (t) = lb;
4299               low_bound = lb;
4300             }
4301         }
4302     }
4303   else if (TREE_CODE (type) == POINTER_TYPE)
4304     {
4305       if (length == NULL_TREE)
4306         {
4307           error_at (OMP_CLAUSE_LOCATION (c),
4308                     "for pointer type length expression must be specified");
4309           return error_mark_node;
4310         }
4311       /* If there is a pointer type anywhere but in the very first
4312          array-section-subscript, the array section can't be contiguous.  */
4313       if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND
4314           && TREE_CODE (TREE_CHAIN (t)) == TREE_LIST)
4315         {
4316           error_at (OMP_CLAUSE_LOCATION (c),
4317                     "array section is not contiguous in %qs clause",
4318                     omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4319           return error_mark_node;
4320         }
4321     }
4322   else
4323     {
4324       error_at (OMP_CLAUSE_LOCATION (c),
4325                 "%qE does not have pointer or array type", ret);
4326       return error_mark_node;
4327     }
4328   if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND)
4329     types.safe_push (TREE_TYPE (ret));
4330   /* We will need to evaluate lb more than once.  */
4331   tree lb = cp_save_expr (low_bound);
4332   if (lb != low_bound)
4333     {
4334       TREE_PURPOSE (t) = lb;
4335       low_bound = lb;
4336     }
4337   ret = grok_array_decl (OMP_CLAUSE_LOCATION (c), ret, low_bound, false);
4338   return ret;
4339 }
4340
4341 /* Handle array sections for clause C.  */
4342
4343 static bool
4344 handle_omp_array_sections (tree c)
4345 {
4346   bool maybe_zero_len = false;
4347   unsigned int first_non_one = 0;
4348   vec<tree> types = vNULL;
4349   tree first = handle_omp_array_sections_1 (c, OMP_CLAUSE_DECL (c), types,
4350                                             maybe_zero_len, first_non_one);
4351   if (first == error_mark_node)
4352     {
4353       types.release ();
4354       return true;
4355     }
4356   if (first == NULL_TREE)
4357     {
4358       types.release ();
4359       return false;
4360     }
4361   if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND)
4362     {
4363       tree t = OMP_CLAUSE_DECL (c);
4364       tree tem = NULL_TREE;
4365       types.release ();
4366       if (processing_template_decl)
4367         return false;
4368       /* Need to evaluate side effects in the length expressions
4369          if any.  */
4370       while (TREE_CODE (t) == TREE_LIST)
4371         {
4372           if (TREE_VALUE (t) && TREE_SIDE_EFFECTS (TREE_VALUE (t)))
4373             {
4374               if (tem == NULL_TREE)
4375                 tem = TREE_VALUE (t);
4376               else
4377                 tem = build2 (COMPOUND_EXPR, TREE_TYPE (tem),
4378                               TREE_VALUE (t), tem);
4379             }
4380           t = TREE_CHAIN (t);
4381         }
4382       if (tem)
4383         first = build2 (COMPOUND_EXPR, TREE_TYPE (first), tem, first);
4384       OMP_CLAUSE_DECL (c) = first;
4385     }
4386   else
4387     {
4388       unsigned int num = types.length (), i;
4389       tree t, side_effects = NULL_TREE, size = NULL_TREE;
4390       tree condition = NULL_TREE;
4391
4392       if (int_size_in_bytes (TREE_TYPE (first)) <= 0)
4393         maybe_zero_len = true;
4394       if (processing_template_decl && maybe_zero_len)
4395         {
4396           types.release ();
4397           return false;
4398         }
4399
4400       for (i = num, t = OMP_CLAUSE_DECL (c); i > 0;
4401            t = TREE_CHAIN (t))
4402         {
4403           tree low_bound = TREE_PURPOSE (t);
4404           tree length = TREE_VALUE (t);
4405
4406           i--;
4407           if (low_bound
4408               && TREE_CODE (low_bound) == INTEGER_CST
4409               && TYPE_PRECISION (TREE_TYPE (low_bound))
4410                  > TYPE_PRECISION (sizetype))
4411             low_bound = fold_convert (sizetype, low_bound);
4412           if (length
4413               && TREE_CODE (length) == INTEGER_CST
4414               && TYPE_PRECISION (TREE_TYPE (length))
4415                  > TYPE_PRECISION (sizetype))
4416             length = fold_convert (sizetype, length);
4417           if (low_bound == NULL_TREE)
4418             low_bound = integer_zero_node;
4419           if (!maybe_zero_len && i > first_non_one)
4420             {
4421               if (integer_nonzerop (low_bound))
4422                 goto do_warn_noncontiguous;
4423               if (length != NULL_TREE
4424                   && TREE_CODE (length) == INTEGER_CST
4425                   && TYPE_DOMAIN (types[i])
4426                   && TYPE_MAX_VALUE (TYPE_DOMAIN (types[i]))
4427                   && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (types[i])))
4428                      == INTEGER_CST)
4429                 {
4430                   tree size;
4431                   size = size_binop (PLUS_EXPR,
4432                                      TYPE_MAX_VALUE (TYPE_DOMAIN (types[i])),
4433                                      size_one_node);
4434                   if (!tree_int_cst_equal (length, size))
4435                     {
4436                      do_warn_noncontiguous:
4437                       error_at (OMP_CLAUSE_LOCATION (c),
4438                                 "array section is not contiguous in %qs "
4439                                 "clause",
4440                                 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
4441                       types.release ();
4442                       return true;
4443                     }
4444                 }
4445               if (!processing_template_decl
4446                   && length != NULL_TREE
4447                   && TREE_SIDE_EFFECTS (length))
4448                 {
4449                   if (side_effects == NULL_TREE)
4450                     side_effects = length;
4451                   else
4452                     side_effects = build2 (COMPOUND_EXPR,
4453                                            TREE_TYPE (side_effects),
4454                                            length, side_effects);
4455                 }
4456             }
4457           else if (processing_template_decl)
4458             continue;
4459           else
4460             {
4461               tree l;
4462
4463               if (i > first_non_one && length && integer_nonzerop (length))
4464                 continue;
4465               if (length)
4466                 l = fold_convert (sizetype, length);
4467               else
4468                 {
4469                   l = size_binop (PLUS_EXPR,
4470                                   TYPE_MAX_VALUE (TYPE_DOMAIN (types[i])),
4471                                   size_one_node);
4472                   l = size_binop (MINUS_EXPR, l,
4473                                   fold_convert (sizetype, low_bound));
4474                 }
4475               if (i > first_non_one)
4476                 {
4477                   l = fold_build2 (NE_EXPR, boolean_type_node, l,
4478                                    size_zero_node);
4479                   if (condition == NULL_TREE)
4480                     condition = l;
4481                   else
4482                     condition = fold_build2 (BIT_AND_EXPR, boolean_type_node,
4483                                              l, condition);
4484                 }
4485               else if (size == NULL_TREE)
4486                 {
4487                   size = size_in_bytes (TREE_TYPE (types[i]));
4488                   size = size_binop (MULT_EXPR, size, l);
4489                   if (condition)
4490                     size = fold_build3 (COND_EXPR, sizetype, condition,
4491                                         size, size_zero_node);
4492                 }
4493               else
4494                 size = size_binop (MULT_EXPR, size, l);
4495             }
4496         }
4497       types.release ();
4498       if (!processing_template_decl)
4499         {
4500           if (side_effects)
4501             size = build2 (COMPOUND_EXPR, sizetype, side_effects, size);
4502           OMP_CLAUSE_DECL (c) = first;
4503           OMP_CLAUSE_SIZE (c) = size;
4504           if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_MAP)
4505             return false;
4506           tree c2 = build_omp_clause (OMP_CLAUSE_LOCATION (c),
4507                                       OMP_CLAUSE_MAP);
4508           OMP_CLAUSE_MAP_KIND (c2) = OMP_CLAUSE_MAP_POINTER;
4509           if (!cxx_mark_addressable (t))
4510             return false;
4511           OMP_CLAUSE_DECL (c2) = t;
4512           t = build_fold_addr_expr (first);
4513           t = fold_convert_loc (OMP_CLAUSE_LOCATION (c),
4514                                 ptrdiff_type_node, t);
4515           tree ptr = OMP_CLAUSE_DECL (c2);
4516           ptr = convert_from_reference (ptr);
4517           if (!POINTER_TYPE_P (TREE_TYPE (ptr)))
4518             ptr = build_fold_addr_expr (ptr);
4519           t = fold_build2_loc (OMP_CLAUSE_LOCATION (c), MINUS_EXPR,
4520                                ptrdiff_type_node, t,
4521                                fold_convert_loc (OMP_CLAUSE_LOCATION (c),
4522                                                  ptrdiff_type_node, ptr));
4523           OMP_CLAUSE_SIZE (c2) = t;
4524           OMP_CLAUSE_CHAIN (c2) = OMP_CLAUSE_CHAIN (c);
4525           OMP_CLAUSE_CHAIN (c) = c2;
4526           ptr = OMP_CLAUSE_DECL (c2);
4527           if (TREE_CODE (TREE_TYPE (ptr)) == REFERENCE_TYPE
4528               && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (ptr))))
4529             {
4530               tree c3 = build_omp_clause (OMP_CLAUSE_LOCATION (c),
4531                                           OMP_CLAUSE_MAP);
4532               OMP_CLAUSE_MAP_KIND (c3) = OMP_CLAUSE_MAP_POINTER;
4533               OMP_CLAUSE_DECL (c3) = ptr;
4534               OMP_CLAUSE_DECL (c2) = convert_from_reference (ptr);
4535               OMP_CLAUSE_SIZE (c3) = size_zero_node;
4536               OMP_CLAUSE_CHAIN (c3) = OMP_CLAUSE_CHAIN (c2);
4537               OMP_CLAUSE_CHAIN (c2) = c3;
4538             }
4539         }
4540     }
4541   return false;
4542 }
4543
4544 /* Return identifier to look up for omp declare reduction.  */
4545
4546 tree
4547 omp_reduction_id (enum tree_code reduction_code, tree reduction_id, tree type)
4548 {
4549   const char *p = NULL;
4550   const char *m = NULL;
4551   switch (reduction_code)
4552     {
4553     case PLUS_EXPR:
4554     case MULT_EXPR:
4555     case MINUS_EXPR:
4556     case BIT_AND_EXPR:
4557     case BIT_XOR_EXPR:
4558     case BIT_IOR_EXPR:
4559     case TRUTH_ANDIF_EXPR:
4560     case TRUTH_ORIF_EXPR:
4561       reduction_id = ansi_opname (reduction_code);
4562       break;
4563     case MIN_EXPR:
4564       p = "min";
4565       break;
4566     case MAX_EXPR:
4567       p = "max";
4568       break;
4569     default:
4570       break;
4571     }
4572
4573   if (p == NULL)
4574     {
4575       if (TREE_CODE (reduction_id) != IDENTIFIER_NODE)
4576         return error_mark_node;
4577       p = IDENTIFIER_POINTER (reduction_id);
4578     }
4579
4580   if (type != NULL_TREE)
4581     m = mangle_type_string (TYPE_MAIN_VARIANT (type));
4582
4583   const char prefix[] = "omp declare reduction ";
4584   size_t lenp = sizeof (prefix);
4585   if (strncmp (p, prefix, lenp - 1) == 0)
4586     lenp = 1;
4587   size_t len = strlen (p);
4588   size_t lenm = m ? strlen (m) + 1 : 0;
4589   char *name = XALLOCAVEC (char, lenp + len + lenm);
4590   if (lenp > 1)
4591     memcpy (name, prefix, lenp - 1);
4592   memcpy (name + lenp - 1, p, len + 1);
4593   if (m)
4594     {
4595       name[lenp + len - 1] = '~';
4596       memcpy (name + lenp + len, m, lenm);
4597     }
4598   return get_identifier (name);
4599 }
4600
4601 /* Lookup OpenMP UDR ID for TYPE, return the corresponding artificial
4602    FUNCTION_DECL or NULL_TREE if not found.  */
4603
4604 static tree
4605 omp_reduction_lookup (location_t loc, tree id, tree type, tree *baselinkp,
4606                       vec<tree> *ambiguousp)
4607 {
4608   tree orig_id = id;
4609   tree baselink = NULL_TREE;
4610   if (identifier_p (id))
4611     {
4612       cp_id_kind idk;
4613       bool nonint_cst_expression_p;
4614       const char *error_msg;
4615       id = omp_reduction_id (ERROR_MARK, id, type);
4616       tree decl = lookup_name (id);
4617       if (decl == NULL_TREE)
4618         decl = error_mark_node;
4619       id = finish_id_expression (id, decl, NULL_TREE, &idk, false, true,
4620                                  &nonint_cst_expression_p, false, true, false,
4621                                  false, &error_msg, loc);
4622       if (idk == CP_ID_KIND_UNQUALIFIED
4623           && identifier_p (id))
4624         {
4625           vec<tree, va_gc> *args = NULL;
4626           vec_safe_push (args, build_reference_type (type));
4627           id = perform_koenig_lookup (id, args, false, tf_none);
4628         }
4629     }
4630   else if (TREE_CODE (id) == SCOPE_REF)
4631     id = lookup_qualified_name (TREE_OPERAND (id, 0),
4632                                 omp_reduction_id (ERROR_MARK,
4633                                                   TREE_OPERAND (id, 1),
4634                                                   type),
4635                                 false, false);
4636   tree fns = id;
4637   if (id && is_overloaded_fn (id))
4638     id = get_fns (id);
4639   for (; id; id = OVL_NEXT (id))
4640     {
4641       tree fndecl = OVL_CURRENT (id);
4642       if (TREE_CODE (fndecl) == FUNCTION_DECL)
4643         {
4644           tree argtype = TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (fndecl)));
4645           if (same_type_p (TREE_TYPE (argtype), type))
4646             break;
4647         }
4648     }
4649   if (id && BASELINK_P (fns))
4650     {
4651       if (baselinkp)
4652         *baselinkp = fns;
4653       else
4654         baselink = fns;
4655     }
4656   if (id == NULL_TREE && CLASS_TYPE_P (type) && TYPE_BINFO (type))
4657     {
4658       vec<tree> ambiguous = vNULL;
4659       tree binfo = TYPE_BINFO (type), base_binfo, ret = NULL_TREE;
4660       unsigned int ix;
4661       if (ambiguousp == NULL)
4662         ambiguousp = &ambiguous;
4663       for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
4664         {
4665           id = omp_reduction_lookup (loc, orig_id, BINFO_TYPE (base_binfo),
4666                                      baselinkp ? baselinkp : &baselink,
4667                                      ambiguousp);
4668           if (id == NULL_TREE)
4669             continue;
4670           if (!ambiguousp->is_empty ())
4671             ambiguousp->safe_push (id);
4672           else if (ret != NULL_TREE)
4673             {
4674               ambiguousp->safe_push (ret);
4675               ambiguousp->safe_push (id);
4676               ret = NULL_TREE;
4677             }
4678           else
4679             ret = id;
4680         }
4681       if (ambiguousp != &ambiguous)
4682         return ret;
4683       if (!ambiguous.is_empty ())
4684         {
4685           const char *str = _("candidates are:");
4686           unsigned int idx;
4687           tree udr;
4688           error_at (loc, "user defined reduction lookup is ambiguous");
4689           FOR_EACH_VEC_ELT (ambiguous, idx, udr)
4690             {
4691               inform (DECL_SOURCE_LOCATION (udr), "%s %#D", str, udr);
4692               if (idx == 0)
4693                 str = get_spaces (str);
4694             }
4695           ambiguous.release ();
4696           ret = error_mark_node;
4697           baselink = NULL_TREE;
4698         }
4699       id = ret;
4700     }
4701   if (id && baselink)
4702     perform_or_defer_access_check (BASELINK_BINFO (baselink),
4703                                    id, id, tf_warning_or_error);
4704   return id;
4705 }
4706
4707 /* Helper function for cp_parser_omp_declare_reduction_exprs
4708    and tsubst_omp_udr.
4709    Remove CLEANUP_STMT for data (omp_priv variable).
4710    Also append INIT_EXPR for DECL_INITIAL of omp_priv after its
4711    DECL_EXPR.  */
4712
4713 tree
4714 cp_remove_omp_priv_cleanup_stmt (tree *tp, int *walk_subtrees, void *data)
4715 {
4716   if (TYPE_P (*tp))
4717     *walk_subtrees = 0;
4718   else if (TREE_CODE (*tp) == CLEANUP_STMT && CLEANUP_DECL (*tp) == (tree) data)
4719     *tp = CLEANUP_BODY (*tp);
4720   else if (TREE_CODE (*tp) == DECL_EXPR)
4721     {
4722       tree decl = DECL_EXPR_DECL (*tp);
4723       if (!processing_template_decl
4724           && decl == (tree) data
4725           && DECL_INITIAL (decl)
4726           && DECL_INITIAL (decl) != error_mark_node)
4727         {
4728           tree list = NULL_TREE;
4729           append_to_statement_list_force (*tp, &list);
4730           tree init_expr = build2 (INIT_EXPR, void_type_node,
4731                                    decl, DECL_INITIAL (decl));
4732           DECL_INITIAL (decl) = NULL_TREE;
4733           append_to_statement_list_force (init_expr, &list);
4734           *tp = list;
4735         }
4736     }
4737   return NULL_TREE;
4738 }
4739
4740 /* Data passed from cp_check_omp_declare_reduction to
4741    cp_check_omp_declare_reduction_r.  */
4742
4743 struct cp_check_omp_declare_reduction_data
4744 {
4745   location_t loc;
4746   tree stmts[7];
4747   bool combiner_p;
4748 };
4749
4750 /* Helper function for cp_check_omp_declare_reduction, called via
4751    cp_walk_tree.  */
4752
4753 static tree
4754 cp_check_omp_declare_reduction_r (tree *tp, int *, void *data)
4755 {
4756   struct cp_check_omp_declare_reduction_data *udr_data
4757     = (struct cp_check_omp_declare_reduction_data *) data;
4758   if (SSA_VAR_P (*tp)
4759       && !DECL_ARTIFICIAL (*tp)
4760       && *tp != DECL_EXPR_DECL (udr_data->stmts[udr_data->combiner_p ? 0 : 3])
4761       && *tp != DECL_EXPR_DECL (udr_data->stmts[udr_data->combiner_p ? 1 : 4]))
4762     {
4763       location_t loc = udr_data->loc;
4764       if (udr_data->combiner_p)
4765         error_at (loc, "%<#pragma omp declare reduction%> combiner refers to "
4766                        "variable %qD which is not %<omp_out%> nor %<omp_in%>",
4767                   *tp);
4768       else
4769         error_at (loc, "%<#pragma omp declare reduction%> initializer refers "
4770                        "to variable %qD which is not %<omp_priv%> nor "
4771                        "%<omp_orig%>",
4772                   *tp);
4773       return *tp;
4774     }
4775   return NULL_TREE;
4776 }
4777
4778 /* Diagnose violation of OpenMP #pragma omp declare reduction restrictions.  */
4779
4780 void
4781 cp_check_omp_declare_reduction (tree udr)
4782 {
4783   tree type = TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (udr)));
4784   gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
4785   type = TREE_TYPE (type);
4786   int i;
4787   location_t loc = DECL_SOURCE_LOCATION (udr);
4788
4789   if (type == error_mark_node)
4790     return;
4791   if (ARITHMETIC_TYPE_P (type))
4792     {
4793       static enum tree_code predef_codes[]
4794         = { PLUS_EXPR, MULT_EXPR, MINUS_EXPR, BIT_AND_EXPR, BIT_XOR_EXPR,
4795             BIT_IOR_EXPR, TRUTH_ANDIF_EXPR, TRUTH_ORIF_EXPR };
4796       for (i = 0; i < 8; i++)
4797         {
4798           tree id = omp_reduction_id (predef_codes[i], NULL_TREE, NULL_TREE);
4799           const char *n1 = IDENTIFIER_POINTER (DECL_NAME (udr));
4800           const char *n2 = IDENTIFIER_POINTER (id);
4801           if (strncmp (n1, n2, IDENTIFIER_LENGTH (id)) == 0
4802               && (n1[IDENTIFIER_LENGTH (id)] == '~'
4803                   || n1[IDENTIFIER_LENGTH (id)] == '\0'))
4804             break;
4805         }
4806
4807       if (i == 8
4808           && TREE_CODE (type) != COMPLEX_EXPR)
4809         {
4810           const char prefix_minmax[] = "omp declare reduction m";
4811           size_t prefix_size = sizeof (prefix_minmax) - 1;
4812           const char *n = IDENTIFIER_POINTER (DECL_NAME (udr));
4813           if (strncmp (IDENTIFIER_POINTER (DECL_NAME (udr)),
4814                        prefix_minmax, prefix_size) == 0
4815               && ((n[prefix_size] == 'i' && n[prefix_size + 1] == 'n')
4816                   || (n[prefix_size] == 'a' && n[prefix_size + 1] == 'x'))
4817               && (n[prefix_size + 2] == '~' || n[prefix_size + 2] == '\0'))
4818             i = 0;
4819         }
4820       if (i < 8)
4821         {
4822           error_at (loc, "predeclared arithmetic type %qT in "
4823                          "%<#pragma omp declare reduction%>", type);
4824           return;
4825         }
4826     }
4827   else if (TREE_CODE (type) == FUNCTION_TYPE
4828            || TREE_CODE (type) == METHOD_TYPE
4829            || TREE_CODE (type) == ARRAY_TYPE)
4830     {
4831       error_at (loc, "function or array type %qT in "
4832                      "%<#pragma omp declare reduction%>", type);
4833       return;
4834     }
4835   else if (TREE_CODE (type) == REFERENCE_TYPE)
4836     {
4837       error_at (loc, "reference type %qT in %<#pragma omp declare reduction%>",
4838                 type);
4839       return;
4840     }
4841   else if (TYPE_QUALS_NO_ADDR_SPACE (type))
4842     {
4843       error_at (loc, "const, volatile or __restrict qualified type %qT in "
4844                      "%<#pragma omp declare reduction%>", type);
4845       return;
4846     }
4847
4848   tree body = DECL_SAVED_TREE (udr);
4849   if (body == NULL_TREE || TREE_CODE (body) != STATEMENT_LIST)
4850     return;
4851
4852   tree_stmt_iterator tsi;
4853   struct cp_check_omp_declare_reduction_data data;
4854   memset (data.stmts, 0, sizeof data.stmts);
4855   for (i = 0, tsi = tsi_start (body);
4856        i < 7 && !tsi_end_p (tsi);
4857        i++, tsi_next (&tsi))
4858     data.stmts[i] = tsi_stmt (tsi);
4859   data.loc = loc;
4860   gcc_assert (tsi_end_p (tsi));
4861   if (i >= 3)
4862     {
4863       gcc_assert (TREE_CODE (data.stmts[0]) == DECL_EXPR
4864                   && TREE_CODE (data.stmts[1]) == DECL_EXPR);
4865       if (TREE_NO_WARNING (DECL_EXPR_DECL (data.stmts[0])))
4866         return;
4867       data.combiner_p = true;
4868       if (cp_walk_tree (&data.stmts[2], cp_check_omp_declare_reduction_r,
4869                         &data, NULL))
4870         TREE_NO_WARNING (DECL_EXPR_DECL (data.stmts[0])) = 1;
4871     }
4872   if (i >= 6)
4873     {
4874       gcc_assert (TREE_CODE (data.stmts[3]) == DECL_EXPR
4875                   && TREE_CODE (data.stmts[4]) == DECL_EXPR);
4876       data.combiner_p = false;
4877       if (cp_walk_tree (&data.stmts[5], cp_check_omp_declare_reduction_r,
4878                         &data, NULL)
4879           || cp_walk_tree (&DECL_INITIAL (DECL_EXPR_DECL (data.stmts[3])),
4880                            cp_check_omp_declare_reduction_r, &data, NULL))
4881         TREE_NO_WARNING (DECL_EXPR_DECL (data.stmts[0])) = 1;
4882       if (i == 7)
4883         gcc_assert (TREE_CODE (data.stmts[6]) == DECL_EXPR);
4884     }
4885 }
4886
4887 /* Helper function of finish_omp_clauses.  Clone STMT as if we were making
4888    an inline call.  But, remap
4889    the OMP_DECL1 VAR_DECL (omp_out resp. omp_orig) to PLACEHOLDER
4890    and OMP_DECL2 VAR_DECL (omp_in resp. omp_priv) to DECL.  */
4891
4892 static tree
4893 clone_omp_udr (tree stmt, tree omp_decl1, tree omp_decl2,
4894                tree decl, tree placeholder)
4895 {
4896   copy_body_data id;
4897   struct pointer_map_t *decl_map = pointer_map_create ();
4898
4899   *pointer_map_insert (decl_map, omp_decl1) = placeholder;
4900   *pointer_map_insert (decl_map, omp_decl2) = decl;
4901   memset (&id, 0, sizeof (id));
4902   id.src_fn = DECL_CONTEXT (omp_decl1);
4903   id.dst_fn = current_function_decl;
4904   id.src_cfun = DECL_STRUCT_FUNCTION (id.src_fn);
4905   id.decl_map = decl_map;
4906
4907   id.copy_decl = copy_decl_no_change;
4908   id.transform_call_graph_edges = CB_CGE_DUPLICATE;
4909   id.transform_new_cfg = true;
4910   id.transform_return_to_modify = false;
4911   id.transform_lang_insert_block = NULL;
4912   id.eh_lp_nr = 0;
4913   walk_tree (&stmt, copy_tree_body_r, &id, NULL);
4914   pointer_map_destroy (decl_map);
4915   return stmt;
4916 }
4917
4918 /* Helper function of finish_omp_clauses, called via cp_walk_tree.
4919    Find OMP_CLAUSE_PLACEHOLDER (passed in DATA) in *TP.  */
4920
4921 static tree
4922 find_omp_placeholder_r (tree *tp, int *, void *data)
4923 {
4924   if (*tp == (tree) data)
4925     return *tp;
4926   return NULL_TREE;
4927 }
4928
4929 /* Helper function of finish_omp_clauses.  Handle OMP_CLAUSE_REDUCTION C.
4930    Return true if there is some error and the clause should be removed.  */
4931
4932 static bool
4933 finish_omp_reduction_clause (tree c, bool *need_default_ctor, bool *need_dtor)
4934 {
4935   tree t = OMP_CLAUSE_DECL (c);
4936   bool predefined = false;
4937   tree type = TREE_TYPE (t);
4938   if (TREE_CODE (type) == REFERENCE_TYPE)
4939     type = TREE_TYPE (type);
4940   if (ARITHMETIC_TYPE_P (type))
4941     switch (OMP_CLAUSE_REDUCTION_CODE (c))
4942       {
4943       case PLUS_EXPR:
4944       case MULT_EXPR:
4945       case MINUS_EXPR:
4946         predefined = true;
4947         break;
4948       case MIN_EXPR:
4949       case MAX_EXPR:
4950         if (TREE_CODE (type) == COMPLEX_TYPE)
4951           break;
4952         predefined = true;
4953         break;
4954       case BIT_AND_EXPR:
4955       case BIT_IOR_EXPR:
4956       case BIT_XOR_EXPR:
4957       case TRUTH_ANDIF_EXPR:
4958       case TRUTH_ORIF_EXPR:
4959         if (FLOAT_TYPE_P (type))
4960           break;
4961         predefined = true;
4962         break;
4963       default:
4964         break;
4965       }
4966   else if (TREE_CODE (type) == ARRAY_TYPE || TYPE_READONLY (type))
4967     {
4968       error ("%qE has invalid type for %<reduction%>", t);
4969       return true;
4970     }
4971   else if (!processing_template_decl)
4972     {
4973       t = require_complete_type (t);
4974       if (t == error_mark_node)
4975         return true;
4976       OMP_CLAUSE_DECL (c) = t;
4977     }
4978
4979   if (predefined)
4980     {
4981       OMP_CLAUSE_REDUCTION_PLACEHOLDER (c) = NULL_TREE;
4982       return false;
4983     }
4984   else if (processing_template_decl)
4985     return false;
4986
4987   tree id = OMP_CLAUSE_REDUCTION_PLACEHOLDER (c);
4988
4989   type = TYPE_MAIN_VARIANT (TREE_TYPE (t));
4990   if (TREE_CODE (type) == REFERENCE_TYPE)
4991     type = TREE_TYPE (type);
4992   OMP_CLAUSE_REDUCTION_PLACEHOLDER (c) = NULL_TREE;
4993   if (id == NULL_TREE)
4994     id = omp_reduction_id (OMP_CLAUSE_REDUCTION_CODE (c),
4995                            NULL_TREE, NULL_TREE);
4996   id = omp_reduction_lookup (OMP_CLAUSE_LOCATION (c), id, type, NULL, NULL);
4997   if (id)
4998     {
4999       if (id == error_mark_node)
5000         return true;
5001       id = OVL_CURRENT (id);
5002       mark_used (id);
5003       tree body = DECL_SAVED_TREE (id);
5004       if (TREE_CODE (body) == STATEMENT_LIST)
5005         {
5006           tree_stmt_iterator tsi;
5007           tree placeholder = NULL_TREE;
5008           int i;
5009           tree stmts[7];
5010           tree atype = TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (id)));
5011           atype = TREE_TYPE (atype);
5012           bool need_static_cast = !same_type_p (type, atype);
5013           memset (stmts, 0, sizeof stmts);
5014           for (i = 0, tsi = tsi_start (body);
5015                i < 7 && !tsi_end_p (tsi);
5016                i++, tsi_next (&tsi))
5017             stmts[i] = tsi_stmt (tsi);
5018           gcc_assert (tsi_end_p (tsi));
5019
5020           if (i >= 3)
5021             {
5022               gcc_assert (TREE_CODE (stmts[0]) == DECL_EXPR
5023                           && TREE_CODE (stmts[1]) == DECL_EXPR);
5024               placeholder = build_lang_decl (VAR_DECL, NULL_TREE, type);
5025               DECL_ARTIFICIAL (placeholder) = 1;
5026               DECL_IGNORED_P (placeholder) = 1;
5027               OMP_CLAUSE_REDUCTION_PLACEHOLDER (c) = placeholder;
5028               if (TREE_ADDRESSABLE (DECL_EXPR_DECL (stmts[0])))
5029                 cxx_mark_addressable (placeholder);
5030               if (TREE_ADDRESSABLE (DECL_EXPR_DECL (stmts[1]))
5031                   && TREE_CODE (TREE_TYPE (OMP_CLAUSE_DECL (c)))
5032                      != REFERENCE_TYPE)
5033                 cxx_mark_addressable (OMP_CLAUSE_DECL (c));
5034               tree omp_out = placeholder;
5035               tree omp_in = convert_from_reference (OMP_CLAUSE_DECL (c));
5036               if (need_static_cast)
5037                 {
5038                   tree rtype = build_reference_type (atype);
5039                   omp_out = build_static_cast (rtype, omp_out,
5040                                                tf_warning_or_error);
5041                   omp_in = build_static_cast (rtype, omp_in,
5042                                               tf_warning_or_error);
5043                   if (omp_out == error_mark_node || omp_in == error_mark_node)
5044                     return true;
5045                   omp_out = convert_from_reference (omp_out);
5046                   omp_in = convert_from_reference (omp_in);
5047                 }
5048               OMP_CLAUSE_REDUCTION_MERGE (c)
5049                 = clone_omp_udr (stmts[2], DECL_EXPR_DECL (stmts[0]),
5050                                  DECL_EXPR_DECL (stmts[1]), omp_in, omp_out);
5051             }
5052           if (i >= 6)
5053             {
5054               gcc_assert (TREE_CODE (stmts[3]) == DECL_EXPR
5055                           && TREE_CODE (stmts[4]) == DECL_EXPR);
5056               if (TREE_ADDRESSABLE (DECL_EXPR_DECL (stmts[3])))
5057                 cxx_mark_addressable (OMP_CLAUSE_DECL (c));
5058               if (TREE_ADDRESSABLE (DECL_EXPR_DECL (stmts[4])))
5059                 cxx_mark_addressable (placeholder);
5060               tree omp_priv = convert_from_reference (OMP_CLAUSE_DECL (c));
5061               tree omp_orig = placeholder;
5062               if (need_static_cast)
5063                 {
5064                   if (i == 7)
5065                     {
5066                       error_at (OMP_CLAUSE_LOCATION (c),
5067                                 "user defined reduction with constructor "
5068                                 "initializer for base class %qT", atype);
5069                       return true;
5070                     }
5071                   tree rtype = build_reference_type (atype);
5072                   omp_priv = build_static_cast (rtype, omp_priv,
5073                                                 tf_warning_or_error);
5074                   omp_orig = build_static_cast (rtype, omp_orig,
5075                                                 tf_warning_or_error);
5076                   if (omp_priv == error_mark_node
5077                       || omp_orig == error_mark_node)
5078                     return true;
5079                   omp_priv = convert_from_reference (omp_priv);
5080                   omp_orig = convert_from_reference (omp_orig);
5081                 }
5082               if (i == 6)
5083                 *need_default_ctor = true;
5084               OMP_CLAUSE_REDUCTION_INIT (c)
5085                 = clone_omp_udr (stmts[5], DECL_EXPR_DECL (stmts[4]),
5086                                  DECL_EXPR_DECL (stmts[3]),
5087                                  omp_priv, omp_orig);
5088               if (cp_walk_tree (&OMP_CLAUSE_REDUCTION_INIT (c),
5089                                 find_omp_placeholder_r, placeholder, NULL))
5090                 OMP_CLAUSE_REDUCTION_OMP_ORIG_REF (c) = 1;
5091             }
5092           else if (i >= 3)
5093             {
5094               if (CLASS_TYPE_P (type) && !pod_type_p (type))
5095                 *need_default_ctor = true;
5096               else
5097                 {
5098                   tree init;
5099                   tree v = convert_from_reference (t);
5100                   if (AGGREGATE_TYPE_P (TREE_TYPE (v)))
5101                     init = build_constructor (TREE_TYPE (v), NULL);
5102                   else
5103                     init = fold_convert (TREE_TYPE (v), integer_zero_node);
5104                   OMP_CLAUSE_REDUCTION_INIT (c)
5105                     = build2 (INIT_EXPR, TREE_TYPE (v), v, init);
5106                 }
5107             }
5108         }
5109     }
5110   if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (c))
5111     *need_dtor = true;
5112   else
5113     {
5114       error ("user defined reduction not found for %qD", t);
5115       return true;
5116     }
5117   return false;
5118 }
5119
5120 /* For all elements of CLAUSES, validate them vs OpenMP constraints.
5121    Remove any elements from the list that are invalid.  */
5122
5123 tree
5124 finish_omp_clauses (tree clauses)
5125 {
5126   bitmap_head generic_head, firstprivate_head, lastprivate_head;
5127   bitmap_head aligned_head;
5128   tree c, t, *pc = &clauses;
5129   bool branch_seen = false;
5130   bool copyprivate_seen = false;
5131
5132   bitmap_obstack_initialize (NULL);
5133   bitmap_initialize (&generic_head, &bitmap_default_obstack);
5134   bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
5135   bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
5136   bitmap_initialize (&aligned_head, &bitmap_default_obstack);
5137
5138   for (pc = &clauses, c = clauses; c ; c = *pc)
5139     {
5140       bool remove = false;
5141
5142       switch (OMP_CLAUSE_CODE (c))
5143         {
5144         case OMP_CLAUSE_SHARED:
5145           goto check_dup_generic;
5146         case OMP_CLAUSE_PRIVATE:
5147           goto check_dup_generic;
5148         case OMP_CLAUSE_REDUCTION:
5149           goto check_dup_generic;
5150         case OMP_CLAUSE_COPYPRIVATE:
5151           copyprivate_seen = true;
5152           goto check_dup_generic;
5153         case OMP_CLAUSE_COPYIN:
5154           goto check_dup_generic;
5155         case OMP_CLAUSE_LINEAR:
5156           t = OMP_CLAUSE_DECL (c);
5157           if (!type_dependent_expression_p (t)
5158               && !INTEGRAL_TYPE_P (TREE_TYPE (t))
5159               && TREE_CODE (TREE_TYPE (t)) != POINTER_TYPE)
5160             {
5161               error ("linear clause applied to non-integral non-pointer "
5162                      "variable with %qT type", TREE_TYPE (t));
5163               remove = true;
5164               break;
5165             }
5166           t = OMP_CLAUSE_LINEAR_STEP (c);
5167           if (t == NULL_TREE)
5168             t = integer_one_node;
5169           if (t == error_mark_node)
5170             remove = true;
5171           else if (!type_dependent_expression_p (t)
5172                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5173             {
5174               error ("linear step expression must be integral");
5175               remove = true;
5176             }
5177           else
5178             {
5179               t = mark_rvalue_use (t);
5180               if (!processing_template_decl)
5181                 {
5182                   t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5183                   if (TREE_CODE (TREE_TYPE (OMP_CLAUSE_DECL (c)))
5184                       == POINTER_TYPE)
5185                     {
5186                       t = pointer_int_sum (OMP_CLAUSE_LOCATION (c), PLUS_EXPR,
5187                                            OMP_CLAUSE_DECL (c), t);
5188                       t = fold_build2_loc (OMP_CLAUSE_LOCATION (c),
5189                                            MINUS_EXPR, sizetype, t,
5190                                            OMP_CLAUSE_DECL (c));
5191                       if (t == error_mark_node)
5192                         remove = true;
5193                     }
5194                 }
5195               OMP_CLAUSE_LINEAR_STEP (c) = t;
5196             }
5197           goto check_dup_generic;
5198         check_dup_generic:
5199           t = OMP_CLAUSE_DECL (c);
5200           if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
5201             {
5202               if (processing_template_decl)
5203                 break;
5204               if (DECL_P (t))
5205                 error ("%qD is not a variable in clause %qs", t,
5206                        omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5207               else
5208                 error ("%qE is not a variable in clause %qs", t,
5209                        omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5210               remove = true;
5211             }
5212           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
5213                    || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
5214                    || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
5215             {
5216               error ("%qD appears more than once in data clauses", t);
5217               remove = true;
5218             }
5219           else
5220             bitmap_set_bit (&generic_head, DECL_UID (t));
5221           break;
5222
5223         case OMP_CLAUSE_FIRSTPRIVATE:
5224           t = OMP_CLAUSE_DECL (c);
5225           if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
5226             {
5227               if (processing_template_decl)
5228                 break;
5229               if (DECL_P (t))
5230                 error ("%qD is not a variable in clause %<firstprivate%>", t);
5231               else
5232                 error ("%qE is not a variable in clause %<firstprivate%>", t);
5233               remove = true;
5234             }
5235           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
5236                    || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
5237             {
5238               error ("%qD appears more than once in data clauses", t);
5239               remove = true;
5240             }
5241           else
5242             bitmap_set_bit (&firstprivate_head, DECL_UID (t));
5243           break;
5244
5245         case OMP_CLAUSE_LASTPRIVATE:
5246           t = OMP_CLAUSE_DECL (c);
5247           if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
5248             {
5249               if (processing_template_decl)
5250                 break;
5251               if (DECL_P (t))
5252                 error ("%qD is not a variable in clause %<lastprivate%>", t);
5253               else
5254                 error ("%qE is not a variable in clause %<lastprivate%>", t);
5255               remove = true;
5256             }
5257           else if (bitmap_bit_p (&generic_head, DECL_UID (t))
5258                    || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
5259             {
5260               error ("%qD appears more than once in data clauses", t);
5261               remove = true;
5262             }
5263           else
5264             bitmap_set_bit (&lastprivate_head, DECL_UID (t));
5265           break;
5266
5267         case OMP_CLAUSE_IF:
5268           t = OMP_CLAUSE_IF_EXPR (c);
5269           t = maybe_convert_cond (t);
5270           if (t == error_mark_node)
5271             remove = true;
5272           else if (!processing_template_decl)
5273             t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5274           OMP_CLAUSE_IF_EXPR (c) = t;
5275           break;
5276
5277         case OMP_CLAUSE_FINAL:
5278           t = OMP_CLAUSE_FINAL_EXPR (c);
5279           t = maybe_convert_cond (t);
5280           if (t == error_mark_node)
5281             remove = true;
5282           else if (!processing_template_decl)
5283             t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5284           OMP_CLAUSE_FINAL_EXPR (c) = t;
5285           break;
5286
5287         case OMP_CLAUSE_NUM_THREADS:
5288           t = OMP_CLAUSE_NUM_THREADS_EXPR (c);
5289           if (t == error_mark_node)
5290             remove = true;
5291           else if (!type_dependent_expression_p (t)
5292                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5293             {
5294               error ("num_threads expression must be integral");
5295               remove = true;
5296             }
5297           else
5298             {
5299               t = mark_rvalue_use (t);
5300               if (!processing_template_decl)
5301                 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5302               OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
5303             }
5304           break;
5305
5306         case OMP_CLAUSE_SCHEDULE:
5307           t = OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c);
5308           if (t == NULL)
5309             ;
5310           else if (t == error_mark_node)
5311             remove = true;
5312           else if (!type_dependent_expression_p (t)
5313                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5314             {
5315               error ("schedule chunk size expression must be integral");
5316               remove = true;
5317             }
5318           else
5319             {
5320               t = mark_rvalue_use (t);
5321               if (!processing_template_decl)
5322                 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5323               OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
5324             }
5325           break;
5326
5327         case OMP_CLAUSE_SIMDLEN:
5328         case OMP_CLAUSE_SAFELEN:
5329           t = OMP_CLAUSE_OPERAND (c, 0);
5330           if (t == error_mark_node)
5331             remove = true;
5332           else if (!type_dependent_expression_p (t)
5333                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5334             {
5335               error ("%qs length expression must be integral",
5336                      omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5337               remove = true;
5338             }
5339           else
5340             {
5341               t = mark_rvalue_use (t);
5342               t = maybe_constant_value (t);
5343               if (!processing_template_decl)
5344                 {
5345                   if (TREE_CODE (t) != INTEGER_CST
5346                       || tree_int_cst_sgn (t) != 1)
5347                     {
5348                       error ("%qs length expression must be positive constant"
5349                              " integer expression",
5350                              omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5351                       remove = true;
5352                     }
5353                 }
5354               OMP_CLAUSE_OPERAND (c, 0) = t;
5355             }
5356           break;
5357
5358         case OMP_CLAUSE_NUM_TEAMS:
5359           t = OMP_CLAUSE_NUM_TEAMS_EXPR (c);
5360           if (t == error_mark_node)
5361             remove = true;
5362           else if (!type_dependent_expression_p (t)
5363                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5364             {
5365               error ("%<num_teams%> expression must be integral");
5366               remove = true;
5367             }
5368           else
5369             {
5370               t = mark_rvalue_use (t);
5371               if (!processing_template_decl)
5372                 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5373               OMP_CLAUSE_NUM_TEAMS_EXPR (c) = t;
5374             }
5375           break;
5376
5377         case OMP_CLAUSE_THREAD_LIMIT:
5378           t = OMP_CLAUSE_THREAD_LIMIT_EXPR (c);
5379           if (t == error_mark_node)
5380             remove = true;
5381           else if (!type_dependent_expression_p (t)
5382                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5383             {
5384               error ("%<thread_limit%> expression must be integral");
5385               remove = true;
5386             }
5387           else
5388             {
5389               t = mark_rvalue_use (t);
5390               if (!processing_template_decl)
5391                 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5392               OMP_CLAUSE_THREAD_LIMIT_EXPR (c) = t;
5393             }
5394           break;
5395
5396         case OMP_CLAUSE_DEVICE:
5397           t = OMP_CLAUSE_DEVICE_ID (c);
5398           if (t == error_mark_node)
5399             remove = true;
5400           else if (!type_dependent_expression_p (t)
5401                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5402             {
5403               error ("%<device%> id must be integral");
5404               remove = true;
5405             }
5406           else
5407             {
5408               t = mark_rvalue_use (t);
5409               if (!processing_template_decl)
5410                 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5411               OMP_CLAUSE_DEVICE_ID (c) = t;
5412             }
5413           break;
5414
5415         case OMP_CLAUSE_DIST_SCHEDULE:
5416           t = OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR (c);
5417           if (t == NULL)
5418             ;
5419           else if (t == error_mark_node)
5420             remove = true;
5421           else if (!type_dependent_expression_p (t)
5422                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5423             {
5424               error ("%<dist_schedule%> chunk size expression must be "
5425                      "integral");
5426               remove = true;
5427             }
5428           else
5429             {
5430               t = mark_rvalue_use (t);
5431               if (!processing_template_decl)
5432                 t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
5433               OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR (c) = t;
5434             }
5435           break;
5436
5437         case OMP_CLAUSE_ALIGNED:
5438           t = OMP_CLAUSE_DECL (c);
5439           if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
5440             {
5441               if (processing_template_decl)
5442                 break;
5443               if (DECL_P (t))
5444                 error ("%qD is not a variable in %<aligned%> clause", t);
5445               else
5446                 error ("%qE is not a variable in %<aligned%> clause", t);
5447               remove = true;
5448             }
5449           else if (bitmap_bit_p (&aligned_head, DECL_UID (t)))
5450             {
5451               error ("%qD appears more than once in %<aligned%> clauses", t);
5452               remove = true;
5453             }
5454           else
5455             bitmap_set_bit (&aligned_head, DECL_UID (t));
5456           t = OMP_CLAUSE_ALIGNED_ALIGNMENT (c);
5457           if (t == error_mark_node)
5458             remove = true;
5459           else if (t == NULL_TREE)
5460             break;
5461           else if (!type_dependent_expression_p (t)
5462                    && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
5463             {
5464               error ("%<aligned%> clause alignment expression must "
5465                      "be integral");
5466               remove = true;
5467             }
5468           else
5469             {
5470               t = mark_rvalue_use (t);
5471               t = maybe_constant_value (t);
5472               if (!processing_template_decl)
5473                 {
5474                   if (TREE_CODE (t) != INTEGER_CST
5475                       || tree_int_cst_sgn (t) != 1)
5476                     {
5477                       error ("%<aligned%> clause alignment expression must be "
5478                              "positive constant integer expression");
5479                       remove = true;
5480                     }
5481                 }
5482               OMP_CLAUSE_ALIGNED_ALIGNMENT (c) = t;
5483             }
5484           break;
5485
5486         case OMP_CLAUSE_DEPEND:
5487           t = OMP_CLAUSE_DECL (c);
5488           if (TREE_CODE (t) == TREE_LIST)
5489             {
5490               if (handle_omp_array_sections (c))
5491                 remove = true;
5492               break;
5493             }
5494           if (t == error_mark_node)
5495             remove = true;
5496           else if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
5497             {
5498               if (processing_template_decl)
5499                 break;
5500               if (DECL_P (t))
5501                 error ("%qD is not a variable in %<depend%> clause", t);
5502               else
5503                 error ("%qE is not a variable in %<depend%> clause", t);
5504               remove = true;
5505             }
5506           else if (!processing_template_decl
5507                    && !cxx_mark_addressable (t))
5508             remove = true;
5509           break;
5510
5511         case OMP_CLAUSE_MAP:
5512         case OMP_CLAUSE_TO:
5513         case OMP_CLAUSE_FROM:
5514           t = OMP_CLAUSE_DECL (c);
5515           if (TREE_CODE (t) == TREE_LIST)
5516             {
5517               if (handle_omp_array_sections (c))
5518                 remove = true;
5519               else
5520                 {
5521                   t = OMP_CLAUSE_DECL (c);
5522                   if (!cp_omp_mappable_type (TREE_TYPE (t)))
5523                     {
5524                       error_at (OMP_CLAUSE_LOCATION (c),
5525                                 "array section does not have mappable type "
5526                                 "in %qs clause",
5527                                 omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5528                       remove = true;
5529                     }
5530                 }
5531               break;
5532             }
5533           if (t == error_mark_node)
5534             remove = true;
5535           else if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
5536             {
5537               if (processing_template_decl)
5538                 break;
5539               if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP
5540                   && OMP_CLAUSE_MAP_KIND (c) == OMP_CLAUSE_MAP_POINTER)
5541                 break;
5542               if (DECL_P (t))
5543                 error ("%qD is not a variable in %qs clause", t,
5544                        omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5545               else
5546                 error ("%qE is not a variable in %qs clause", t,
5547                        omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5548               remove = true;
5549             }
5550           else if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
5551             {
5552               error ("%qD is threadprivate variable in %qs clause", t,
5553                      omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5554               remove = true;
5555             }
5556           else if (!processing_template_decl
5557                    && TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE
5558                    && !cxx_mark_addressable (t))
5559             remove = true;
5560           else if (!(OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP
5561                      && OMP_CLAUSE_MAP_KIND (c) == OMP_CLAUSE_MAP_POINTER)
5562                    && !cp_omp_mappable_type ((TREE_CODE (TREE_TYPE (t))
5563                                               == REFERENCE_TYPE)
5564                                              ? TREE_TYPE (TREE_TYPE (t))
5565                                              : TREE_TYPE (t)))
5566             {
5567               error_at (OMP_CLAUSE_LOCATION (c),
5568                         "%qD does not have a mappable type in %qs clause", t,
5569                         omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5570               remove = true;
5571             }
5572           else if (bitmap_bit_p (&generic_head, DECL_UID (t)))
5573             {
5574               if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_MAP)
5575                 error ("%qD appears more than once in motion clauses", t);
5576               else
5577                 error ("%qD appears more than once in map clauses", t);
5578               remove = true;
5579             }
5580           else
5581             bitmap_set_bit (&generic_head, DECL_UID (t));
5582           break;
5583
5584         case OMP_CLAUSE_UNIFORM:
5585           t = OMP_CLAUSE_DECL (c);
5586           if (TREE_CODE (t) != PARM_DECL)
5587             {
5588               if (processing_template_decl)
5589                 break;
5590               if (DECL_P (t))
5591                 error ("%qD is not an argument in %<uniform%> clause", t);
5592               else
5593                 error ("%qE is not an argument in %<uniform%> clause", t);
5594               remove = true;
5595             }
5596           break;
5597
5598         case OMP_CLAUSE_NOWAIT:
5599         case OMP_CLAUSE_ORDERED:
5600         case OMP_CLAUSE_DEFAULT:
5601         case OMP_CLAUSE_UNTIED:
5602         case OMP_CLAUSE_COLLAPSE:
5603         case OMP_CLAUSE_MERGEABLE:
5604         case OMP_CLAUSE_PARALLEL:
5605         case OMP_CLAUSE_FOR:
5606         case OMP_CLAUSE_SECTIONS:
5607         case OMP_CLAUSE_TASKGROUP:
5608         case OMP_CLAUSE_PROC_BIND:
5609           break;
5610
5611         case OMP_CLAUSE_INBRANCH:
5612         case OMP_CLAUSE_NOTINBRANCH:
5613           if (branch_seen)
5614             {
5615               error ("%<inbranch%> clause is incompatible with "
5616                      "%<notinbranch%>");
5617               remove = true;
5618             }
5619           branch_seen = true;
5620           break;
5621
5622         default:
5623           gcc_unreachable ();
5624         }
5625
5626       if (remove)
5627         *pc = OMP_CLAUSE_CHAIN (c);
5628       else
5629         pc = &OMP_CLAUSE_CHAIN (c);
5630     }
5631
5632   for (pc = &clauses, c = clauses; c ; c = *pc)
5633     {
5634       enum omp_clause_code c_kind = OMP_CLAUSE_CODE (c);
5635       bool remove = false;
5636       bool need_complete_non_reference = false;
5637       bool need_default_ctor = false;
5638       bool need_copy_ctor = false;
5639       bool need_copy_assignment = false;
5640       bool need_implicitly_determined = false;
5641       bool need_dtor = false;
5642       tree type, inner_type;
5643
5644       switch (c_kind)
5645         {
5646         case OMP_CLAUSE_SHARED:
5647           need_implicitly_determined = true;
5648           break;
5649         case OMP_CLAUSE_PRIVATE:
5650           need_complete_non_reference = true;
5651           need_default_ctor = true;
5652           need_dtor = true;
5653           need_implicitly_determined = true;
5654           break;
5655         case OMP_CLAUSE_FIRSTPRIVATE:
5656           need_complete_non_reference = true;
5657           need_copy_ctor = true;
5658           need_dtor = true;
5659           need_implicitly_determined = true;
5660           break;
5661         case OMP_CLAUSE_LASTPRIVATE:
5662           need_complete_non_reference = true;
5663           need_copy_assignment = true;
5664           need_implicitly_determined = true;
5665           break;
5666         case OMP_CLAUSE_REDUCTION:
5667           need_implicitly_determined = true;
5668           break;
5669         case OMP_CLAUSE_COPYPRIVATE:
5670           need_copy_assignment = true;
5671           break;
5672         case OMP_CLAUSE_COPYIN:
5673           need_copy_assignment = true;
5674           break;
5675         case OMP_CLAUSE_NOWAIT:
5676           if (copyprivate_seen)
5677             {
5678               error_at (OMP_CLAUSE_LOCATION (c),
5679                         "%<nowait%> clause must not be used together "
5680                         "with %<copyprivate%>");
5681               *pc = OMP_CLAUSE_CHAIN (c);
5682               continue;
5683             }
5684           /* FALLTHRU */
5685         default:
5686           pc = &OMP_CLAUSE_CHAIN (c);
5687           continue;
5688         }
5689
5690       t = OMP_CLAUSE_DECL (c);
5691       if (processing_template_decl
5692           && !VAR_P (t) && TREE_CODE (t) != PARM_DECL)
5693         {
5694           pc = &OMP_CLAUSE_CHAIN (c);
5695           continue;
5696         }
5697
5698       switch (c_kind)
5699         {
5700         case OMP_CLAUSE_LASTPRIVATE:
5701           if (!bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
5702             {
5703               need_default_ctor = true;
5704               need_dtor = true;
5705             }
5706           break;
5707
5708         case OMP_CLAUSE_REDUCTION:
5709           if (finish_omp_reduction_clause (c, &need_default_ctor,
5710                                            &need_dtor))
5711             remove = true;
5712           else
5713             t = OMP_CLAUSE_DECL (c);
5714           break;
5715
5716         case OMP_CLAUSE_COPYIN:
5717           if (!VAR_P (t) || !DECL_THREAD_LOCAL_P (t))
5718             {
5719               error ("%qE must be %<threadprivate%> for %<copyin%>", t);
5720               remove = true;
5721             }
5722           break;
5723
5724         default:
5725           break;
5726         }
5727
5728       if (need_complete_non_reference || need_copy_assignment)
5729         {
5730           t = require_complete_type (t);
5731           if (t == error_mark_node)
5732             remove = true;
5733           else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE
5734                    && need_complete_non_reference)
5735             {
5736               error ("%qE has reference type for %qs", t,
5737                      omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5738               remove = true;
5739             }
5740         }
5741       if (need_implicitly_determined)
5742         {
5743           const char *share_name = NULL;
5744
5745           if (VAR_P (t) && DECL_THREAD_LOCAL_P (t))
5746             share_name = "threadprivate";
5747           else switch (cxx_omp_predetermined_sharing (t))
5748             {
5749             case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
5750               break;
5751             case OMP_CLAUSE_DEFAULT_SHARED:
5752               /* const vars may be specified in firstprivate clause.  */
5753               if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
5754                   && cxx_omp_const_qual_no_mutable (t))
5755                 break;
5756               share_name = "shared";
5757               break;
5758             case OMP_CLAUSE_DEFAULT_PRIVATE:
5759               share_name = "private";
5760               break;
5761             default:
5762               gcc_unreachable ();
5763             }
5764           if (share_name)
5765             {
5766               error ("%qE is predetermined %qs for %qs",
5767                      t, share_name, omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
5768               remove = true;
5769             }
5770         }
5771
5772       /* We're interested in the base element, not arrays.  */
5773       inner_type = type = TREE_TYPE (t);
5774       while (TREE_CODE (inner_type) == ARRAY_TYPE)
5775         inner_type = TREE_TYPE (inner_type);
5776
5777       if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
5778           && TREE_CODE (inner_type) == REFERENCE_TYPE)
5779         inner_type = TREE_TYPE (inner_type);
5780
5781       /* Check for special function availability by building a call to one.
5782          Save the results, because later we won't be in the right context
5783          for making these queries.  */
5784       if (CLASS_TYPE_P (inner_type)
5785           && COMPLETE_TYPE_P (inner_type)
5786           && (need_default_ctor || need_copy_ctor
5787               || need_copy_assignment || need_dtor)
5788           && !type_dependent_expression_p (t)
5789           && cxx_omp_create_clause_info (c, inner_type, need_default_ctor,
5790                                          need_copy_ctor, need_copy_assignment,
5791                                          need_dtor))
5792         remove = true;
5793
5794       if (remove)
5795         *pc = OMP_CLAUSE_CHAIN (c);
5796       else
5797         pc = &OMP_CLAUSE_CHAIN (c);
5798     }
5799
5800   bitmap_obstack_release (NULL);
5801   return clauses;
5802 }
5803
5804 /* For all variables in the tree_list VARS, mark them as thread local.  */
5805
5806 void
5807 finish_omp_threadprivate (tree vars)
5808 {
5809   tree t;
5810
5811   /* Mark every variable in VARS to be assigned thread local storage.  */
5812   for (t = vars; t; t = TREE_CHAIN (t))
5813     {
5814       tree v = TREE_PURPOSE (t);
5815
5816       if (error_operand_p (v))
5817         ;
5818       else if (!VAR_P (v))
5819         error ("%<threadprivate%> %qD is not file, namespace "
5820                "or block scope variable", v);
5821       /* If V had already been marked threadprivate, it doesn't matter
5822          whether it had been used prior to this point.  */
5823       else if (TREE_USED (v)
5824           && (DECL_LANG_SPECIFIC (v) == NULL
5825               || !CP_DECL_THREADPRIVATE_P (v)))
5826         error ("%qE declared %<threadprivate%> after first use", v);
5827       else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
5828         error ("automatic variable %qE cannot be %<threadprivate%>", v);
5829       else if (! COMPLETE_TYPE_P (complete_type (TREE_TYPE (v))))
5830         error ("%<threadprivate%> %qE has incomplete type", v);
5831       else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v))
5832                && CP_DECL_CONTEXT (v) != current_class_type)
5833         error ("%<threadprivate%> %qE directive not "
5834                "in %qT definition", v, CP_DECL_CONTEXT (v));
5835       else
5836         {
5837           /* Allocate a LANG_SPECIFIC structure for V, if needed.  */
5838           if (DECL_LANG_SPECIFIC (v) == NULL)
5839             {
5840               retrofit_lang_decl (v);
5841
5842               /* Make sure that DECL_DISCRIMINATOR_P continues to be true
5843                  after the allocation of the lang_decl structure.  */
5844               if (DECL_DISCRIMINATOR_P (v))
5845                 DECL_LANG_SPECIFIC (v)->u.base.u2sel = 1;
5846             }
5847
5848           if (! DECL_THREAD_LOCAL_P (v))
5849             {
5850               DECL_TLS_MODEL (v) = decl_default_tls_model (v);
5851               /* If rtl has been already set for this var, call
5852                  make_decl_rtl once again, so that encode_section_info
5853                  has a chance to look at the new decl flags.  */
5854               if (DECL_RTL_SET_P (v))
5855                 make_decl_rtl (v);
5856             }
5857           CP_DECL_THREADPRIVATE_P (v) = 1;
5858         }
5859     }
5860 }
5861
5862 /* Build an OpenMP structured block.  */
5863
5864 tree
5865 begin_omp_structured_block (void)
5866 {
5867   return do_pushlevel (sk_omp);
5868 }
5869
5870 tree
5871 finish_omp_structured_block (tree block)
5872 {
5873   return do_poplevel (block);
5874 }
5875
5876 /* Similarly, except force the retention of the BLOCK.  */
5877
5878 tree
5879 begin_omp_parallel (void)
5880 {
5881   keep_next_level (true);
5882   return begin_omp_structured_block ();
5883 }
5884
5885 tree
5886 finish_omp_parallel (tree clauses, tree body)
5887 {
5888   tree stmt;
5889
5890   body = finish_omp_structured_block (body);
5891
5892   stmt = make_node (OMP_PARALLEL);
5893   TREE_TYPE (stmt) = void_type_node;
5894   OMP_PARALLEL_CLAUSES (stmt) = clauses;
5895   OMP_PARALLEL_BODY (stmt) = body;
5896
5897   return add_stmt (stmt);
5898 }
5899
5900 tree
5901 begin_omp_task (void)
5902 {
5903   keep_next_level (true);
5904   return begin_omp_structured_block ();
5905 }
5906
5907 tree
5908 finish_omp_task (tree clauses, tree body)
5909 {
5910   tree stmt;
5911
5912   body = finish_omp_structured_block (body);
5913
5914   stmt = make_node (OMP_TASK);
5915   TREE_TYPE (stmt) = void_type_node;
5916   OMP_TASK_CLAUSES (stmt) = clauses;
5917   OMP_TASK_BODY (stmt) = body;
5918
5919   return add_stmt (stmt);
5920 }
5921
5922 /* Helper function for finish_omp_for.  Convert Ith random access iterator
5923    into integral iterator.  Return FALSE if successful.  */
5924
5925 static bool
5926 handle_omp_for_class_iterator (int i, location_t locus, tree declv, tree initv,
5927                                tree condv, tree incrv, tree *body,
5928                                tree *pre_body, tree clauses)
5929 {
5930   tree diff, iter_init, iter_incr = NULL, last;
5931   tree incr_var = NULL, orig_pre_body, orig_body, c;
5932   tree decl = TREE_VEC_ELT (declv, i);
5933   tree init = TREE_VEC_ELT (initv, i);
5934   tree cond = TREE_VEC_ELT (condv, i);
5935   tree incr = TREE_VEC_ELT (incrv, i);
5936   tree iter = decl;
5937   location_t elocus = locus;
5938
5939   if (init && EXPR_HAS_LOCATION (init))
5940     elocus = EXPR_LOCATION (init);
5941
5942   switch (TREE_CODE (cond))
5943     {
5944     case GT_EXPR:
5945     case GE_EXPR:
5946     case LT_EXPR:
5947     case LE_EXPR:
5948       if (TREE_OPERAND (cond, 1) == iter)
5949         cond = build2 (swap_tree_comparison (TREE_CODE (cond)),
5950                        TREE_TYPE (cond), iter, TREE_OPERAND (cond, 0));
5951       if (TREE_OPERAND (cond, 0) != iter)
5952         cond = error_mark_node;
5953       else
5954         {
5955           tree tem = build_x_binary_op (EXPR_LOCATION (cond),
5956                                         TREE_CODE (cond),
5957                                         iter, ERROR_MARK,
5958                                         TREE_OPERAND (cond, 1), ERROR_MARK,
5959                                         NULL, tf_warning_or_error);
5960           if (error_operand_p (tem))
5961             return true;
5962         }
5963       break;
5964     default:
5965       cond = error_mark_node;
5966       break;
5967     }
5968   if (cond == error_mark_node)
5969     {
5970       error_at (elocus, "invalid controlling predicate");
5971       return true;
5972     }
5973   diff = build_x_binary_op (elocus, MINUS_EXPR, TREE_OPERAND (cond, 1),
5974                             ERROR_MARK, iter, ERROR_MARK, NULL,
5975                             tf_warning_or_error);
5976   if (error_operand_p (diff))
5977     return true;
5978   if (TREE_CODE (TREE_TYPE (diff)) != INTEGER_TYPE)
5979     {
5980       error_at (elocus, "difference between %qE and %qD does not have integer type",
5981                 TREE_OPERAND (cond, 1), iter);
5982       return true;
5983     }
5984
5985   switch (TREE_CODE (incr))
5986     {
5987     case PREINCREMENT_EXPR:
5988     case PREDECREMENT_EXPR:
5989     case POSTINCREMENT_EXPR:
5990     case POSTDECREMENT_EXPR:
5991       if (TREE_OPERAND (incr, 0) != iter)
5992         {
5993           incr = error_mark_node;
5994           break;
5995         }
5996       iter_incr = build_x_unary_op (EXPR_LOCATION (incr),
5997                                     TREE_CODE (incr), iter,
5998                                     tf_warning_or_error);
5999       if (error_operand_p (iter_incr))
6000         return true;
6001       else if (TREE_CODE (incr) == PREINCREMENT_EXPR
6002                || TREE_CODE (incr) == POSTINCREMENT_EXPR)
6003         incr = integer_one_node;
6004       else
6005         incr = integer_minus_one_node;
6006       break;
6007     case MODIFY_EXPR:
6008       if (TREE_OPERAND (incr, 0) != iter)
6009         incr = error_mark_node;
6010       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
6011                || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
6012         {
6013           tree rhs = TREE_OPERAND (incr, 1);
6014           if (TREE_OPERAND (rhs, 0) == iter)
6015             {
6016               if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 1)))
6017                   != INTEGER_TYPE)
6018                 incr = error_mark_node;
6019               else
6020                 {
6021                   iter_incr = build_x_modify_expr (EXPR_LOCATION (rhs),
6022                                                    iter, TREE_CODE (rhs),
6023                                                    TREE_OPERAND (rhs, 1),
6024                                                    tf_warning_or_error);
6025                   if (error_operand_p (iter_incr))
6026                     return true;
6027                   incr = TREE_OPERAND (rhs, 1);
6028                   incr = cp_convert (TREE_TYPE (diff), incr,
6029                                      tf_warning_or_error);
6030                   if (TREE_CODE (rhs) == MINUS_EXPR)
6031                     {
6032                       incr = build1 (NEGATE_EXPR, TREE_TYPE (diff), incr);
6033                       incr = fold_if_not_in_template (incr);
6034                     }
6035                   if (TREE_CODE (incr) != INTEGER_CST
6036                       && (TREE_CODE (incr) != NOP_EXPR
6037                           || (TREE_CODE (TREE_OPERAND (incr, 0))
6038                               != INTEGER_CST)))
6039                     iter_incr = NULL;
6040                 }
6041             }
6042           else if (TREE_OPERAND (rhs, 1) == iter)
6043             {
6044               if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 0))) != INTEGER_TYPE
6045                   || TREE_CODE (rhs) != PLUS_EXPR)
6046                 incr = error_mark_node;
6047               else
6048                 {
6049                   iter_incr = build_x_binary_op (EXPR_LOCATION (rhs),
6050                                                  PLUS_EXPR,
6051                                                  TREE_OPERAND (rhs, 0),
6052                                                  ERROR_MARK, iter,
6053                                                  ERROR_MARK, NULL,
6054                                                  tf_warning_or_error);
6055                   if (error_operand_p (iter_incr))
6056                     return true;
6057                   iter_incr = build_x_modify_expr (EXPR_LOCATION (rhs),
6058                                                    iter, NOP_EXPR,
6059                                                    iter_incr,
6060                                                    tf_warning_or_error);
6061                   if (error_operand_p (iter_incr))
6062                     return true;
6063                   incr = TREE_OPERAND (rhs, 0);
6064                   iter_incr = NULL;
6065                 }
6066             }
6067           else
6068             incr = error_mark_node;
6069         }
6070       else
6071         incr = error_mark_node;
6072       break;
6073     default:
6074       incr = error_mark_node;
6075       break;
6076     }
6077
6078   if (incr == error_mark_node)
6079     {
6080       error_at (elocus, "invalid increment expression");
6081       return true;
6082     }
6083
6084   incr = cp_convert (TREE_TYPE (diff), incr, tf_warning_or_error);
6085   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
6086     if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
6087         && OMP_CLAUSE_DECL (c) == iter)
6088       break;
6089
6090   decl = create_temporary_var (TREE_TYPE (diff));
6091   pushdecl (decl);
6092   add_decl_expr (decl);
6093   last = create_temporary_var (TREE_TYPE (diff));
6094   pushdecl (last);
6095   add_decl_expr (last);
6096   if (c && iter_incr == NULL)
6097     {
6098       incr_var = create_temporary_var (TREE_TYPE (diff));
6099       pushdecl (incr_var);
6100       add_decl_expr (incr_var);
6101     }
6102   gcc_assert (stmts_are_full_exprs_p ());
6103
6104   orig_pre_body = *pre_body;
6105   *pre_body = push_stmt_list ();
6106   if (orig_pre_body)
6107     add_stmt (orig_pre_body);
6108   if (init != NULL)
6109     finish_expr_stmt (build_x_modify_expr (elocus,
6110                                            iter, NOP_EXPR, init,
6111                                            tf_warning_or_error));
6112   init = build_int_cst (TREE_TYPE (diff), 0);
6113   if (c && iter_incr == NULL)
6114     {
6115       finish_expr_stmt (build_x_modify_expr (elocus,
6116                                              incr_var, NOP_EXPR,
6117                                              incr, tf_warning_or_error));
6118       incr = incr_var;
6119       iter_incr = build_x_modify_expr (elocus,
6120                                        iter, PLUS_EXPR, incr,
6121                                        tf_warning_or_error);
6122     }
6123   finish_expr_stmt (build_x_modify_expr (elocus,
6124                                          last, NOP_EXPR, init,
6125                                          tf_warning_or_error));
6126   *pre_body = pop_stmt_list (*pre_body);
6127
6128   cond = cp_build_binary_op (elocus,
6129                              TREE_CODE (cond), decl, diff,
6130                              tf_warning_or_error);
6131   incr = build_modify_expr (elocus, decl, NULL_TREE, PLUS_EXPR,
6132                             elocus, incr, NULL_TREE);
6133
6134   orig_body = *body;
6135   *body = push_stmt_list ();
6136   iter_init = build2 (MINUS_EXPR, TREE_TYPE (diff), decl, last);
6137   iter_init = build_x_modify_expr (elocus,
6138                                    iter, PLUS_EXPR, iter_init,
6139                                    tf_warning_or_error);
6140   iter_init = build1 (NOP_EXPR, void_type_node, iter_init);
6141   finish_expr_stmt (iter_init);
6142   finish_expr_stmt (build_x_modify_expr (elocus,
6143                                          last, NOP_EXPR, decl,
6144                                          tf_warning_or_error));
6145   add_stmt (orig_body);
6146   *body = pop_stmt_list (*body);
6147
6148   if (c)
6149     {
6150       OMP_CLAUSE_LASTPRIVATE_STMT (c) = push_stmt_list ();
6151       finish_expr_stmt (iter_incr);
6152       OMP_CLAUSE_LASTPRIVATE_STMT (c)
6153         = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (c));
6154     }
6155
6156   TREE_VEC_ELT (declv, i) = decl;
6157   TREE_VEC_ELT (initv, i) = init;
6158   TREE_VEC_ELT (condv, i) = cond;
6159   TREE_VEC_ELT (incrv, i) = incr;
6160
6161   return false;
6162 }
6163
6164 /* Build and validate an OMP_FOR statement.  CLAUSES, BODY, COND, INCR
6165    are directly for their associated operands in the statement.  DECL
6166    and INIT are a combo; if DECL is NULL then INIT ought to be a
6167    MODIFY_EXPR, and the DECL should be extracted.  PRE_BODY are
6168    optional statements that need to go before the loop into its
6169    sk_omp scope.  */
6170
6171 tree
6172 finish_omp_for (location_t locus, enum tree_code code, tree declv, tree initv,
6173                 tree condv, tree incrv, tree body, tree pre_body, tree clauses)
6174 {
6175   tree omp_for = NULL, orig_incr = NULL;
6176   tree decl, init, cond, incr;
6177   location_t elocus;
6178   int i;
6179
6180   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (initv));
6181   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (condv));
6182   gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (incrv));
6183   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
6184     {
6185       decl = TREE_VEC_ELT (declv, i);
6186       init = TREE_VEC_ELT (initv, i);
6187       cond = TREE_VEC_ELT (condv, i);
6188       incr = TREE_VEC_ELT (incrv, i);
6189       elocus = locus;
6190
6191       if (decl == NULL)
6192         {
6193           if (init != NULL)
6194             switch (TREE_CODE (init))
6195               {
6196               case MODIFY_EXPR:
6197                 decl = TREE_OPERAND (init, 0);
6198                 init = TREE_OPERAND (init, 1);
6199                 break;
6200               case MODOP_EXPR:
6201                 if (TREE_CODE (TREE_OPERAND (init, 1)) == NOP_EXPR)
6202                   {
6203                     decl = TREE_OPERAND (init, 0);
6204                     init = TREE_OPERAND (init, 2);
6205                   }
6206                 break;
6207               default:
6208                 break;
6209               }
6210
6211           if (decl == NULL)
6212             {
6213               error_at (locus,
6214                         "expected iteration declaration or initialization");
6215               return NULL;
6216             }
6217         }
6218
6219       if (init && EXPR_HAS_LOCATION (init))
6220         elocus = EXPR_LOCATION (init);
6221
6222       if (cond == NULL)
6223         {
6224           error_at (elocus, "missing controlling predicate");
6225           return NULL;
6226         }
6227
6228       if (incr == NULL)
6229         {
6230           error_at (elocus, "missing increment expression");
6231           return NULL;
6232         }
6233
6234       TREE_VEC_ELT (declv, i) = decl;
6235       TREE_VEC_ELT (initv, i) = init;
6236     }
6237
6238   if (dependent_omp_for_p (declv, initv, condv, incrv))
6239     {
6240       tree stmt;
6241
6242       stmt = make_node (code);
6243
6244       for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
6245         {
6246           /* This is really just a place-holder.  We'll be decomposing this
6247              again and going through the cp_build_modify_expr path below when
6248              we instantiate the thing.  */
6249           TREE_VEC_ELT (initv, i)
6250             = build2 (MODIFY_EXPR, void_type_node, TREE_VEC_ELT (declv, i),
6251                       TREE_VEC_ELT (initv, i));
6252         }
6253
6254       TREE_TYPE (stmt) = void_type_node;
6255       OMP_FOR_INIT (stmt) = initv;
6256       OMP_FOR_COND (stmt) = condv;
6257       OMP_FOR_INCR (stmt) = incrv;
6258       OMP_FOR_BODY (stmt) = body;
6259       OMP_FOR_PRE_BODY (stmt) = pre_body;
6260       OMP_FOR_CLAUSES (stmt) = clauses;
6261
6262       SET_EXPR_LOCATION (stmt, locus);
6263       return add_stmt (stmt);
6264     }
6265
6266   if (processing_template_decl)
6267     orig_incr = make_tree_vec (TREE_VEC_LENGTH (incrv));
6268
6269   for (i = 0; i < TREE_VEC_LENGTH (declv); )
6270     {
6271       decl = TREE_VEC_ELT (declv, i);
6272       init = TREE_VEC_ELT (initv, i);
6273       cond = TREE_VEC_ELT (condv, i);
6274       incr = TREE_VEC_ELT (incrv, i);
6275       if (orig_incr)
6276         TREE_VEC_ELT (orig_incr, i) = incr;
6277       elocus = locus;
6278
6279       if (init && EXPR_HAS_LOCATION (init))
6280         elocus = EXPR_LOCATION (init);
6281
6282       if (!DECL_P (decl))
6283         {
6284           error_at (elocus, "expected iteration declaration or initialization");
6285           return NULL;
6286         }
6287
6288       if (incr && TREE_CODE (incr) == MODOP_EXPR)
6289         {
6290           if (orig_incr)
6291             TREE_VEC_ELT (orig_incr, i) = incr;
6292           incr = cp_build_modify_expr (TREE_OPERAND (incr, 0),
6293                                        TREE_CODE (TREE_OPERAND (incr, 1)),
6294                                        TREE_OPERAND (incr, 2),
6295                                        tf_warning_or_error);
6296         }
6297
6298       if (CLASS_TYPE_P (TREE_TYPE (decl)))
6299         {
6300           if (code == OMP_SIMD)
6301             {
6302               error_at (elocus, "%<#pragma omp simd%> used with class "
6303                                 "iteration variable %qE", decl);
6304               return NULL;
6305             }
6306           if (handle_omp_for_class_iterator (i, locus, declv, initv, condv,
6307                                              incrv, &body, &pre_body, clauses))
6308             return NULL;
6309           continue;
6310         }
6311
6312       if (!INTEGRAL_TYPE_P (TREE_TYPE (decl))
6313           && !TYPE_PTR_P (TREE_TYPE (decl)))
6314         {
6315           error_at (elocus, "invalid type for iteration variable %qE", decl);
6316           return NULL;
6317         }
6318
6319       if (!processing_template_decl)
6320         {
6321           init = fold_build_cleanup_point_expr (TREE_TYPE (init), init);
6322           init = cp_build_modify_expr (decl, NOP_EXPR, init, tf_warning_or_error);
6323         }
6324       else
6325         init = build2 (MODIFY_EXPR, void_type_node, decl, init);
6326       if (cond
6327           && TREE_SIDE_EFFECTS (cond)
6328           && COMPARISON_CLASS_P (cond)
6329           && !processing_template_decl)
6330         {
6331           tree t = TREE_OPERAND (cond, 0);
6332           if (TREE_SIDE_EFFECTS (t)
6333               && t != decl
6334               && (TREE_CODE (t) != NOP_EXPR
6335                   || TREE_OPERAND (t, 0) != decl))
6336             TREE_OPERAND (cond, 0)
6337               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
6338
6339           t = TREE_OPERAND (cond, 1);
6340           if (TREE_SIDE_EFFECTS (t)
6341               && t != decl
6342               && (TREE_CODE (t) != NOP_EXPR
6343                   || TREE_OPERAND (t, 0) != decl))
6344             TREE_OPERAND (cond, 1)
6345               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
6346         }
6347       if (decl == error_mark_node || init == error_mark_node)
6348         return NULL;
6349
6350       TREE_VEC_ELT (declv, i) = decl;
6351       TREE_VEC_ELT (initv, i) = init;
6352       TREE_VEC_ELT (condv, i) = cond;
6353       TREE_VEC_ELT (incrv, i) = incr;
6354       i++;
6355     }
6356
6357   if (IS_EMPTY_STMT (pre_body))
6358     pre_body = NULL;
6359
6360   omp_for = c_finish_omp_for (locus, code, declv, initv, condv, incrv,
6361                               body, pre_body);
6362
6363   if (omp_for == NULL)
6364     return NULL;
6365
6366   for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INCR (omp_for)); i++)
6367     {
6368       decl = TREE_OPERAND (TREE_VEC_ELT (OMP_FOR_INIT (omp_for), i), 0);
6369       incr = TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i);
6370
6371       if (TREE_CODE (incr) != MODIFY_EXPR)
6372         continue;
6373
6374       if (TREE_SIDE_EFFECTS (TREE_OPERAND (incr, 1))
6375           && BINARY_CLASS_P (TREE_OPERAND (incr, 1))
6376           && !processing_template_decl)
6377         {
6378           tree t = TREE_OPERAND (TREE_OPERAND (incr, 1), 0);
6379           if (TREE_SIDE_EFFECTS (t)
6380               && t != decl
6381               && (TREE_CODE (t) != NOP_EXPR
6382                   || TREE_OPERAND (t, 0) != decl))
6383             TREE_OPERAND (TREE_OPERAND (incr, 1), 0)
6384               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
6385
6386           t = TREE_OPERAND (TREE_OPERAND (incr, 1), 1);
6387           if (TREE_SIDE_EFFECTS (t)
6388               && t != decl
6389               && (TREE_CODE (t) != NOP_EXPR
6390                   || TREE_OPERAND (t, 0) != decl))
6391             TREE_OPERAND (TREE_OPERAND (incr, 1), 1)
6392               = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
6393         }
6394
6395       if (orig_incr)
6396         TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i) = TREE_VEC_ELT (orig_incr, i);
6397     }
6398   if (omp_for != NULL)
6399     OMP_FOR_CLAUSES (omp_for) = clauses;
6400   return omp_for;
6401 }
6402
6403 void
6404 finish_omp_atomic (enum tree_code code, enum tree_code opcode, tree lhs,
6405                    tree rhs, tree v, tree lhs1, tree rhs1, bool seq_cst)
6406 {
6407   tree orig_lhs;
6408   tree orig_rhs;
6409   tree orig_v;
6410   tree orig_lhs1;
6411   tree orig_rhs1;
6412   bool dependent_p;
6413   tree stmt;
6414
6415   orig_lhs = lhs;
6416   orig_rhs = rhs;
6417   orig_v = v;
6418   orig_lhs1 = lhs1;
6419   orig_rhs1 = rhs1;
6420   dependent_p = false;
6421   stmt = NULL_TREE;
6422
6423   /* Even in a template, we can detect invalid uses of the atomic
6424      pragma if neither LHS nor RHS is type-dependent.  */
6425   if (processing_template_decl)
6426     {
6427       dependent_p = (type_dependent_expression_p (lhs)
6428                      || (rhs && type_dependent_expression_p (rhs))
6429                      || (v && type_dependent_expression_p (v))
6430                      || (lhs1 && type_dependent_expression_p (lhs1))
6431                      || (rhs1 && type_dependent_expression_p (rhs1)));
6432       if (!dependent_p)
6433         {
6434           lhs = build_non_dependent_expr (lhs);
6435           if (rhs)
6436             rhs = build_non_dependent_expr (rhs);
6437           if (v)
6438             v = build_non_dependent_expr (v);
6439           if (lhs1)
6440             lhs1 = build_non_dependent_expr (lhs1);
6441           if (rhs1)
6442             rhs1 = build_non_dependent_expr (rhs1);
6443         }
6444     }
6445   if (!dependent_p)
6446     {
6447       bool swapped = false;
6448       if (rhs1 && cp_tree_equal (lhs, rhs))
6449         {
6450           tree tem = rhs;
6451           rhs = rhs1;
6452           rhs1 = tem;
6453           swapped = !commutative_tree_code (opcode);
6454         }
6455       if (rhs1 && !cp_tree_equal (lhs, rhs1))
6456         {
6457           if (code == OMP_ATOMIC)
6458             error ("%<#pragma omp atomic update%> uses two different "
6459                    "expressions for memory");
6460           else
6461             error ("%<#pragma omp atomic capture%> uses two different "
6462                    "expressions for memory");
6463           return;
6464         }
6465       if (lhs1 && !cp_tree_equal (lhs, lhs1))
6466         {
6467           if (code == OMP_ATOMIC)
6468             error ("%<#pragma omp atomic update%> uses two different "
6469                    "expressions for memory");
6470           else
6471             error ("%<#pragma omp atomic capture%> uses two different "
6472                    "expressions for memory");
6473           return;
6474         }
6475       stmt = c_finish_omp_atomic (input_location, code, opcode, lhs, rhs,
6476                                   v, lhs1, rhs1, swapped, seq_cst);
6477       if (stmt == error_mark_node)
6478         return;
6479     }
6480   if (processing_template_decl)
6481     {
6482       if (code == OMP_ATOMIC_READ)
6483         {
6484           stmt = build_min_nt_loc (EXPR_LOCATION (orig_lhs),
6485                                    OMP_ATOMIC_READ, orig_lhs);
6486           OMP_ATOMIC_SEQ_CST (stmt) = seq_cst;
6487           stmt = build2 (MODIFY_EXPR, void_type_node, orig_v, stmt);
6488         }
6489       else
6490         {
6491           if (opcode == NOP_EXPR)
6492             stmt = build2 (MODIFY_EXPR, void_type_node, orig_lhs, orig_rhs);
6493           else 
6494             stmt = build2 (opcode, void_type_node, orig_lhs, orig_rhs);
6495           if (orig_rhs1)
6496             stmt = build_min_nt_loc (EXPR_LOCATION (orig_rhs1),
6497                                      COMPOUND_EXPR, orig_rhs1, stmt);
6498           if (code != OMP_ATOMIC)
6499             {
6500               stmt = build_min_nt_loc (EXPR_LOCATION (orig_lhs1),
6501                                        code, orig_lhs1, stmt);
6502               OMP_ATOMIC_SEQ_CST (stmt) = seq_cst;
6503               stmt = build2 (MODIFY_EXPR, void_type_node, orig_v, stmt);
6504             }
6505         }
6506       stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node, stmt);
6507       OMP_ATOMIC_SEQ_CST (stmt) = seq_cst;
6508     }
6509   add_stmt (stmt);
6510 }
6511
6512 void
6513 finish_omp_barrier (void)
6514 {
6515   tree fn = builtin_decl_explicit (BUILT_IN_GOMP_BARRIER);
6516   vec<tree, va_gc> *vec = make_tree_vector ();
6517   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
6518   release_tree_vector (vec);
6519   finish_expr_stmt (stmt);
6520 }
6521
6522 void
6523 finish_omp_flush (void)
6524 {
6525   tree fn = builtin_decl_explicit (BUILT_IN_SYNC_SYNCHRONIZE);
6526   vec<tree, va_gc> *vec = make_tree_vector ();
6527   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
6528   release_tree_vector (vec);
6529   finish_expr_stmt (stmt);
6530 }
6531
6532 void
6533 finish_omp_taskwait (void)
6534 {
6535   tree fn = builtin_decl_explicit (BUILT_IN_GOMP_TASKWAIT);
6536   vec<tree, va_gc> *vec = make_tree_vector ();
6537   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
6538   release_tree_vector (vec);
6539   finish_expr_stmt (stmt);
6540 }
6541
6542 void
6543 finish_omp_taskyield (void)
6544 {
6545   tree fn = builtin_decl_explicit (BUILT_IN_GOMP_TASKYIELD);
6546   vec<tree, va_gc> *vec = make_tree_vector ();
6547   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
6548   release_tree_vector (vec);
6549   finish_expr_stmt (stmt);
6550 }
6551
6552 void
6553 finish_omp_cancel (tree clauses)
6554 {
6555   tree fn = builtin_decl_explicit (BUILT_IN_GOMP_CANCEL);
6556   int mask = 0;
6557   if (find_omp_clause (clauses, OMP_CLAUSE_PARALLEL))
6558     mask = 1;
6559   else if (find_omp_clause (clauses, OMP_CLAUSE_FOR))
6560     mask = 2;
6561   else if (find_omp_clause (clauses, OMP_CLAUSE_SECTIONS))
6562     mask = 4;
6563   else if (find_omp_clause (clauses, OMP_CLAUSE_TASKGROUP))
6564     mask = 8;
6565   else
6566     {
6567       error ("%<#pragma omp cancel must specify one of "
6568              "%<parallel%>, %<for%>, %<sections%> or %<taskgroup%> clauses");
6569       return;
6570     }
6571   vec<tree, va_gc> *vec = make_tree_vector ();
6572   tree ifc = find_omp_clause (clauses, OMP_CLAUSE_IF);
6573   if (ifc != NULL_TREE)
6574     {
6575       tree type = TREE_TYPE (OMP_CLAUSE_IF_EXPR (ifc));
6576       ifc = fold_build2_loc (OMP_CLAUSE_LOCATION (ifc), NE_EXPR,
6577                              boolean_type_node, OMP_CLAUSE_IF_EXPR (ifc),
6578                              build_zero_cst (type));
6579     }
6580   else
6581     ifc = boolean_true_node;
6582   vec->quick_push (build_int_cst (integer_type_node, mask));
6583   vec->quick_push (ifc);
6584   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
6585   release_tree_vector (vec);
6586   finish_expr_stmt (stmt);
6587 }
6588
6589 void
6590 finish_omp_cancellation_point (tree clauses)
6591 {
6592   tree fn = builtin_decl_explicit (BUILT_IN_GOMP_CANCELLATION_POINT);
6593   int mask = 0;
6594   if (find_omp_clause (clauses, OMP_CLAUSE_PARALLEL))
6595     mask = 1;
6596   else if (find_omp_clause (clauses, OMP_CLAUSE_FOR))
6597     mask = 2;
6598   else if (find_omp_clause (clauses, OMP_CLAUSE_SECTIONS))
6599     mask = 4;
6600   else if (find_omp_clause (clauses, OMP_CLAUSE_TASKGROUP))
6601     mask = 8;
6602   else
6603     {
6604       error ("%<#pragma omp cancellation point must specify one of "
6605              "%<parallel%>, %<for%>, %<sections%> or %<taskgroup%> clauses");
6606       return;
6607     }
6608   vec<tree, va_gc> *vec
6609     = make_tree_vector_single (build_int_cst (integer_type_node, mask));
6610   tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
6611   release_tree_vector (vec);
6612   finish_expr_stmt (stmt);
6613 }
6614 \f
6615 /* Begin a __transaction_atomic or __transaction_relaxed statement.
6616    If PCOMPOUND is non-null, this is for a function-transaction-block, and we
6617    should create an extra compound stmt.  */
6618
6619 tree
6620 begin_transaction_stmt (location_t loc, tree *pcompound, int flags)
6621 {
6622   tree r;
6623
6624   if (pcompound)
6625     *pcompound = begin_compound_stmt (0);
6626
6627   r = build_stmt (loc, TRANSACTION_EXPR, NULL_TREE);
6628
6629   /* Only add the statement to the function if support enabled.  */
6630   if (flag_tm)
6631     add_stmt (r);
6632   else
6633     error_at (loc, ((flags & TM_STMT_ATTR_RELAXED) != 0
6634                     ? G_("%<__transaction_relaxed%> without "
6635                          "transactional memory support enabled")
6636                     : G_("%<__transaction_atomic%> without "
6637                          "transactional memory support enabled")));
6638
6639   TRANSACTION_EXPR_BODY (r) = push_stmt_list ();
6640   TREE_SIDE_EFFECTS (r) = 1;
6641   return r;
6642 }
6643
6644 /* End a __transaction_atomic or __transaction_relaxed statement.
6645    If COMPOUND_STMT is non-null, this is for a function-transaction-block,
6646    and we should end the compound.  If NOEX is non-NULL, we wrap the body in
6647    a MUST_NOT_THROW_EXPR with NOEX as condition.  */
6648
6649 void
6650 finish_transaction_stmt (tree stmt, tree compound_stmt, int flags, tree noex)
6651 {
6652   TRANSACTION_EXPR_BODY (stmt) = pop_stmt_list (TRANSACTION_EXPR_BODY (stmt));
6653   TRANSACTION_EXPR_OUTER (stmt) = (flags & TM_STMT_ATTR_OUTER) != 0;
6654   TRANSACTION_EXPR_RELAXED (stmt) = (flags & TM_STMT_ATTR_RELAXED) != 0;
6655   TRANSACTION_EXPR_IS_STMT (stmt) = 1;
6656
6657   /* noexcept specifications are not allowed for function transactions.  */
6658   gcc_assert (!(noex && compound_stmt));
6659   if (noex)
6660     {
6661       tree body = build_must_not_throw_expr (TRANSACTION_EXPR_BODY (stmt),
6662                                              noex);
6663       /* This may not be true when the STATEMENT_LIST is empty.  */
6664       if (EXPR_P (body))
6665         SET_EXPR_LOCATION (body, EXPR_LOCATION (TRANSACTION_EXPR_BODY (stmt)));
6666       TREE_SIDE_EFFECTS (body) = 1;
6667       TRANSACTION_EXPR_BODY (stmt) = body;
6668     }
6669
6670   if (compound_stmt)
6671     finish_compound_stmt (compound_stmt);
6672 }
6673
6674 /* Build a __transaction_atomic or __transaction_relaxed expression.  If
6675    NOEX is non-NULL, we wrap the body in a MUST_NOT_THROW_EXPR with NOEX as
6676    condition.  */
6677
6678 tree
6679 build_transaction_expr (location_t loc, tree expr, int flags, tree noex)
6680 {
6681   tree ret;
6682   if (noex)
6683     {
6684       expr = build_must_not_throw_expr (expr, noex);
6685       if (EXPR_P (expr))
6686         SET_EXPR_LOCATION (expr, loc);
6687       TREE_SIDE_EFFECTS (expr) = 1;
6688     }
6689   ret = build1 (TRANSACTION_EXPR, TREE_TYPE (expr), expr);
6690   if (flags & TM_STMT_ATTR_RELAXED)
6691         TRANSACTION_EXPR_RELAXED (ret) = 1;
6692   TREE_SIDE_EFFECTS (ret) = 1;
6693   SET_EXPR_LOCATION (ret, loc);
6694   return ret;
6695 }
6696 \f
6697 void
6698 init_cp_semantics (void)
6699 {
6700 }
6701 \f
6702 /* Build a STATIC_ASSERT for a static assertion with the condition
6703    CONDITION and the message text MESSAGE.  LOCATION is the location
6704    of the static assertion in the source code.  When MEMBER_P, this
6705    static assertion is a member of a class.  */
6706 void 
6707 finish_static_assert (tree condition, tree message, location_t location, 
6708                       bool member_p)
6709 {
6710   if (message == NULL_TREE
6711       || message == error_mark_node
6712       || condition == NULL_TREE
6713       || condition == error_mark_node)
6714     return;
6715
6716   if (check_for_bare_parameter_packs (condition))
6717     condition = error_mark_node;
6718
6719   if (type_dependent_expression_p (condition) 
6720       || value_dependent_expression_p (condition))
6721     {
6722       /* We're in a template; build a STATIC_ASSERT and put it in
6723          the right place. */
6724       tree assertion;
6725
6726       assertion = make_node (STATIC_ASSERT);
6727       STATIC_ASSERT_CONDITION (assertion) = condition;
6728       STATIC_ASSERT_MESSAGE (assertion) = message;
6729       STATIC_ASSERT_SOURCE_LOCATION (assertion) = location;
6730
6731       if (member_p)
6732         maybe_add_class_template_decl_list (current_class_type, 
6733                                             assertion,
6734                                             /*friend_p=*/0);
6735       else
6736         add_stmt (assertion);
6737
6738       return;
6739     }
6740
6741   /* Fold the expression and convert it to a boolean value. */
6742   condition = fold_non_dependent_expr (condition);
6743   condition = cp_convert (boolean_type_node, condition, tf_warning_or_error);
6744   condition = maybe_constant_value (condition);
6745
6746   if (TREE_CODE (condition) == INTEGER_CST && !integer_zerop (condition))
6747     /* Do nothing; the condition is satisfied. */
6748     ;
6749   else 
6750     {
6751       location_t saved_loc = input_location;
6752
6753       input_location = location;
6754       if (TREE_CODE (condition) == INTEGER_CST 
6755           && integer_zerop (condition))
6756         /* Report the error. */
6757         error ("static assertion failed: %s", TREE_STRING_POINTER (message));
6758       else if (condition && condition != error_mark_node)
6759         {
6760           error ("non-constant condition for static assertion");
6761           cxx_constant_value (condition);
6762         }
6763       input_location = saved_loc;
6764     }
6765 }
6766 \f
6767 /* Implements the C++0x decltype keyword. Returns the type of EXPR,
6768    suitable for use as a type-specifier.
6769
6770    ID_EXPRESSION_OR_MEMBER_ACCESS_P is true when EXPR was parsed as an
6771    id-expression or a class member access, FALSE when it was parsed as
6772    a full expression.  */
6773
6774 tree
6775 finish_decltype_type (tree expr, bool id_expression_or_member_access_p,
6776                       tsubst_flags_t complain)
6777 {
6778   tree type = NULL_TREE;
6779
6780   if (!expr || error_operand_p (expr))
6781     return error_mark_node;
6782
6783   if (TYPE_P (expr)
6784       || TREE_CODE (expr) == TYPE_DECL
6785       || (TREE_CODE (expr) == BIT_NOT_EXPR
6786           && TYPE_P (TREE_OPERAND (expr, 0))))
6787     {
6788       if (complain & tf_error)
6789         error ("argument to decltype must be an expression");
6790       return error_mark_node;
6791     }
6792
6793   /* Depending on the resolution of DR 1172, we may later need to distinguish
6794      instantiation-dependent but not type-dependent expressions so that, say,
6795      A<decltype(sizeof(T))>::U doesn't require 'typename'.  */
6796   if (instantiation_dependent_expression_p (expr))
6797     {
6798       type = cxx_make_type (DECLTYPE_TYPE);
6799       DECLTYPE_TYPE_EXPR (type) = expr;
6800       DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type)
6801         = id_expression_or_member_access_p;
6802       SET_TYPE_STRUCTURAL_EQUALITY (type);
6803
6804       return type;
6805     }
6806
6807   /* The type denoted by decltype(e) is defined as follows:  */
6808
6809   expr = resolve_nondeduced_context (expr);
6810
6811   if (invalid_nonstatic_memfn_p (expr, complain))
6812     return error_mark_node;
6813
6814   if (type_unknown_p (expr))
6815     {
6816       if (complain & tf_error)
6817         error ("decltype cannot resolve address of overloaded function");
6818       return error_mark_node;
6819     }
6820
6821   /* To get the size of a static data member declared as an array of
6822      unknown bound, we need to instantiate it.  */
6823   if (VAR_P (expr)
6824       && VAR_HAD_UNKNOWN_BOUND (expr)
6825       && DECL_TEMPLATE_INSTANTIATION (expr))
6826     instantiate_decl (expr, /*defer_ok*/true, /*expl_inst_mem*/false);
6827
6828   if (id_expression_or_member_access_p)
6829     {
6830       /* If e is an id-expression or a class member access (5.2.5
6831          [expr.ref]), decltype(e) is defined as the type of the entity
6832          named by e. If there is no such entity, or e names a set of
6833          overloaded functions, the program is ill-formed.  */
6834       if (identifier_p (expr))
6835         expr = lookup_name (expr);
6836
6837       if (INDIRECT_REF_P (expr))
6838         /* This can happen when the expression is, e.g., "a.b". Just
6839            look at the underlying operand.  */
6840         expr = TREE_OPERAND (expr, 0);
6841
6842       if (TREE_CODE (expr) == OFFSET_REF
6843           || TREE_CODE (expr) == MEMBER_REF
6844           || TREE_CODE (expr) == SCOPE_REF)
6845         /* We're only interested in the field itself. If it is a
6846            BASELINK, we will need to see through it in the next
6847            step.  */
6848         expr = TREE_OPERAND (expr, 1);
6849
6850       if (BASELINK_P (expr))
6851         /* See through BASELINK nodes to the underlying function.  */
6852         expr = BASELINK_FUNCTIONS (expr);
6853
6854       switch (TREE_CODE (expr))
6855         {
6856         case FIELD_DECL:
6857           if (DECL_BIT_FIELD_TYPE (expr))
6858             {
6859               type = DECL_BIT_FIELD_TYPE (expr);
6860               break;
6861             }
6862           /* Fall through for fields that aren't bitfields.  */
6863
6864         case FUNCTION_DECL:
6865         case VAR_DECL:
6866         case CONST_DECL:
6867         case PARM_DECL:
6868         case RESULT_DECL:
6869         case TEMPLATE_PARM_INDEX:
6870           expr = mark_type_use (expr);
6871           type = TREE_TYPE (expr);
6872           break;
6873
6874         case ERROR_MARK:
6875           type = error_mark_node;
6876           break;
6877
6878         case COMPONENT_REF:
6879         case COMPOUND_EXPR:
6880           mark_type_use (expr);
6881           type = is_bitfield_expr_with_lowered_type (expr);
6882           if (!type)
6883             type = TREE_TYPE (TREE_OPERAND (expr, 1));
6884           break;
6885
6886         case BIT_FIELD_REF:
6887           gcc_unreachable ();
6888
6889         case INTEGER_CST:
6890         case PTRMEM_CST:
6891           /* We can get here when the id-expression refers to an
6892              enumerator or non-type template parameter.  */
6893           type = TREE_TYPE (expr);
6894           break;
6895
6896         default:
6897           /* Handle instantiated template non-type arguments.  */
6898           type = TREE_TYPE (expr);
6899           break;
6900         }
6901     }
6902   else
6903     {
6904       /* Within a lambda-expression:
6905
6906          Every occurrence of decltype((x)) where x is a possibly
6907          parenthesized id-expression that names an entity of
6908          automatic storage duration is treated as if x were
6909          transformed into an access to a corresponding data member
6910          of the closure type that would have been declared if x
6911          were a use of the denoted entity.  */
6912       if (outer_automatic_var_p (expr)
6913           && current_function_decl
6914           && LAMBDA_FUNCTION_P (current_function_decl))
6915         type = capture_decltype (expr);
6916       else if (error_operand_p (expr))
6917         type = error_mark_node;
6918       else if (expr == current_class_ptr)
6919         /* If the expression is just "this", we want the
6920            cv-unqualified pointer for the "this" type.  */
6921         type = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
6922       else
6923         {
6924           /* Otherwise, where T is the type of e, if e is an lvalue,
6925              decltype(e) is defined as T&; if an xvalue, T&&; otherwise, T. */
6926           cp_lvalue_kind clk = lvalue_kind (expr);
6927           type = unlowered_expr_type (expr);
6928           gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
6929
6930           /* For vector types, pick a non-opaque variant.  */
6931           if (TREE_CODE (type) == VECTOR_TYPE)
6932             type = strip_typedefs (type);
6933
6934           if (clk != clk_none && !(clk & clk_class))
6935             type = cp_build_reference_type (type, (clk & clk_rvalueref));
6936         }
6937     }
6938
6939   if (cxx_dialect >= cxx1y && array_of_runtime_bound_p (type))
6940     {
6941       if (complain & tf_warning_or_error)
6942         pedwarn (input_location, OPT_Wvla,
6943                  "taking decltype of array of runtime bound");
6944       else
6945         return error_mark_node;
6946     }
6947
6948   return type;
6949 }
6950
6951 /* Called from trait_expr_value to evaluate either __has_nothrow_assign or 
6952    __has_nothrow_copy, depending on assign_p.  */
6953
6954 static bool
6955 classtype_has_nothrow_assign_or_copy_p (tree type, bool assign_p)
6956 {
6957   tree fns;
6958
6959   if (assign_p)
6960     {
6961       int ix;
6962       ix = lookup_fnfields_1 (type, ansi_assopname (NOP_EXPR));
6963       if (ix < 0)
6964         return false;
6965       fns = (*CLASSTYPE_METHOD_VEC (type))[ix];
6966     } 
6967   else if (TYPE_HAS_COPY_CTOR (type))
6968     {
6969       /* If construction of the copy constructor was postponed, create
6970          it now.  */
6971       if (CLASSTYPE_LAZY_COPY_CTOR (type))
6972         lazily_declare_fn (sfk_copy_constructor, type);
6973       if (CLASSTYPE_LAZY_MOVE_CTOR (type))
6974         lazily_declare_fn (sfk_move_constructor, type);
6975       fns = CLASSTYPE_CONSTRUCTORS (type);
6976     }
6977   else
6978     return false;
6979
6980   for (; fns; fns = OVL_NEXT (fns))
6981     {
6982       tree fn = OVL_CURRENT (fns);
6983  
6984       if (assign_p)
6985         {
6986           if (copy_fn_p (fn) == 0)
6987             continue;
6988         }
6989       else if (copy_fn_p (fn) <= 0)
6990         continue;
6991
6992       maybe_instantiate_noexcept (fn);
6993       if (!TYPE_NOTHROW_P (TREE_TYPE (fn)))
6994         return false;
6995     }
6996
6997   return true;
6998 }
6999
7000 /* Actually evaluates the trait.  */
7001
7002 static bool
7003 trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
7004 {
7005   enum tree_code type_code1;
7006   tree t;
7007
7008   type_code1 = TREE_CODE (type1);
7009
7010   switch (kind)
7011     {
7012     case CPTK_HAS_NOTHROW_ASSIGN:
7013       type1 = strip_array_types (type1);
7014       return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
7015               && (trait_expr_value (CPTK_HAS_TRIVIAL_ASSIGN, type1, type2)
7016                   || (CLASS_TYPE_P (type1)
7017                       && classtype_has_nothrow_assign_or_copy_p (type1,
7018                                                                  true))));
7019
7020     case CPTK_HAS_TRIVIAL_ASSIGN:
7021       /* ??? The standard seems to be missing the "or array of such a class
7022          type" wording for this trait.  */
7023       type1 = strip_array_types (type1);
7024       return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
7025               && (trivial_type_p (type1)
7026                     || (CLASS_TYPE_P (type1)
7027                         && TYPE_HAS_TRIVIAL_COPY_ASSIGN (type1))));
7028
7029     case CPTK_HAS_NOTHROW_CONSTRUCTOR:
7030       type1 = strip_array_types (type1);
7031       return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2) 
7032               || (CLASS_TYPE_P (type1)
7033                   && (t = locate_ctor (type1))
7034                   && (maybe_instantiate_noexcept (t),
7035                       TYPE_NOTHROW_P (TREE_TYPE (t)))));
7036
7037     case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
7038       type1 = strip_array_types (type1);
7039       return (trivial_type_p (type1)
7040               || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_DFLT (type1)));
7041
7042     case CPTK_HAS_NOTHROW_COPY:
7043       type1 = strip_array_types (type1);
7044       return (trait_expr_value (CPTK_HAS_TRIVIAL_COPY, type1, type2)
7045               || (CLASS_TYPE_P (type1)
7046                   && classtype_has_nothrow_assign_or_copy_p (type1, false)));
7047
7048     case CPTK_HAS_TRIVIAL_COPY:
7049       /* ??? The standard seems to be missing the "or array of such a class
7050          type" wording for this trait.  */
7051       type1 = strip_array_types (type1);
7052       return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
7053               || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_COPY_CTOR (type1)));
7054
7055     case CPTK_HAS_TRIVIAL_DESTRUCTOR:
7056       type1 = strip_array_types (type1);
7057       return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
7058               || (CLASS_TYPE_P (type1)
7059                   && TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
7060
7061     case CPTK_HAS_VIRTUAL_DESTRUCTOR:
7062       return type_has_virtual_destructor (type1);
7063
7064     case CPTK_IS_ABSTRACT:
7065       return (ABSTRACT_CLASS_TYPE_P (type1));
7066
7067     case CPTK_IS_BASE_OF:
7068       return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
7069               && DERIVED_FROM_P (type1, type2));
7070
7071     case CPTK_IS_CLASS:
7072       return (NON_UNION_CLASS_TYPE_P (type1));
7073
7074     case CPTK_IS_CONVERTIBLE_TO:
7075       /* TODO  */
7076       return false;
7077
7078     case CPTK_IS_EMPTY:
7079       return (NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1));
7080
7081     case CPTK_IS_ENUM:
7082       return (type_code1 == ENUMERAL_TYPE);
7083
7084     case CPTK_IS_FINAL:
7085       return (CLASS_TYPE_P (type1) && CLASSTYPE_FINAL (type1));
7086
7087     case CPTK_IS_LITERAL_TYPE:
7088       return (literal_type_p (type1));
7089
7090     case CPTK_IS_POD:
7091       return (pod_type_p (type1));
7092
7093     case CPTK_IS_POLYMORPHIC:
7094       return (CLASS_TYPE_P (type1) && TYPE_POLYMORPHIC_P (type1));
7095
7096     case CPTK_IS_STD_LAYOUT:
7097       return (std_layout_type_p (type1));
7098
7099     case CPTK_IS_TRIVIAL:
7100       return (trivial_type_p (type1));
7101
7102     case CPTK_IS_UNION:
7103       return (type_code1 == UNION_TYPE);
7104
7105     default:
7106       gcc_unreachable ();
7107       return false;
7108     }
7109 }
7110
7111 /* If TYPE is an array of unknown bound, or (possibly cv-qualified)
7112    void, or a complete type, returns it, otherwise NULL_TREE.  */
7113
7114 static tree
7115 check_trait_type (tree type)
7116 {
7117   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
7118       && COMPLETE_TYPE_P (TREE_TYPE (type)))
7119     return type;
7120
7121   if (VOID_TYPE_P (type))
7122     return type;
7123
7124   return complete_type_or_else (strip_array_types (type), NULL_TREE);
7125 }
7126
7127 /* Process a trait expression.  */
7128
7129 tree
7130 finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
7131 {
7132   gcc_assert (kind == CPTK_HAS_NOTHROW_ASSIGN
7133               || kind == CPTK_HAS_NOTHROW_CONSTRUCTOR
7134               || kind == CPTK_HAS_NOTHROW_COPY
7135               || kind == CPTK_HAS_TRIVIAL_ASSIGN
7136               || kind == CPTK_HAS_TRIVIAL_CONSTRUCTOR
7137               || kind == CPTK_HAS_TRIVIAL_COPY
7138               || kind == CPTK_HAS_TRIVIAL_DESTRUCTOR
7139               || kind == CPTK_HAS_VIRTUAL_DESTRUCTOR          
7140               || kind == CPTK_IS_ABSTRACT
7141               || kind == CPTK_IS_BASE_OF
7142               || kind == CPTK_IS_CLASS
7143               || kind == CPTK_IS_CONVERTIBLE_TO
7144               || kind == CPTK_IS_EMPTY
7145               || kind == CPTK_IS_ENUM
7146               || kind == CPTK_IS_FINAL
7147               || kind == CPTK_IS_LITERAL_TYPE
7148               || kind == CPTK_IS_POD
7149               || kind == CPTK_IS_POLYMORPHIC
7150               || kind == CPTK_IS_STD_LAYOUT
7151               || kind == CPTK_IS_TRIVIAL
7152               || kind == CPTK_IS_UNION);
7153
7154   if (kind == CPTK_IS_CONVERTIBLE_TO)
7155     {
7156       sorry ("__is_convertible_to");
7157       return error_mark_node;
7158     }
7159
7160   if (type1 == error_mark_node
7161       || ((kind == CPTK_IS_BASE_OF || kind == CPTK_IS_CONVERTIBLE_TO)
7162           && type2 == error_mark_node))
7163     return error_mark_node;
7164
7165   if (processing_template_decl)
7166     {
7167       tree trait_expr = make_node (TRAIT_EXPR);
7168       TREE_TYPE (trait_expr) = boolean_type_node;
7169       TRAIT_EXPR_TYPE1 (trait_expr) = type1;
7170       TRAIT_EXPR_TYPE2 (trait_expr) = type2;
7171       TRAIT_EXPR_KIND (trait_expr) = kind;
7172       return trait_expr;
7173     }
7174
7175   switch (kind)
7176     {
7177     case CPTK_HAS_NOTHROW_ASSIGN:
7178     case CPTK_HAS_TRIVIAL_ASSIGN:
7179     case CPTK_HAS_NOTHROW_CONSTRUCTOR:
7180     case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
7181     case CPTK_HAS_NOTHROW_COPY:
7182     case CPTK_HAS_TRIVIAL_COPY:
7183     case CPTK_HAS_TRIVIAL_DESTRUCTOR:
7184     case CPTK_HAS_VIRTUAL_DESTRUCTOR:
7185     case CPTK_IS_ABSTRACT:
7186     case CPTK_IS_EMPTY:
7187     case CPTK_IS_FINAL:
7188     case CPTK_IS_LITERAL_TYPE:
7189     case CPTK_IS_POD:
7190     case CPTK_IS_POLYMORPHIC:
7191     case CPTK_IS_STD_LAYOUT:
7192     case CPTK_IS_TRIVIAL:
7193       if (!check_trait_type (type1))
7194         return error_mark_node;
7195       break;
7196
7197     case CPTK_IS_BASE_OF:
7198       if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
7199           && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
7200           && !complete_type_or_else (type2, NULL_TREE))
7201         /* We already issued an error.  */
7202         return error_mark_node;
7203       break;
7204
7205     case CPTK_IS_CLASS:
7206     case CPTK_IS_ENUM:
7207     case CPTK_IS_UNION:
7208       break;
7209     
7210     case CPTK_IS_CONVERTIBLE_TO:
7211     default:
7212       gcc_unreachable ();
7213     }
7214
7215   return (trait_expr_value (kind, type1, type2)
7216           ? boolean_true_node : boolean_false_node);
7217 }
7218
7219 /* Do-nothing variants of functions to handle pragma FLOAT_CONST_DECIMAL64,
7220    which is ignored for C++.  */
7221
7222 void
7223 set_float_const_decimal64 (void)
7224 {
7225 }
7226
7227 void
7228 clear_float_const_decimal64 (void)
7229 {
7230 }
7231
7232 bool
7233 float_const_decimal64_p (void)
7234 {
7235   return 0;
7236 }
7237
7238 \f
7239 /* Return true if T is a literal type.   */
7240
7241 bool
7242 literal_type_p (tree t)
7243 {
7244   if (SCALAR_TYPE_P (t)
7245       || TREE_CODE (t) == VECTOR_TYPE
7246       || TREE_CODE (t) == REFERENCE_TYPE)
7247     return true;
7248   if (CLASS_TYPE_P (t))
7249     {
7250       t = complete_type (t);
7251       gcc_assert (COMPLETE_TYPE_P (t) || errorcount);
7252       return CLASSTYPE_LITERAL_P (t);
7253     }
7254   if (TREE_CODE (t) == ARRAY_TYPE)
7255     return literal_type_p (strip_array_types (t));
7256   return false;
7257 }
7258
7259 /* If DECL is a variable declared `constexpr', require its type
7260    be literal.  Return the DECL if OK, otherwise NULL.  */
7261
7262 tree
7263 ensure_literal_type_for_constexpr_object (tree decl)
7264 {
7265   tree type = TREE_TYPE (decl);
7266   if (VAR_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl)
7267       && !processing_template_decl)
7268     {
7269       if (CLASS_TYPE_P (type) && !COMPLETE_TYPE_P (complete_type (type)))
7270         /* Don't complain here, we'll complain about incompleteness
7271            when we try to initialize the variable.  */;
7272       else if (!literal_type_p (type))
7273         {
7274           error ("the type %qT of constexpr variable %qD is not literal",
7275                  type, decl);
7276           explain_non_literal_class (type);
7277           return NULL;
7278         }
7279     }
7280   return decl;
7281 }
7282
7283 /* Representation of entries in the constexpr function definition table.  */
7284
7285 typedef struct GTY(()) constexpr_fundef {
7286   tree decl;
7287   tree body;
7288 } constexpr_fundef;
7289
7290 /* This table holds all constexpr function definitions seen in
7291    the current translation unit.  */
7292
7293 static GTY ((param_is (constexpr_fundef))) htab_t constexpr_fundef_table;
7294
7295 /* Utility function used for managing the constexpr function table.
7296    Return true if the entries pointed to by P and Q are for the
7297    same constexpr function.  */
7298
7299 static inline int
7300 constexpr_fundef_equal (const void *p, const void *q)
7301 {
7302   const constexpr_fundef *lhs = (const constexpr_fundef *) p;
7303   const constexpr_fundef *rhs = (const constexpr_fundef *) q;
7304   return lhs->decl == rhs->decl;
7305 }
7306
7307 /* Utility function used for managing the constexpr function table.
7308    Return a hash value for the entry pointed to by Q.  */
7309
7310 static inline hashval_t
7311 constexpr_fundef_hash (const void *p)
7312 {
7313   const constexpr_fundef *fundef = (const constexpr_fundef *) p;
7314   return DECL_UID (fundef->decl);
7315 }
7316
7317 /* Return a previously saved definition of function FUN.   */
7318
7319 static constexpr_fundef *
7320 retrieve_constexpr_fundef (tree fun)
7321 {
7322   constexpr_fundef fundef = { NULL, NULL };
7323   if (constexpr_fundef_table == NULL)
7324     return NULL;
7325
7326   fundef.decl = fun;
7327   return (constexpr_fundef *) htab_find (constexpr_fundef_table, &fundef);
7328 }
7329
7330 /* Check whether the parameter and return types of FUN are valid for a
7331    constexpr function, and complain if COMPLAIN.  */
7332
7333 static bool
7334 is_valid_constexpr_fn (tree fun, bool complain)
7335 {
7336   tree parm = FUNCTION_FIRST_USER_PARM (fun);
7337   bool ret = true;
7338   for (; parm != NULL; parm = TREE_CHAIN (parm))
7339     if (!literal_type_p (TREE_TYPE (parm)))
7340       {
7341         ret = false;
7342         if (complain)
7343           {
7344             error ("invalid type for parameter %d of constexpr "
7345                    "function %q+#D", DECL_PARM_INDEX (parm), fun);
7346             explain_non_literal_class (TREE_TYPE (parm));
7347           }
7348       }
7349
7350   if (!DECL_CONSTRUCTOR_P (fun))
7351     {
7352       tree rettype = TREE_TYPE (TREE_TYPE (fun));
7353       if (!literal_type_p (rettype))
7354         {
7355           ret = false;
7356           if (complain)
7357             {
7358               error ("invalid return type %qT of constexpr function %q+D",
7359                      rettype, fun);
7360               explain_non_literal_class (rettype);
7361             }
7362         }
7363
7364       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
7365           && !CLASSTYPE_LITERAL_P (DECL_CONTEXT (fun)))
7366         {
7367           ret = false;
7368           if (complain)
7369             {
7370               error ("enclosing class of constexpr non-static member "
7371                      "function %q+#D is not a literal type", fun);
7372               explain_non_literal_class (DECL_CONTEXT (fun));
7373             }
7374         }
7375     }
7376   else if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fun)))
7377     {
7378       ret = false;
7379       if (complain)
7380         error ("%q#T has virtual base classes", DECL_CONTEXT (fun));
7381     }
7382
7383   return ret;
7384 }
7385
7386 /* Subroutine of build_data_member_initialization.  MEMBER is a COMPONENT_REF
7387    for a member of an anonymous aggregate, INIT is the initializer for that
7388    member, and VEC_OUTER is the vector of constructor elements for the class
7389    whose constructor we are processing.  Add the initializer to the vector
7390    and return true to indicate success.  */
7391
7392 static bool
7393 build_anon_member_initialization (tree member, tree init,
7394                                   vec<constructor_elt, va_gc> **vec_outer)
7395 {
7396   /* MEMBER presents the relevant fields from the inside out, but we need
7397      to build up the initializer from the outside in so that we can reuse
7398      previously built CONSTRUCTORs if this is, say, the second field in an
7399      anonymous struct.  So we use a vec as a stack.  */
7400   vec<tree> fields;
7401   fields.create (2);
7402   do
7403     {
7404       fields.safe_push (TREE_OPERAND (member, 1));
7405       member = TREE_OPERAND (member, 0);
7406     }
7407   while (ANON_AGGR_TYPE_P (TREE_TYPE (member)));
7408
7409   /* VEC has the constructor elements vector for the context of FIELD.
7410      If FIELD is an anonymous aggregate, we will push inside it.  */
7411   vec<constructor_elt, va_gc> **vec = vec_outer;
7412   tree field;
7413   while (field = fields.pop(),
7414          ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7415     {
7416       tree ctor;
7417       /* If there is already an outer constructor entry for the anonymous
7418          aggregate FIELD, use it; otherwise, insert one.  */
7419       if (vec_safe_is_empty (*vec)
7420           || (*vec)->last().index != field)
7421         {
7422           ctor = build_constructor (TREE_TYPE (field), NULL);
7423           CONSTRUCTOR_APPEND_ELT (*vec, field, ctor);
7424         }
7425       else
7426         ctor = (*vec)->last().value;
7427       vec = &CONSTRUCTOR_ELTS (ctor);
7428     }
7429
7430   /* Now we're at the innermost field, the one that isn't an anonymous
7431      aggregate.  Add its initializer to the CONSTRUCTOR and we're done.  */
7432   gcc_assert (fields.is_empty());
7433   fields.release ();
7434   CONSTRUCTOR_APPEND_ELT (*vec, field, init);
7435
7436   return true;
7437 }
7438
7439 /* Subroutine of  build_constexpr_constructor_member_initializers.
7440    The expression tree T represents a data member initialization
7441    in a (constexpr) constructor definition.  Build a pairing of
7442    the data member with its initializer, and prepend that pair
7443    to the existing initialization pair INITS.  */
7444
7445 static bool
7446 build_data_member_initialization (tree t, vec<constructor_elt, va_gc> **vec)
7447 {
7448   tree member, init;
7449   if (TREE_CODE (t) == CLEANUP_POINT_EXPR)
7450     t = TREE_OPERAND (t, 0);
7451   if (TREE_CODE (t) == EXPR_STMT)
7452     t = TREE_OPERAND (t, 0);
7453   if (t == error_mark_node)
7454     return false;
7455   if (TREE_CODE (t) == STATEMENT_LIST)
7456     {
7457       tree_stmt_iterator i;
7458       for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
7459         {
7460           if (! build_data_member_initialization (tsi_stmt (i), vec))
7461             return false;
7462         }
7463       return true;
7464     }
7465   if (TREE_CODE (t) == CLEANUP_STMT)
7466     {
7467       /* We can't see a CLEANUP_STMT in a constructor for a literal class,
7468          but we can in a constexpr constructor for a non-literal class.  Just
7469          ignore it; either all the initialization will be constant, in which
7470          case the cleanup can't run, or it can't be constexpr.
7471          Still recurse into CLEANUP_BODY.  */
7472       return build_data_member_initialization (CLEANUP_BODY (t), vec);
7473     }
7474   if (TREE_CODE (t) == CONVERT_EXPR)
7475     t = TREE_OPERAND (t, 0);
7476   if (TREE_CODE (t) == INIT_EXPR
7477       || TREE_CODE (t) == MODIFY_EXPR)
7478     {
7479       member = TREE_OPERAND (t, 0);
7480       init = break_out_target_exprs (TREE_OPERAND (t, 1));
7481     }
7482   else if (TREE_CODE (t) == CALL_EXPR)
7483     {
7484       member = CALL_EXPR_ARG (t, 0);
7485       /* We don't use build_cplus_new here because it complains about
7486          abstract bases.  Leaving the call unwrapped means that it has the
7487          wrong type, but cxx_eval_constant_expression doesn't care.  */
7488       init = break_out_target_exprs (t);
7489     }
7490   else if (TREE_CODE (t) == DECL_EXPR)
7491     /* Declaring a temporary, don't add it to the CONSTRUCTOR.  */
7492     return true;
7493   else
7494     gcc_unreachable ();
7495   if (INDIRECT_REF_P (member))
7496     member = TREE_OPERAND (member, 0);
7497   if (TREE_CODE (member) == NOP_EXPR)
7498     {
7499       tree op = member;
7500       STRIP_NOPS (op);
7501       if (TREE_CODE (op) == ADDR_EXPR)
7502         {
7503           gcc_assert (same_type_ignoring_top_level_qualifiers_p
7504                       (TREE_TYPE (TREE_TYPE (op)),
7505                        TREE_TYPE (TREE_TYPE (member))));
7506           /* Initializing a cv-qualified member; we need to look through
7507              the const_cast.  */
7508           member = op;
7509         }
7510       else if (op == current_class_ptr
7511                && (same_type_ignoring_top_level_qualifiers_p
7512                    (TREE_TYPE (TREE_TYPE (member)),
7513                     current_class_type)))
7514         /* Delegating constructor.  */
7515         member = op;
7516       else
7517         {
7518           /* This is an initializer for an empty base; keep it for now so
7519              we can check it in cxx_eval_bare_aggregate.  */
7520           gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (member))));
7521         }
7522     }
7523   if (TREE_CODE (member) == ADDR_EXPR)
7524     member = TREE_OPERAND (member, 0);
7525   if (TREE_CODE (member) == COMPONENT_REF)
7526     {
7527       tree aggr = TREE_OPERAND (member, 0);
7528       if (TREE_CODE (aggr) != COMPONENT_REF)
7529         /* Normal member initialization.  */
7530         member = TREE_OPERAND (member, 1);
7531       else if (ANON_AGGR_TYPE_P (TREE_TYPE (aggr)))
7532         /* Initializing a member of an anonymous union.  */
7533         return build_anon_member_initialization (member, init, vec);
7534       else
7535         /* We're initializing a vtable pointer in a base.  Leave it as
7536            COMPONENT_REF so we remember the path to get to the vfield.  */
7537         gcc_assert (TREE_TYPE (member) == vtbl_ptr_type_node);
7538     }
7539
7540   CONSTRUCTOR_APPEND_ELT (*vec, member, init);
7541   return true;
7542 }
7543
7544 /* Make sure that there are no statements after LAST in the constructor
7545    body represented by LIST.  */
7546
7547 bool
7548 check_constexpr_ctor_body (tree last, tree list)
7549 {
7550   bool ok = true;
7551   if (TREE_CODE (list) == STATEMENT_LIST)
7552     {
7553       tree_stmt_iterator i = tsi_last (list);
7554       for (; !tsi_end_p (i); tsi_prev (&i))
7555         {
7556           tree t = tsi_stmt (i);
7557           if (t == last)
7558             break;
7559           if (TREE_CODE (t) == BIND_EXPR)
7560             {
7561               if (!check_constexpr_ctor_body (last, BIND_EXPR_BODY (t)))
7562                 return false;
7563               else
7564                 continue;
7565             }
7566           /* We currently allow typedefs and static_assert.
7567              FIXME allow them in the standard, too.  */
7568           if (TREE_CODE (t) != STATIC_ASSERT)
7569             {
7570               ok = false;
7571               break;
7572             }
7573         }
7574     }
7575   else if (list != last
7576            && TREE_CODE (list) != STATIC_ASSERT)
7577     ok = false;
7578   if (!ok)
7579     {
7580       error ("constexpr constructor does not have empty body");
7581       DECL_DECLARED_CONSTEXPR_P (current_function_decl) = false;
7582     }
7583   return ok;
7584 }
7585
7586 /* V is a vector of constructor elements built up for the base and member
7587    initializers of a constructor for TYPE.  They need to be in increasing
7588    offset order, which they might not be yet if TYPE has a primary base
7589    which is not first in the base-clause or a vptr and at least one base
7590    all of which are non-primary.  */
7591
7592 static vec<constructor_elt, va_gc> *
7593 sort_constexpr_mem_initializers (tree type, vec<constructor_elt, va_gc> *v)
7594 {
7595   tree pri = CLASSTYPE_PRIMARY_BINFO (type);
7596   tree field_type;
7597   constructor_elt elt;
7598   int i;
7599
7600   if (pri)
7601     field_type = BINFO_TYPE (pri);
7602   else if (TYPE_CONTAINS_VPTR_P (type))
7603     field_type = vtbl_ptr_type_node;
7604   else
7605     return v;
7606
7607   /* Find the element for the primary base or vptr and move it to the
7608      beginning of the vec.  */
7609   vec<constructor_elt, va_gc> &vref = *v;
7610   for (i = 0; ; ++i)
7611     if (TREE_TYPE (vref[i].index) == field_type)
7612       break;
7613
7614   if (i > 0)
7615     {
7616       elt = vref[i];
7617       for (; i > 0; --i)
7618         vref[i] = vref[i-1];
7619       vref[0] = elt;
7620     }
7621
7622   return v;
7623 }
7624
7625 /* Build compile-time evalable representations of member-initializer list
7626    for a constexpr constructor.  */
7627
7628 static tree
7629 build_constexpr_constructor_member_initializers (tree type, tree body)
7630 {
7631   vec<constructor_elt, va_gc> *vec = NULL;
7632   bool ok = true;
7633   if (TREE_CODE (body) == MUST_NOT_THROW_EXPR
7634       || TREE_CODE (body) == EH_SPEC_BLOCK)
7635     body = TREE_OPERAND (body, 0);
7636   if (TREE_CODE (body) == STATEMENT_LIST)
7637     body = STATEMENT_LIST_HEAD (body)->stmt;
7638   body = BIND_EXPR_BODY (body);
7639   if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
7640     {
7641       body = TREE_OPERAND (body, 0);
7642       if (TREE_CODE (body) == EXPR_STMT)
7643         body = TREE_OPERAND (body, 0);
7644       if (TREE_CODE (body) == INIT_EXPR
7645           && (same_type_ignoring_top_level_qualifiers_p
7646               (TREE_TYPE (TREE_OPERAND (body, 0)),
7647                current_class_type)))
7648         {
7649           /* Trivial copy.  */
7650           return TREE_OPERAND (body, 1);
7651         }
7652       ok = build_data_member_initialization (body, &vec);
7653     }
7654   else if (TREE_CODE (body) == STATEMENT_LIST)
7655     {
7656       tree_stmt_iterator i;
7657       for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
7658         {
7659           ok = build_data_member_initialization (tsi_stmt (i), &vec);
7660           if (!ok)
7661             break;
7662         }
7663     }
7664   else if (TREE_CODE (body) == TRY_BLOCK)
7665     {
7666       error ("body of %<constexpr%> constructor cannot be "
7667              "a function-try-block");
7668       return error_mark_node;
7669     }
7670   else if (EXPR_P (body))
7671     ok = build_data_member_initialization (body, &vec);
7672   else
7673     gcc_assert (errorcount > 0);
7674   if (ok)
7675     {
7676       if (vec_safe_length (vec) > 0)
7677         {
7678           /* In a delegating constructor, return the target.  */
7679           constructor_elt *ce = &(*vec)[0];
7680           if (ce->index == current_class_ptr)
7681             {
7682               body = ce->value;
7683               vec_free (vec);
7684               return body;
7685             }
7686         }
7687       vec = sort_constexpr_mem_initializers (type, vec);
7688       return build_constructor (type, vec);
7689     }
7690   else
7691     return error_mark_node;
7692 }
7693
7694 /* Subroutine of register_constexpr_fundef.  BODY is the body of a function
7695    declared to be constexpr, or a sub-statement thereof.  Returns the
7696    return value if suitable, error_mark_node for a statement not allowed in
7697    a constexpr function, or NULL_TREE if no return value was found.  */
7698
7699 static tree
7700 constexpr_fn_retval (tree body)
7701 {
7702   switch (TREE_CODE (body))
7703     {
7704     case STATEMENT_LIST:
7705       {
7706         tree_stmt_iterator i;
7707         tree expr = NULL_TREE;
7708         for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
7709           {
7710             tree s = constexpr_fn_retval (tsi_stmt (i));
7711             if (s == error_mark_node)
7712               return error_mark_node;
7713             else if (s == NULL_TREE)
7714               /* Keep iterating.  */;
7715             else if (expr)
7716               /* Multiple return statements.  */
7717               return error_mark_node;
7718             else
7719               expr = s;
7720           }
7721         return expr;
7722       }
7723
7724     case RETURN_EXPR:
7725       return break_out_target_exprs (TREE_OPERAND (body, 0));
7726
7727     case DECL_EXPR:
7728       if (TREE_CODE (DECL_EXPR_DECL (body)) == USING_DECL)
7729         return NULL_TREE;
7730       return error_mark_node;
7731
7732     case CLEANUP_POINT_EXPR:
7733       return constexpr_fn_retval (TREE_OPERAND (body, 0));
7734
7735     case USING_STMT:
7736       return NULL_TREE;
7737
7738     default:
7739       return error_mark_node;
7740     }
7741 }
7742
7743 /* Subroutine of register_constexpr_fundef.  BODY is the DECL_SAVED_TREE of
7744    FUN; do the necessary transformations to turn it into a single expression
7745    that we can store in the hash table.  */
7746
7747 static tree
7748 massage_constexpr_body (tree fun, tree body)
7749 {
7750   if (DECL_CONSTRUCTOR_P (fun))
7751     body = build_constexpr_constructor_member_initializers
7752       (DECL_CONTEXT (fun), body);
7753   else
7754     {
7755       if (TREE_CODE (body) == EH_SPEC_BLOCK)
7756         body = EH_SPEC_STMTS (body);
7757       if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
7758         body = TREE_OPERAND (body, 0);
7759       if (TREE_CODE (body) == BIND_EXPR)
7760         body = BIND_EXPR_BODY (body);
7761       body = constexpr_fn_retval (body);
7762     }
7763   return body;
7764 }
7765
7766 /* FUN is a constexpr constructor with massaged body BODY.  Return true
7767    if some bases/fields are uninitialized, and complain if COMPLAIN.  */
7768
7769 static bool
7770 cx_check_missing_mem_inits (tree fun, tree body, bool complain)
7771 {
7772   bool bad;
7773   tree field;
7774   unsigned i, nelts;
7775   tree ctype;
7776
7777   if (TREE_CODE (body) != CONSTRUCTOR)
7778     return false;
7779
7780   nelts = CONSTRUCTOR_NELTS (body);
7781   ctype = DECL_CONTEXT (fun);
7782   field = TYPE_FIELDS (ctype);
7783
7784   if (TREE_CODE (ctype) == UNION_TYPE)
7785     {
7786       if (nelts == 0 && next_initializable_field (field))
7787         {
7788           if (complain)
7789             error ("%<constexpr%> constructor for union %qT must "
7790                    "initialize exactly one non-static data member", ctype);
7791           return true;
7792         }
7793       return false;
7794     }
7795
7796   bad = false;
7797   for (i = 0; i <= nelts; ++i)
7798     {
7799       tree index;
7800       if (i == nelts)
7801         index = NULL_TREE;
7802       else
7803         {
7804           index = CONSTRUCTOR_ELT (body, i)->index;
7805           /* Skip base and vtable inits.  */
7806           if (TREE_CODE (index) != FIELD_DECL
7807               || DECL_ARTIFICIAL (index))
7808             continue;
7809         }
7810       for (; field != index; field = DECL_CHAIN (field))
7811         {
7812           tree ftype;
7813           if (TREE_CODE (field) != FIELD_DECL
7814               || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
7815               || DECL_ARTIFICIAL (field))
7816             continue;
7817           ftype = strip_array_types (TREE_TYPE (field));
7818           if (type_has_constexpr_default_constructor (ftype))
7819             {
7820               /* It's OK to skip a member with a trivial constexpr ctor.
7821                  A constexpr ctor that isn't trivial should have been
7822                  added in by now.  */
7823               gcc_checking_assert (!TYPE_HAS_COMPLEX_DFLT (ftype)
7824                                    || errorcount != 0);
7825               continue;
7826             }
7827           if (!complain)
7828             return true;
7829           error ("uninitialized member %qD in %<constexpr%> constructor",
7830                  field);
7831           bad = true;
7832         }
7833       if (field == NULL_TREE)
7834         break;
7835       field = DECL_CHAIN (field);
7836     }
7837
7838   return bad;
7839 }
7840
7841 /* We are processing the definition of the constexpr function FUN.
7842    Check that its BODY fulfills the propriate requirements and
7843    enter it in the constexpr function definition table.
7844    For constructor BODY is actually the TREE_LIST of the
7845    member-initializer list.  */
7846
7847 tree
7848 register_constexpr_fundef (tree fun, tree body)
7849 {
7850   constexpr_fundef entry;
7851   constexpr_fundef **slot;
7852
7853   if (!is_valid_constexpr_fn (fun, !DECL_GENERATED_P (fun)))
7854     return NULL;
7855
7856   body = massage_constexpr_body (fun, body);
7857   if (body == NULL_TREE || body == error_mark_node)
7858     {
7859       if (!DECL_CONSTRUCTOR_P (fun))
7860         error ("body of constexpr function %qD not a return-statement", fun);
7861       return NULL;
7862     }
7863
7864   if (!potential_rvalue_constant_expression (body))
7865     {
7866       if (!DECL_GENERATED_P (fun))
7867         require_potential_rvalue_constant_expression (body);
7868       return NULL;
7869     }
7870
7871   if (DECL_CONSTRUCTOR_P (fun)
7872       && cx_check_missing_mem_inits (fun, body, !DECL_GENERATED_P (fun)))
7873     return NULL;
7874
7875   /* Create the constexpr function table if necessary.  */
7876   if (constexpr_fundef_table == NULL)
7877     constexpr_fundef_table = htab_create_ggc (101,
7878                                               constexpr_fundef_hash,
7879                                               constexpr_fundef_equal,
7880                                               ggc_free);
7881   entry.decl = fun;
7882   entry.body = body;
7883   slot = (constexpr_fundef **)
7884     htab_find_slot (constexpr_fundef_table, &entry, INSERT);
7885
7886   gcc_assert (*slot == NULL);
7887   *slot = ggc_alloc_constexpr_fundef ();
7888   **slot = entry;
7889
7890   return fun;
7891 }
7892
7893 /* FUN is a non-constexpr function called in a context that requires a
7894    constant expression.  If it comes from a constexpr template, explain why
7895    the instantiation isn't constexpr.  */
7896
7897 void
7898 explain_invalid_constexpr_fn (tree fun)
7899 {
7900   static struct pointer_set_t *diagnosed;
7901   tree body;
7902   location_t save_loc;
7903   /* Only diagnose defaulted functions or instantiations.  */
7904   if (!DECL_DEFAULTED_FN (fun)
7905       && !is_instantiation_of_constexpr (fun))
7906     return;
7907   if (diagnosed == NULL)
7908     diagnosed = pointer_set_create ();
7909   if (pointer_set_insert (diagnosed, fun) != 0)
7910     /* Already explained.  */
7911     return;
7912
7913   save_loc = input_location;
7914   input_location = DECL_SOURCE_LOCATION (fun);
7915   inform (0, "%q+D is not usable as a constexpr function because:", fun);
7916   /* First check the declaration.  */
7917   if (is_valid_constexpr_fn (fun, true))
7918     {
7919       /* Then if it's OK, the body.  */
7920       if (DECL_DEFAULTED_FN (fun))
7921         explain_implicit_non_constexpr (fun);
7922       else
7923         {
7924           body = massage_constexpr_body (fun, DECL_SAVED_TREE (fun));
7925           require_potential_rvalue_constant_expression (body);
7926           if (DECL_CONSTRUCTOR_P (fun))
7927             cx_check_missing_mem_inits (fun, body, true);
7928         }
7929     }
7930   input_location = save_loc;
7931 }
7932
7933 /* Objects of this type represent calls to constexpr functions
7934    along with the bindings of parameters to their arguments, for
7935    the purpose of compile time evaluation.  */
7936
7937 typedef struct GTY(()) constexpr_call {
7938   /* Description of the constexpr function definition.  */
7939   constexpr_fundef *fundef;
7940   /* Parameter bindings environment.  A TREE_LIST where each TREE_PURPOSE
7941      is a parameter _DECL and the TREE_VALUE is the value of the parameter.
7942      Note: This arrangement is made to accommodate the use of
7943      iterative_hash_template_arg (see pt.c).  If you change this
7944      representation, also change the hash calculation in
7945      cxx_eval_call_expression.  */
7946   tree bindings;
7947   /* Result of the call.
7948        NULL means the call is being evaluated.
7949        error_mark_node means that the evaluation was erroneous;
7950        otherwise, the actuall value of the call.  */
7951   tree result;
7952   /* The hash of this call; we remember it here to avoid having to
7953      recalculate it when expanding the hash table.  */
7954   hashval_t hash;
7955 } constexpr_call;
7956
7957 /* A table of all constexpr calls that have been evaluated by the
7958    compiler in this translation unit.  */
7959
7960 static GTY ((param_is (constexpr_call))) htab_t constexpr_call_table;
7961
7962 static tree cxx_eval_constant_expression (const constexpr_call *, tree,
7963                                           bool, bool, bool *, bool *);
7964
7965 /* Compute a hash value for a constexpr call representation.  */
7966
7967 static hashval_t
7968 constexpr_call_hash (const void *p)
7969 {
7970   const constexpr_call *info = (const constexpr_call *) p;
7971   return info->hash;
7972 }
7973
7974 /* Return 1 if the objects pointed to by P and Q represent calls
7975    to the same constexpr function with the same arguments.
7976    Otherwise, return 0.  */
7977
7978 static int
7979 constexpr_call_equal (const void *p, const void *q)
7980 {
7981   const constexpr_call *lhs = (const constexpr_call *) p;
7982   const constexpr_call *rhs = (const constexpr_call *) q;
7983   tree lhs_bindings;
7984   tree rhs_bindings;
7985   if (lhs == rhs)
7986     return 1;
7987   if (!constexpr_fundef_equal (lhs->fundef, rhs->fundef))
7988     return 0;
7989   lhs_bindings = lhs->bindings;
7990   rhs_bindings = rhs->bindings;
7991   while (lhs_bindings != NULL && rhs_bindings != NULL)
7992     {
7993       tree lhs_arg = TREE_VALUE (lhs_bindings);
7994       tree rhs_arg = TREE_VALUE (rhs_bindings);
7995       gcc_assert (TREE_TYPE (lhs_arg) == TREE_TYPE (rhs_arg));
7996       if (!cp_tree_equal (lhs_arg, rhs_arg))
7997         return 0;
7998       lhs_bindings = TREE_CHAIN (lhs_bindings);
7999       rhs_bindings = TREE_CHAIN (rhs_bindings);
8000     }
8001   return lhs_bindings == rhs_bindings;
8002 }
8003
8004 /* Initialize the constexpr call table, if needed.  */
8005
8006 static void
8007 maybe_initialize_constexpr_call_table (void)
8008 {
8009   if (constexpr_call_table == NULL)
8010     constexpr_call_table = htab_create_ggc (101,
8011                                             constexpr_call_hash,
8012                                             constexpr_call_equal,
8013                                             ggc_free);
8014 }
8015
8016 /* Return true if T designates the implied `this' parameter.  */
8017
8018 static inline bool
8019 is_this_parameter (tree t)
8020 {
8021   return t == current_class_ptr;
8022 }
8023
8024 /* We have an expression tree T that represents a call, either CALL_EXPR
8025    or AGGR_INIT_EXPR.  If the call is lexically to a named function,
8026    retrun the _DECL for that function.  */
8027
8028 static tree
8029 get_function_named_in_call (tree t)
8030 {
8031   tree fun = NULL;
8032   switch (TREE_CODE (t))
8033     {
8034     case CALL_EXPR:
8035       fun = CALL_EXPR_FN (t);
8036       break;
8037
8038     case AGGR_INIT_EXPR:
8039       fun = AGGR_INIT_EXPR_FN (t);
8040       break;
8041
8042     default:
8043       gcc_unreachable();
8044       break;
8045     }
8046   if (TREE_CODE (fun) == ADDR_EXPR
8047       && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL)
8048     fun = TREE_OPERAND (fun, 0);
8049   return fun;
8050 }
8051
8052 /* We have an expression tree T that represents a call, either CALL_EXPR
8053    or AGGR_INIT_EXPR.  Return the Nth argument.  */
8054
8055 static inline tree
8056 get_nth_callarg (tree t, int n)
8057 {
8058   switch (TREE_CODE (t))
8059     {
8060     case CALL_EXPR:
8061       return CALL_EXPR_ARG (t, n);
8062
8063     case AGGR_INIT_EXPR:
8064       return AGGR_INIT_EXPR_ARG (t, n);
8065
8066     default:
8067       gcc_unreachable ();
8068       return NULL;
8069     }
8070 }
8071
8072 /* Look up the binding of the function parameter T in a constexpr
8073    function call context CALL.  */
8074
8075 static tree
8076 lookup_parameter_binding (const constexpr_call *call, tree t)
8077 {
8078   tree b = purpose_member (t, call->bindings);
8079   return TREE_VALUE (b);
8080 }
8081
8082 /* Attempt to evaluate T which represents a call to a builtin function.
8083    We assume here that all builtin functions evaluate to scalar types
8084    represented by _CST nodes.  */
8085
8086 static tree
8087 cxx_eval_builtin_function_call (const constexpr_call *call, tree t,
8088                                 bool allow_non_constant, bool addr,
8089                                 bool *non_constant_p, bool *overflow_p)
8090 {
8091   const int nargs = call_expr_nargs (t);
8092   tree *args = (tree *) alloca (nargs * sizeof (tree));
8093   tree new_call;
8094   int i;
8095   for (i = 0; i < nargs; ++i)
8096     {
8097       args[i] = cxx_eval_constant_expression (call, CALL_EXPR_ARG (t, i),
8098                                               allow_non_constant, addr,
8099                                               non_constant_p, overflow_p);
8100       if (allow_non_constant && *non_constant_p)
8101         return t;
8102     }
8103   if (*non_constant_p)
8104     return t;
8105   new_call = build_call_array_loc (EXPR_LOCATION (t), TREE_TYPE (t),
8106                                    CALL_EXPR_FN (t), nargs, args);
8107   new_call = fold (new_call);
8108   VERIFY_CONSTANT (new_call);
8109   return new_call;
8110 }
8111
8112 /* TEMP is the constant value of a temporary object of type TYPE.  Adjust
8113    the type of the value to match.  */
8114
8115 static tree
8116 adjust_temp_type (tree type, tree temp)
8117 {
8118   if (TREE_TYPE (temp) == type)
8119     return temp;
8120   /* Avoid wrapping an aggregate value in a NOP_EXPR.  */
8121   if (TREE_CODE (temp) == CONSTRUCTOR)
8122     return build_constructor (type, CONSTRUCTOR_ELTS (temp));
8123   gcc_assert (scalarish_type_p (type));
8124   return cp_fold_convert (type, temp);
8125 }
8126
8127 /* Subroutine of cxx_eval_call_expression.
8128    We are processing a call expression (either CALL_EXPR or
8129    AGGR_INIT_EXPR) in the call context of OLD_CALL.  Evaluate
8130    all arguments and bind their values to correspondings
8131    parameters, making up the NEW_CALL context.  */
8132
8133 static void
8134 cxx_bind_parameters_in_call (const constexpr_call *old_call, tree t,
8135                              constexpr_call *new_call,
8136                              bool allow_non_constant,
8137                              bool *non_constant_p, bool *overflow_p)
8138 {
8139   const int nargs = call_expr_nargs (t);
8140   tree fun = new_call->fundef->decl;
8141   tree parms = DECL_ARGUMENTS (fun);
8142   int i;
8143   for (i = 0; i < nargs; ++i)
8144     {
8145       tree x, arg;
8146       tree type = parms ? TREE_TYPE (parms) : void_type_node;
8147       /* For member function, the first argument is a pointer to the implied
8148          object.  And for an object construction, don't bind `this' before
8149          it is fully constructed.  */
8150       if (i == 0 && DECL_CONSTRUCTOR_P (fun))
8151         goto next;
8152       x = get_nth_callarg (t, i);
8153       if (parms && DECL_BY_REFERENCE (parms))
8154         {
8155           /* cp_genericize made this a reference for argument passing, but
8156              we don't want to treat it like one for constexpr evaluation.  */
8157           gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
8158           gcc_assert (TREE_CODE (TREE_TYPE (x)) == REFERENCE_TYPE);
8159           type = TREE_TYPE (type);
8160           x = convert_from_reference (x);
8161         }
8162       arg = cxx_eval_constant_expression (old_call, x, allow_non_constant,
8163                                           TREE_CODE (type) == REFERENCE_TYPE,
8164                                           non_constant_p, overflow_p);
8165       /* Don't VERIFY_CONSTANT here.  */
8166       if (*non_constant_p && allow_non_constant)
8167         return;
8168       /* Just discard ellipsis args after checking their constantitude.  */
8169       if (!parms)
8170         continue;
8171       if (*non_constant_p)
8172         /* Don't try to adjust the type of non-constant args.  */
8173         goto next;
8174
8175       /* Make sure the binding has the same type as the parm.  */
8176       if (TREE_CODE (type) != REFERENCE_TYPE)
8177         arg = adjust_temp_type (type, arg);
8178       new_call->bindings = tree_cons (parms, arg, new_call->bindings);
8179     next:
8180       parms = TREE_CHAIN (parms);
8181     }
8182 }
8183
8184 /* Variables and functions to manage constexpr call expansion context.
8185    These do not need to be marked for PCH or GC.  */
8186
8187 /* FIXME remember and print actual constant arguments.  */
8188 static vec<tree> call_stack = vNULL;
8189 static int call_stack_tick;
8190 static int last_cx_error_tick;
8191
8192 static bool
8193 push_cx_call_context (tree call)
8194 {
8195   ++call_stack_tick;
8196   if (!EXPR_HAS_LOCATION (call))
8197     SET_EXPR_LOCATION (call, input_location);
8198   call_stack.safe_push (call);
8199   if (call_stack.length () > (unsigned) max_constexpr_depth)
8200     return false;
8201   return true;
8202 }
8203
8204 static void
8205 pop_cx_call_context (void)
8206 {
8207   ++call_stack_tick;
8208   call_stack.pop ();
8209 }
8210
8211 vec<tree> 
8212 cx_error_context (void)
8213 {
8214   vec<tree> r = vNULL;
8215   if (call_stack_tick != last_cx_error_tick
8216       && !call_stack.is_empty ())
8217     r = call_stack;
8218   last_cx_error_tick = call_stack_tick;
8219   return r;
8220 }
8221
8222 /* Subroutine of cxx_eval_constant_expression.
8223    Evaluate the call expression tree T in the context of OLD_CALL expression
8224    evaluation.  */
8225
8226 static tree
8227 cxx_eval_call_expression (const constexpr_call *old_call, tree t,
8228                           bool allow_non_constant, bool addr,
8229                           bool *non_constant_p, bool *overflow_p)
8230 {
8231   location_t loc = EXPR_LOC_OR_HERE (t);
8232   tree fun = get_function_named_in_call (t);
8233   tree result;
8234   constexpr_call new_call = { NULL, NULL, NULL, 0 };
8235   constexpr_call **slot;
8236   constexpr_call *entry;
8237   bool depth_ok;
8238
8239   if (TREE_CODE (fun) != FUNCTION_DECL)
8240     {
8241       /* Might be a constexpr function pointer.  */
8242       fun = cxx_eval_constant_expression (old_call, fun, allow_non_constant,
8243                                           /*addr*/false, non_constant_p, overflow_p);
8244       if (TREE_CODE (fun) == ADDR_EXPR)
8245         fun = TREE_OPERAND (fun, 0);
8246     }
8247   if (TREE_CODE (fun) != FUNCTION_DECL)
8248     {
8249       if (!allow_non_constant && !*non_constant_p)
8250         error_at (loc, "expression %qE does not designate a constexpr "
8251                   "function", fun);
8252       *non_constant_p = true;
8253       return t;
8254     }
8255   if (DECL_CLONED_FUNCTION_P (fun))
8256     fun = DECL_CLONED_FUNCTION (fun);
8257   if (is_builtin_fn (fun))
8258     return cxx_eval_builtin_function_call (old_call, t, allow_non_constant,
8259                                            addr, non_constant_p, overflow_p);
8260   if (!DECL_DECLARED_CONSTEXPR_P (fun))
8261     {
8262       if (!allow_non_constant)
8263         {
8264           error_at (loc, "call to non-constexpr function %qD", fun);
8265           explain_invalid_constexpr_fn (fun);
8266         }
8267       *non_constant_p = true;
8268       return t;
8269     }
8270
8271   /* Shortcut trivial copy constructor/op=.  */
8272   if (call_expr_nargs (t) == 2 && trivial_fn_p (fun))
8273     {
8274       tree arg = convert_from_reference (get_nth_callarg (t, 1));
8275       return cxx_eval_constant_expression (old_call, arg, allow_non_constant,
8276                                            addr, non_constant_p, overflow_p);
8277     }
8278
8279   /* If in direct recursive call, optimize definition search.  */
8280   if (old_call != NULL && old_call->fundef->decl == fun)
8281     new_call.fundef = old_call->fundef;
8282   else
8283     {
8284       new_call.fundef = retrieve_constexpr_fundef (fun);
8285       if (new_call.fundef == NULL || new_call.fundef->body == NULL)
8286         {
8287           if (!allow_non_constant)
8288             {
8289               if (DECL_INITIAL (fun))
8290                 {
8291                   /* The definition of fun was somehow unsuitable.  */
8292                   error_at (loc, "%qD called in a constant expression", fun);
8293                   explain_invalid_constexpr_fn (fun);
8294                 }
8295               else
8296                 error_at (loc, "%qD used before its definition", fun);
8297             }
8298           *non_constant_p = true;
8299           return t;
8300         }
8301     }
8302   cxx_bind_parameters_in_call (old_call, t, &new_call,
8303                                allow_non_constant, non_constant_p, overflow_p);
8304   if (*non_constant_p)
8305     return t;
8306
8307   depth_ok = push_cx_call_context (t);
8308
8309   new_call.hash
8310     = iterative_hash_template_arg (new_call.bindings,
8311                                    constexpr_fundef_hash (new_call.fundef));
8312
8313   /* If we have seen this call before, we are done.  */
8314   maybe_initialize_constexpr_call_table ();
8315   slot = (constexpr_call **)
8316     htab_find_slot (constexpr_call_table, &new_call, INSERT);
8317   entry = *slot;
8318   if (entry == NULL)
8319     {
8320       /* We need to keep a pointer to the entry, not just the slot, as the
8321          slot can move in the call to cxx_eval_builtin_function_call.  */
8322       *slot = entry = ggc_alloc_constexpr_call ();
8323       *entry = new_call;
8324     }
8325   /* Calls which are in progress have their result set to NULL
8326      so that we can detect circular dependencies.  */
8327   else if (entry->result == NULL)
8328     {
8329       if (!allow_non_constant)
8330         error ("call has circular dependency");
8331       *non_constant_p = true;
8332       entry->result = result = error_mark_node;
8333     }
8334
8335   if (!depth_ok)
8336     {
8337       if (!allow_non_constant)
8338         error ("constexpr evaluation depth exceeds maximum of %d (use "
8339                "-fconstexpr-depth= to increase the maximum)",
8340                max_constexpr_depth);
8341       *non_constant_p = true;
8342       entry->result = result = error_mark_node;
8343     }
8344   else
8345     {
8346       result = entry->result;
8347       if (!result || result == error_mark_node)
8348         result = (cxx_eval_constant_expression
8349                   (&new_call, new_call.fundef->body,
8350                    allow_non_constant, addr,
8351                    non_constant_p, overflow_p));
8352       if (result == error_mark_node)
8353         *non_constant_p = true;
8354       if (*non_constant_p)
8355         entry->result = result = error_mark_node;
8356       else
8357         {
8358           /* If this was a call to initialize an object, set the type of
8359              the CONSTRUCTOR to the type of that object.  */
8360           if (DECL_CONSTRUCTOR_P (fun))
8361             {
8362               tree ob_arg = get_nth_callarg (t, 0);
8363               STRIP_NOPS (ob_arg);
8364               gcc_assert (TYPE_PTR_P (TREE_TYPE (ob_arg))
8365                           && CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (ob_arg))));
8366               result = adjust_temp_type (TREE_TYPE (TREE_TYPE (ob_arg)),
8367                                          result);
8368             }
8369           entry->result = result;
8370         }
8371     }
8372
8373   pop_cx_call_context ();
8374   return unshare_expr (result);
8375 }
8376
8377 /* FIXME speed this up, it's taking 16% of compile time on sieve testcase.  */
8378
8379 bool
8380 reduced_constant_expression_p (tree t)
8381 {
8382   if (TREE_CODE (t) == PTRMEM_CST)
8383     /* Even if we can't lower this yet, it's constant.  */
8384     return true;
8385   /* FIXME are we calling this too much?  */
8386   return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
8387 }
8388
8389 /* Some expressions may have constant operands but are not constant
8390    themselves, such as 1/0.  Call this function (or rather, the macro
8391    following it) to check for that condition.
8392
8393    We only call this in places that require an arithmetic constant, not in
8394    places where we might have a non-constant expression that can be a
8395    component of a constant expression, such as the address of a constexpr
8396    variable that might be dereferenced later.  */
8397
8398 static bool
8399 verify_constant (tree t, bool allow_non_constant, bool *non_constant_p,
8400                  bool *overflow_p)
8401 {
8402   if (!*non_constant_p && !reduced_constant_expression_p (t))
8403     {
8404       if (!allow_non_constant)
8405         error ("%q+E is not a constant expression", t);
8406       *non_constant_p = true;
8407     }
8408   if (TREE_OVERFLOW_P (t))
8409     {
8410       if (!allow_non_constant)
8411         {
8412           permerror (input_location, "overflow in constant expression");
8413           /* If we're being permissive (and are in an enforcing
8414              context), ignore the overflow.  */
8415           if (flag_permissive)
8416             return *non_constant_p;
8417         }
8418       *overflow_p = true;
8419     }
8420   return *non_constant_p;
8421 }
8422
8423 /* Subroutine of cxx_eval_constant_expression.
8424    Attempt to reduce the unary expression tree T to a compile time value.
8425    If successful, return the value.  Otherwise issue a diagnostic
8426    and return error_mark_node.  */
8427
8428 static tree
8429 cxx_eval_unary_expression (const constexpr_call *call, tree t,
8430                            bool allow_non_constant, bool addr,
8431                            bool *non_constant_p, bool *overflow_p)
8432 {
8433   tree r;
8434   tree orig_arg = TREE_OPERAND (t, 0);
8435   tree arg = cxx_eval_constant_expression (call, orig_arg, allow_non_constant,
8436                                            addr, non_constant_p, overflow_p);
8437   VERIFY_CONSTANT (arg);
8438   if (arg == orig_arg)
8439     return t;
8440   r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), arg);
8441   VERIFY_CONSTANT (r);
8442   return r;
8443 }
8444
8445 /* Subroutine of cxx_eval_constant_expression.
8446    Like cxx_eval_unary_expression, except for binary expressions.  */
8447
8448 static tree
8449 cxx_eval_binary_expression (const constexpr_call *call, tree t,
8450                             bool allow_non_constant, bool addr,
8451                             bool *non_constant_p, bool *overflow_p)
8452 {
8453   tree r;
8454   tree orig_lhs = TREE_OPERAND (t, 0);
8455   tree orig_rhs = TREE_OPERAND (t, 1);
8456   tree lhs, rhs;
8457   lhs = cxx_eval_constant_expression (call, orig_lhs,
8458                                       allow_non_constant, addr,
8459                                       non_constant_p, overflow_p);
8460   VERIFY_CONSTANT (lhs);
8461   rhs = cxx_eval_constant_expression (call, orig_rhs,
8462                                       allow_non_constant, addr,
8463                                       non_constant_p, overflow_p);
8464   VERIFY_CONSTANT (rhs);
8465   if (lhs == orig_lhs && rhs == orig_rhs)
8466     return t;
8467   r = fold_build2 (TREE_CODE (t), TREE_TYPE (t), lhs, rhs);
8468   VERIFY_CONSTANT (r);
8469   return r;
8470 }
8471
8472 /* Subroutine of cxx_eval_constant_expression.
8473    Attempt to evaluate condition expressions.  Dead branches are not
8474    looked into.  */
8475
8476 static tree
8477 cxx_eval_conditional_expression (const constexpr_call *call, tree t,
8478                                  bool allow_non_constant, bool addr,
8479                                  bool *non_constant_p, bool *overflow_p)
8480 {
8481   tree val = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
8482                                            allow_non_constant, addr,
8483                                            non_constant_p, overflow_p);
8484   VERIFY_CONSTANT (val);
8485   /* Don't VERIFY_CONSTANT the other operands.  */
8486   if (integer_zerop (val))
8487     return cxx_eval_constant_expression (call, TREE_OPERAND (t, 2),
8488                                          allow_non_constant, addr,
8489                                          non_constant_p, overflow_p);
8490   return cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
8491                                        allow_non_constant, addr,
8492                                        non_constant_p, overflow_p);
8493 }
8494
8495 /* Subroutine of cxx_eval_constant_expression.
8496    Attempt to reduce a reference to an array slot.  */
8497
8498 static tree
8499 cxx_eval_array_reference (const constexpr_call *call, tree t,
8500                           bool allow_non_constant, bool addr,
8501                           bool *non_constant_p, bool *overflow_p)
8502 {
8503   tree oldary = TREE_OPERAND (t, 0);
8504   tree ary = cxx_eval_constant_expression (call, oldary,
8505                                            allow_non_constant, addr,
8506                                            non_constant_p, overflow_p);
8507   tree index, oldidx;
8508   HOST_WIDE_INT i;
8509   tree elem_type;
8510   unsigned len, elem_nchars = 1;
8511   if (*non_constant_p)
8512     return t;
8513   oldidx = TREE_OPERAND (t, 1);
8514   index = cxx_eval_constant_expression (call, oldidx,
8515                                         allow_non_constant, false,
8516                                         non_constant_p, overflow_p);
8517   VERIFY_CONSTANT (index);
8518   if (addr && ary == oldary && index == oldidx)
8519     return t;
8520   else if (addr)
8521     return build4 (ARRAY_REF, TREE_TYPE (t), ary, index, NULL, NULL);
8522   elem_type = TREE_TYPE (TREE_TYPE (ary));
8523   if (TREE_CODE (ary) == CONSTRUCTOR)
8524     len = CONSTRUCTOR_NELTS (ary);
8525   else if (TREE_CODE (ary) == STRING_CST)
8526     {
8527       elem_nchars = (TYPE_PRECISION (elem_type)
8528                      / TYPE_PRECISION (char_type_node));
8529       len = (unsigned) TREE_STRING_LENGTH (ary) / elem_nchars;
8530     }
8531   else
8532     {
8533       /* We can't do anything with other tree codes, so use
8534          VERIFY_CONSTANT to complain and fail.  */
8535       VERIFY_CONSTANT (ary);
8536       gcc_unreachable ();
8537     }
8538   if (compare_tree_int (index, len) >= 0)
8539     {
8540       if (tree_int_cst_lt (index, array_type_nelts_top (TREE_TYPE (ary))))
8541         {
8542           /* If it's within the array bounds but doesn't have an explicit
8543              initializer, it's value-initialized.  */
8544           tree val = build_value_init (elem_type, tf_warning_or_error);
8545           return cxx_eval_constant_expression (call, val,
8546                                                allow_non_constant, addr,
8547                                                non_constant_p, overflow_p);
8548         }
8549
8550       if (!allow_non_constant)
8551         error ("array subscript out of bound");
8552       *non_constant_p = true;
8553       return t;
8554     }
8555   else if (tree_int_cst_lt (index, integer_zero_node))
8556     {
8557       if (!allow_non_constant)
8558         error ("negative array subscript");
8559       *non_constant_p = true;
8560       return t;
8561     }
8562   i = tree_low_cst (index, 0);
8563   if (TREE_CODE (ary) == CONSTRUCTOR)
8564     return (*CONSTRUCTOR_ELTS (ary))[i].value;
8565   else if (elem_nchars == 1)
8566     return build_int_cst (cv_unqualified (TREE_TYPE (TREE_TYPE (ary))),
8567                           TREE_STRING_POINTER (ary)[i]);
8568   else
8569     {
8570       tree type = cv_unqualified (TREE_TYPE (TREE_TYPE (ary)));
8571       return native_interpret_expr (type, (const unsigned char *)
8572                                           TREE_STRING_POINTER (ary)
8573                                           + i * elem_nchars, elem_nchars);
8574     }
8575   /* Don't VERIFY_CONSTANT here.  */
8576 }
8577
8578 /* Subroutine of cxx_eval_constant_expression.
8579    Attempt to reduce a field access of a value of class type.  */
8580
8581 static tree
8582 cxx_eval_component_reference (const constexpr_call *call, tree t,
8583                               bool allow_non_constant, bool addr,
8584                               bool *non_constant_p, bool *overflow_p)
8585 {
8586   unsigned HOST_WIDE_INT i;
8587   tree field;
8588   tree value;
8589   tree part = TREE_OPERAND (t, 1);
8590   tree orig_whole = TREE_OPERAND (t, 0);
8591   tree whole = cxx_eval_constant_expression (call, orig_whole,
8592                                              allow_non_constant, addr,
8593                                              non_constant_p, overflow_p);
8594   if (whole == orig_whole)
8595     return t;
8596   if (addr)
8597     return fold_build3 (COMPONENT_REF, TREE_TYPE (t),
8598                         whole, part, NULL_TREE);
8599   /* Don't VERIFY_CONSTANT here; we only want to check that we got a
8600      CONSTRUCTOR.  */
8601   if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
8602     {
8603       if (!allow_non_constant)
8604         error ("%qE is not a constant expression", orig_whole);
8605       *non_constant_p = true;
8606     }
8607   if (DECL_MUTABLE_P (part))
8608     {
8609       if (!allow_non_constant)
8610         error ("mutable %qD is not usable in a constant expression", part);
8611       *non_constant_p = true;
8612     }
8613   if (*non_constant_p)
8614     return t;
8615   FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
8616     {
8617       if (field == part)
8618         return value;
8619     }
8620   if (TREE_CODE (TREE_TYPE (whole)) == UNION_TYPE
8621       && CONSTRUCTOR_NELTS (whole) > 0)
8622     {
8623       /* DR 1188 says we don't have to deal with this.  */
8624       if (!allow_non_constant)
8625         error ("accessing %qD member instead of initialized %qD member in "
8626                "constant expression", part, CONSTRUCTOR_ELT (whole, 0)->index);
8627       *non_constant_p = true;
8628       return t;
8629     }
8630
8631   /* If there's no explicit init for this field, it's value-initialized.  */
8632   value = build_value_init (TREE_TYPE (t), tf_warning_or_error);
8633   return cxx_eval_constant_expression (call, value,
8634                                        allow_non_constant, addr,
8635                                        non_constant_p, overflow_p);
8636 }
8637
8638 /* Subroutine of cxx_eval_constant_expression.
8639    Attempt to reduce a field access of a value of class type that is
8640    expressed as a BIT_FIELD_REF.  */
8641
8642 static tree
8643 cxx_eval_bit_field_ref (const constexpr_call *call, tree t,
8644                         bool allow_non_constant, bool addr,
8645                         bool *non_constant_p, bool *overflow_p)
8646 {
8647   tree orig_whole = TREE_OPERAND (t, 0);
8648   tree retval, fldval, utype, mask;
8649   bool fld_seen = false;
8650   HOST_WIDE_INT istart, isize;
8651   tree whole = cxx_eval_constant_expression (call, orig_whole,
8652                                              allow_non_constant, addr,
8653                                              non_constant_p, overflow_p);
8654   tree start, field, value;
8655   unsigned HOST_WIDE_INT i;
8656
8657   if (whole == orig_whole)
8658     return t;
8659   /* Don't VERIFY_CONSTANT here; we only want to check that we got a
8660      CONSTRUCTOR.  */
8661   if (!*non_constant_p
8662       && TREE_CODE (whole) != VECTOR_CST
8663       && TREE_CODE (whole) != CONSTRUCTOR)
8664     {
8665       if (!allow_non_constant)
8666         error ("%qE is not a constant expression", orig_whole);
8667       *non_constant_p = true;
8668     }
8669   if (*non_constant_p)
8670     return t;
8671
8672   if (TREE_CODE (whole) == VECTOR_CST)
8673     return fold_ternary (BIT_FIELD_REF, TREE_TYPE (t), whole,
8674                          TREE_OPERAND (t, 1), TREE_OPERAND (t, 2));
8675
8676   start = TREE_OPERAND (t, 2);
8677   istart = tree_low_cst (start, 0);
8678   isize = tree_low_cst (TREE_OPERAND (t, 1), 0);
8679   utype = TREE_TYPE (t);
8680   if (!TYPE_UNSIGNED (utype))
8681     utype = build_nonstandard_integer_type (TYPE_PRECISION (utype), 1);
8682   retval = build_int_cst (utype, 0);
8683   FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
8684     {
8685       tree bitpos = bit_position (field);
8686       if (bitpos == start && DECL_SIZE (field) == TREE_OPERAND (t, 1))
8687         return value;
8688       if (TREE_CODE (TREE_TYPE (field)) == INTEGER_TYPE
8689           && TREE_CODE (value) == INTEGER_CST
8690           && host_integerp (bitpos, 0)
8691           && host_integerp (DECL_SIZE (field), 0))
8692         {
8693           HOST_WIDE_INT bit = tree_low_cst (bitpos, 0);
8694           HOST_WIDE_INT sz = tree_low_cst (DECL_SIZE (field), 0);
8695           HOST_WIDE_INT shift;
8696           if (bit >= istart && bit + sz <= istart + isize)
8697             {
8698               fldval = fold_convert (utype, value);
8699               mask = build_int_cst_type (utype, -1);
8700               mask = fold_build2 (LSHIFT_EXPR, utype, mask,
8701                                   size_int (TYPE_PRECISION (utype) - sz));
8702               mask = fold_build2 (RSHIFT_EXPR, utype, mask,
8703                                   size_int (TYPE_PRECISION (utype) - sz));
8704               fldval = fold_build2 (BIT_AND_EXPR, utype, fldval, mask);
8705               shift = bit - istart;
8706               if (BYTES_BIG_ENDIAN)
8707                 shift = TYPE_PRECISION (utype) - shift - sz;
8708               fldval = fold_build2 (LSHIFT_EXPR, utype, fldval,
8709                                     size_int (shift));
8710               retval = fold_build2 (BIT_IOR_EXPR, utype, retval, fldval);
8711               fld_seen = true;
8712             }
8713         }
8714     }
8715   if (fld_seen)
8716     return fold_convert (TREE_TYPE (t), retval);
8717   gcc_unreachable ();
8718   return error_mark_node;
8719 }
8720
8721 /* Subroutine of cxx_eval_constant_expression.
8722    Evaluate a short-circuited logical expression T in the context
8723    of a given constexpr CALL.  BAILOUT_VALUE is the value for
8724    early return.  CONTINUE_VALUE is used here purely for
8725    sanity check purposes.  */
8726
8727 static tree
8728 cxx_eval_logical_expression (const constexpr_call *call, tree t,
8729                              tree bailout_value, tree continue_value,
8730                              bool allow_non_constant, bool addr,
8731                              bool *non_constant_p, bool *overflow_p)
8732 {
8733   tree r;
8734   tree lhs = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
8735                                            allow_non_constant, addr,
8736                                            non_constant_p, overflow_p);
8737   VERIFY_CONSTANT (lhs);
8738   if (tree_int_cst_equal (lhs, bailout_value))
8739     return lhs;
8740   gcc_assert (tree_int_cst_equal (lhs, continue_value));
8741   r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
8742                                     allow_non_constant, addr, non_constant_p, overflow_p);
8743   VERIFY_CONSTANT (r);
8744   return r;
8745 }
8746
8747 /* REF is a COMPONENT_REF designating a particular field.  V is a vector of
8748    CONSTRUCTOR elements to initialize (part of) an object containing that
8749    field.  Return a pointer to the constructor_elt corresponding to the
8750    initialization of the field.  */
8751
8752 static constructor_elt *
8753 base_field_constructor_elt (vec<constructor_elt, va_gc> *v, tree ref)
8754 {
8755   tree aggr = TREE_OPERAND (ref, 0);
8756   tree field = TREE_OPERAND (ref, 1);
8757   HOST_WIDE_INT i;
8758   constructor_elt *ce;
8759
8760   gcc_assert (TREE_CODE (ref) == COMPONENT_REF);
8761
8762   if (TREE_CODE (aggr) == COMPONENT_REF)
8763     {
8764       constructor_elt *base_ce
8765         = base_field_constructor_elt (v, aggr);
8766       v = CONSTRUCTOR_ELTS (base_ce->value);
8767     }
8768
8769   for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
8770     if (ce->index == field)
8771       return ce;
8772
8773   gcc_unreachable ();
8774   return NULL;
8775 }
8776
8777 /* Subroutine of cxx_eval_constant_expression.
8778    The expression tree T denotes a C-style array or a C-style
8779    aggregate.  Reduce it to a constant expression.  */
8780
8781 static tree
8782 cxx_eval_bare_aggregate (const constexpr_call *call, tree t,
8783                          bool allow_non_constant, bool addr,
8784                          bool *non_constant_p, bool *overflow_p)
8785 {
8786   vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
8787   vec<constructor_elt, va_gc> *n;
8788   vec_alloc (n, vec_safe_length (v));
8789   constructor_elt *ce;
8790   HOST_WIDE_INT i;
8791   bool changed = false;
8792   gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t));
8793   for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
8794     {
8795       tree elt = cxx_eval_constant_expression (call, ce->value,
8796                                                allow_non_constant, addr,
8797                                                non_constant_p, overflow_p);
8798       /* Don't VERIFY_CONSTANT here.  */
8799       if (allow_non_constant && *non_constant_p)
8800         goto fail;
8801       if (elt != ce->value)
8802         changed = true;
8803       if (ce->index && TREE_CODE (ce->index) == COMPONENT_REF)
8804         {
8805           /* This is an initialization of a vfield inside a base
8806              subaggregate that we already initialized; push this
8807              initialization into the previous initialization.  */
8808           constructor_elt *inner = base_field_constructor_elt (n, ce->index);
8809           inner->value = elt;
8810         }
8811       else if (ce->index && TREE_CODE (ce->index) == NOP_EXPR)
8812         {
8813           /* This is an initializer for an empty base; now that we've
8814              checked that it's constant, we can ignore it.  */
8815           gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (ce->index))));
8816         }
8817       else
8818         CONSTRUCTOR_APPEND_ELT (n, ce->index, elt);
8819     }
8820   if (*non_constant_p || !changed)
8821     {
8822     fail:
8823       vec_free (n);
8824       return t;
8825     }
8826   t = build_constructor (TREE_TYPE (t), n);
8827   TREE_CONSTANT (t) = true;
8828   if (TREE_CODE (TREE_TYPE (t)) == VECTOR_TYPE)
8829     t = fold (t);
8830   return t;
8831 }
8832
8833 /* Subroutine of cxx_eval_constant_expression.
8834    The expression tree T is a VEC_INIT_EXPR which denotes the desired
8835    initialization of a non-static data member of array type.  Reduce it to a
8836    CONSTRUCTOR.
8837
8838    Note that apart from value-initialization (when VALUE_INIT is true),
8839    this is only intended to support value-initialization and the
8840    initializations done by defaulted constructors for classes with
8841    non-static data members of array type.  In this case, VEC_INIT_EXPR_INIT
8842    will either be NULL_TREE for the default constructor, or a COMPONENT_REF
8843    for the copy/move constructor.  */
8844
8845 static tree
8846 cxx_eval_vec_init_1 (const constexpr_call *call, tree atype, tree init,
8847                      bool value_init, bool allow_non_constant, bool addr,
8848                      bool *non_constant_p, bool *overflow_p)
8849 {
8850   tree elttype = TREE_TYPE (atype);
8851   int max = tree_low_cst (array_type_nelts (atype), 0);
8852   vec<constructor_elt, va_gc> *n;
8853   vec_alloc (n, max + 1);
8854   bool pre_init = false;
8855   int i;
8856
8857   /* For the default constructor, build up a call to the default
8858      constructor of the element type.  We only need to handle class types
8859      here, as for a constructor to be constexpr, all members must be
8860      initialized, which for a defaulted default constructor means they must
8861      be of a class type with a constexpr default constructor.  */
8862   if (TREE_CODE (elttype) == ARRAY_TYPE)
8863     /* We only do this at the lowest level.  */;
8864   else if (value_init)
8865     {
8866       init = build_value_init (elttype, tf_warning_or_error);
8867       init = cxx_eval_constant_expression
8868             (call, init, allow_non_constant, addr, non_constant_p, overflow_p);
8869       pre_init = true;
8870     }
8871   else if (!init)
8872     {
8873       vec<tree, va_gc> *argvec = make_tree_vector ();
8874       init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
8875                                         &argvec, elttype, LOOKUP_NORMAL,
8876                                         tf_warning_or_error);
8877       release_tree_vector (argvec);
8878       init = cxx_eval_constant_expression (call, init, allow_non_constant,
8879                                            addr, non_constant_p, overflow_p);
8880       pre_init = true;
8881     }
8882
8883   if (*non_constant_p && !allow_non_constant)
8884     goto fail;
8885
8886   for (i = 0; i <= max; ++i)
8887     {
8888       tree idx = build_int_cst (size_type_node, i);
8889       tree eltinit;
8890       if (TREE_CODE (elttype) == ARRAY_TYPE)
8891         {
8892           /* A multidimensional array; recurse.  */
8893           if (value_init || init == NULL_TREE)
8894             eltinit = NULL_TREE;
8895           else
8896             eltinit = cp_build_array_ref (input_location, init, idx,
8897                                           tf_warning_or_error);
8898           eltinit = cxx_eval_vec_init_1 (call, elttype, eltinit, value_init,
8899                                          allow_non_constant, addr,
8900                                          non_constant_p, overflow_p);
8901         }
8902       else if (pre_init)
8903         {
8904           /* Initializing an element using value or default initialization
8905              we just pre-built above.  */
8906           if (i == 0)
8907             eltinit = init;
8908           else
8909             eltinit = unshare_expr (init);
8910         }
8911       else
8912         {
8913           /* Copying an element.  */
8914           vec<tree, va_gc> *argvec;
8915           gcc_assert (same_type_ignoring_top_level_qualifiers_p
8916                       (atype, TREE_TYPE (init)));
8917           eltinit = cp_build_array_ref (input_location, init, idx,
8918                                         tf_warning_or_error);
8919           if (!real_lvalue_p (init))
8920             eltinit = move (eltinit);
8921           argvec = make_tree_vector ();
8922           argvec->quick_push (eltinit);
8923           eltinit = (build_special_member_call
8924                      (NULL_TREE, complete_ctor_identifier, &argvec,
8925                       elttype, LOOKUP_NORMAL, tf_warning_or_error));
8926           release_tree_vector (argvec);
8927           eltinit = cxx_eval_constant_expression
8928             (call, eltinit, allow_non_constant, addr, non_constant_p, overflow_p);
8929         }
8930       if (*non_constant_p && !allow_non_constant)
8931         goto fail;
8932       CONSTRUCTOR_APPEND_ELT (n, idx, eltinit);
8933     }
8934
8935   if (!*non_constant_p)
8936     {
8937       init = build_constructor (atype, n);
8938       TREE_CONSTANT (init) = true;
8939       return init;
8940     }
8941
8942  fail:
8943   vec_free (n);
8944   return init;
8945 }
8946
8947 static tree
8948 cxx_eval_vec_init (const constexpr_call *call, tree t,
8949                    bool allow_non_constant, bool addr,
8950                    bool *non_constant_p, bool *overflow_p)
8951 {
8952   tree atype = TREE_TYPE (t);
8953   tree init = VEC_INIT_EXPR_INIT (t);
8954   tree r = cxx_eval_vec_init_1 (call, atype, init,
8955                                 VEC_INIT_EXPR_VALUE_INIT (t),
8956                                 allow_non_constant, addr, non_constant_p, overflow_p);
8957   if (*non_constant_p)
8958     return t;
8959   else
8960     return r;
8961 }
8962
8963 /* A less strict version of fold_indirect_ref_1, which requires cv-quals to
8964    match.  We want to be less strict for simple *& folding; if we have a
8965    non-const temporary that we access through a const pointer, that should
8966    work.  We handle this here rather than change fold_indirect_ref_1
8967    because we're dealing with things like ADDR_EXPR of INTEGER_CST which
8968    don't really make sense outside of constant expression evaluation.  Also
8969    we want to allow folding to COMPONENT_REF, which could cause trouble
8970    with TBAA in fold_indirect_ref_1.
8971
8972    Try to keep this function synced with fold_indirect_ref_1.  */
8973
8974 static tree
8975 cxx_fold_indirect_ref (location_t loc, tree type, tree op0, bool *empty_base)
8976 {
8977   tree sub, subtype;
8978
8979   sub = op0;
8980   STRIP_NOPS (sub);
8981   subtype = TREE_TYPE (sub);
8982   if (!POINTER_TYPE_P (subtype))
8983     return NULL_TREE;
8984
8985   if (TREE_CODE (sub) == ADDR_EXPR)
8986     {
8987       tree op = TREE_OPERAND (sub, 0);
8988       tree optype = TREE_TYPE (op);
8989
8990       /* *&CONST_DECL -> to the value of the const decl.  */
8991       if (TREE_CODE (op) == CONST_DECL)
8992         return DECL_INITIAL (op);
8993       /* *&p => p;  make sure to handle *&"str"[cst] here.  */
8994       if (same_type_ignoring_top_level_qualifiers_p (optype, type))
8995         {
8996           tree fop = fold_read_from_constant_string (op);
8997           if (fop)
8998             return fop;
8999           else
9000             return op;
9001         }
9002       /* *(foo *)&fooarray => fooarray[0] */
9003       else if (TREE_CODE (optype) == ARRAY_TYPE
9004                && (same_type_ignoring_top_level_qualifiers_p
9005                    (type, TREE_TYPE (optype))))
9006         {
9007           tree type_domain = TYPE_DOMAIN (optype);
9008           tree min_val = size_zero_node;
9009           if (type_domain && TYPE_MIN_VALUE (type_domain))
9010             min_val = TYPE_MIN_VALUE (type_domain);
9011           return build4_loc (loc, ARRAY_REF, type, op, min_val,
9012                              NULL_TREE, NULL_TREE);
9013         }
9014       /* *(foo *)&complexfoo => __real__ complexfoo */
9015       else if (TREE_CODE (optype) == COMPLEX_TYPE
9016                && (same_type_ignoring_top_level_qualifiers_p
9017                    (type, TREE_TYPE (optype))))
9018         return fold_build1_loc (loc, REALPART_EXPR, type, op);
9019       /* *(foo *)&vectorfoo => BIT_FIELD_REF<vectorfoo,...> */
9020       else if (TREE_CODE (optype) == VECTOR_TYPE
9021                && (same_type_ignoring_top_level_qualifiers_p
9022                    (type, TREE_TYPE (optype))))
9023         {
9024           tree part_width = TYPE_SIZE (type);
9025           tree index = bitsize_int (0);
9026           return fold_build3_loc (loc, BIT_FIELD_REF, type, op, part_width, index);
9027         }
9028       /* Also handle conversion to an empty base class, which
9029          is represented with a NOP_EXPR.  */
9030       else if (is_empty_class (type)
9031                && CLASS_TYPE_P (optype)
9032                && DERIVED_FROM_P (type, optype))
9033         {
9034           *empty_base = true;
9035           return op;
9036         }
9037       /* *(foo *)&struct_with_foo_field => COMPONENT_REF */
9038       else if (RECORD_OR_UNION_TYPE_P (optype))
9039         {
9040           tree field = TYPE_FIELDS (optype);
9041           for (; field; field = DECL_CHAIN (field))
9042             if (TREE_CODE (field) == FIELD_DECL
9043                 && integer_zerop (byte_position (field))
9044                 && (same_type_ignoring_top_level_qualifiers_p
9045                     (TREE_TYPE (field), type)))
9046               {
9047                 return fold_build3 (COMPONENT_REF, type, op, field, NULL_TREE);
9048                 break;
9049               }
9050         }
9051     }
9052   else if (TREE_CODE (sub) == POINTER_PLUS_EXPR
9053            && TREE_CODE (TREE_OPERAND (sub, 1)) == INTEGER_CST)
9054     {
9055       tree op00 = TREE_OPERAND (sub, 0);
9056       tree op01 = TREE_OPERAND (sub, 1);
9057
9058       STRIP_NOPS (op00);
9059       if (TREE_CODE (op00) == ADDR_EXPR)
9060         {
9061           tree op00type;
9062           op00 = TREE_OPERAND (op00, 0);
9063           op00type = TREE_TYPE (op00);
9064
9065           /* ((foo*)&vectorfoo)[1] => BIT_FIELD_REF<vectorfoo,...> */
9066           if (TREE_CODE (op00type) == VECTOR_TYPE
9067               && (same_type_ignoring_top_level_qualifiers_p
9068                   (type, TREE_TYPE (op00type))))
9069             {
9070               HOST_WIDE_INT offset = tree_low_cst (op01, 0);
9071               tree part_width = TYPE_SIZE (type);
9072               unsigned HOST_WIDE_INT part_widthi = tree_low_cst (part_width, 0)/BITS_PER_UNIT;
9073               unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
9074               tree index = bitsize_int (indexi);
9075
9076               if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
9077                 return fold_build3_loc (loc,
9078                                         BIT_FIELD_REF, type, op00,
9079                                         part_width, index);
9080
9081             }
9082           /* ((foo*)&complexfoo)[1] => __imag__ complexfoo */
9083           else if (TREE_CODE (op00type) == COMPLEX_TYPE
9084                    && (same_type_ignoring_top_level_qualifiers_p
9085                        (type, TREE_TYPE (op00type))))
9086             {
9087               tree size = TYPE_SIZE_UNIT (type);
9088               if (tree_int_cst_equal (size, op01))
9089                 return fold_build1_loc (loc, IMAGPART_EXPR, type, op00);
9090             }
9091           /* ((foo *)&fooarray)[1] => fooarray[1] */
9092           else if (TREE_CODE (op00type) == ARRAY_TYPE
9093                    && (same_type_ignoring_top_level_qualifiers_p
9094                        (type, TREE_TYPE (op00type))))
9095             {
9096               tree type_domain = TYPE_DOMAIN (op00type);
9097               tree min_val = size_zero_node;
9098               if (type_domain && TYPE_MIN_VALUE (type_domain))
9099                 min_val = TYPE_MIN_VALUE (type_domain);
9100               op01 = size_binop_loc (loc, EXACT_DIV_EXPR, op01,
9101                                      TYPE_SIZE_UNIT (type));
9102               op01 = size_binop_loc (loc, PLUS_EXPR, op01, min_val);
9103               return build4_loc (loc, ARRAY_REF, type, op00, op01,
9104                                  NULL_TREE, NULL_TREE);
9105             }
9106           /* Also handle conversion to an empty base class, which
9107              is represented with a NOP_EXPR.  */
9108           else if (is_empty_class (type)
9109                    && CLASS_TYPE_P (op00type)
9110                    && DERIVED_FROM_P (type, op00type))
9111             {
9112               *empty_base = true;
9113               return op00;
9114             }
9115           /* ((foo *)&struct_with_foo_field)[1] => COMPONENT_REF */
9116           else if (RECORD_OR_UNION_TYPE_P (op00type))
9117             {
9118               tree field = TYPE_FIELDS (op00type);
9119               for (; field; field = DECL_CHAIN (field))
9120                 if (TREE_CODE (field) == FIELD_DECL
9121                     && tree_int_cst_equal (byte_position (field), op01)
9122                     && (same_type_ignoring_top_level_qualifiers_p
9123                         (TREE_TYPE (field), type)))
9124                   {
9125                     return fold_build3 (COMPONENT_REF, type, op00,
9126                                      field, NULL_TREE);
9127                     break;
9128                   }
9129             }
9130         }
9131     }
9132   /* *(foo *)fooarrptr => (*fooarrptr)[0] */
9133   else if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
9134            && (same_type_ignoring_top_level_qualifiers_p
9135                (type, TREE_TYPE (TREE_TYPE (subtype)))))
9136     {
9137       tree type_domain;
9138       tree min_val = size_zero_node;
9139       tree newsub = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
9140       if (newsub)
9141         sub = newsub;
9142       else
9143         sub = build1_loc (loc, INDIRECT_REF, TREE_TYPE (subtype), sub);
9144       type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
9145       if (type_domain && TYPE_MIN_VALUE (type_domain))
9146         min_val = TYPE_MIN_VALUE (type_domain);
9147       return build4_loc (loc, ARRAY_REF, type, sub, min_val, NULL_TREE,
9148                          NULL_TREE);
9149     }
9150
9151   return NULL_TREE;
9152 }
9153
9154 static tree
9155 cxx_eval_indirect_ref (const constexpr_call *call, tree t,
9156                        bool allow_non_constant, bool addr,
9157                        bool *non_constant_p, bool *overflow_p)
9158 {
9159   tree orig_op0 = TREE_OPERAND (t, 0);
9160   tree op0 = cxx_eval_constant_expression (call, orig_op0, allow_non_constant,
9161                                            /*addr*/false, non_constant_p, overflow_p);
9162   bool empty_base = false;
9163   tree r;
9164
9165   /* Don't VERIFY_CONSTANT here.  */
9166   if (*non_constant_p)
9167     return t;
9168
9169   r = cxx_fold_indirect_ref (EXPR_LOCATION (t), TREE_TYPE (t), op0,
9170                              &empty_base);
9171
9172   if (r)
9173     r = cxx_eval_constant_expression (call, r, allow_non_constant,
9174                                       addr, non_constant_p, overflow_p);
9175   else
9176     {
9177       tree sub = op0;
9178       STRIP_NOPS (sub);
9179       if (TREE_CODE (sub) == ADDR_EXPR)
9180         {
9181           /* We couldn't fold to a constant value.  Make sure it's not
9182              something we should have been able to fold.  */
9183           gcc_assert (!same_type_ignoring_top_level_qualifiers_p
9184                       (TREE_TYPE (TREE_TYPE (sub)), TREE_TYPE (t)));
9185           /* DR 1188 says we don't have to deal with this.  */
9186           if (!allow_non_constant)
9187             error ("accessing value of %qE through a %qT glvalue in a "
9188                    "constant expression", build_fold_indirect_ref (sub),
9189                    TREE_TYPE (t));
9190           *non_constant_p = true;
9191           return t;
9192         }
9193     }
9194
9195   /* If we're pulling out the value of an empty base, make sure
9196      that the whole object is constant and then return an empty
9197      CONSTRUCTOR.  */
9198   if (empty_base)
9199     {
9200       VERIFY_CONSTANT (r);
9201       r = build_constructor (TREE_TYPE (t), NULL);
9202       TREE_CONSTANT (r) = true;
9203     }
9204
9205   if (r == NULL_TREE)
9206     {
9207       if (addr && op0 != orig_op0)
9208         return build1 (INDIRECT_REF, TREE_TYPE (t), op0);
9209       if (!addr)
9210         VERIFY_CONSTANT (t);
9211       return t;
9212     }
9213   return r;
9214 }
9215
9216 /* Complain about R, a VAR_DECL, not being usable in a constant expression.
9217    Shared between potential_constant_expression and
9218    cxx_eval_constant_expression.  */
9219
9220 static void
9221 non_const_var_error (tree r)
9222 {
9223   tree type = TREE_TYPE (r);
9224   error ("the value of %qD is not usable in a constant "
9225          "expression", r);
9226   /* Avoid error cascade.  */
9227   if (DECL_INITIAL (r) == error_mark_node)
9228     return;
9229   if (DECL_DECLARED_CONSTEXPR_P (r))
9230     inform (DECL_SOURCE_LOCATION (r),
9231             "%qD used in its own initializer", r);
9232   else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9233     {
9234       if (!CP_TYPE_CONST_P (type))
9235         inform (DECL_SOURCE_LOCATION (r),
9236                 "%q#D is not const", r);
9237       else if (CP_TYPE_VOLATILE_P (type))
9238         inform (DECL_SOURCE_LOCATION (r),
9239                 "%q#D is volatile", r);
9240       else if (!DECL_INITIAL (r)
9241                || !TREE_CONSTANT (DECL_INITIAL (r)))
9242         inform (DECL_SOURCE_LOCATION (r),
9243                 "%qD was not initialized with a constant "
9244                 "expression", r);
9245       else
9246         gcc_unreachable ();
9247     }
9248   else
9249     {
9250       if (cxx_dialect >= cxx11 && !DECL_DECLARED_CONSTEXPR_P (r))
9251         inform (DECL_SOURCE_LOCATION (r),
9252                 "%qD was not declared %<constexpr%>", r);
9253       else
9254         inform (DECL_SOURCE_LOCATION (r),
9255                 "%qD does not have integral or enumeration type",
9256                 r);
9257     }
9258 }
9259
9260 /* Subroutine of cxx_eval_constant_expression.
9261    Like cxx_eval_unary_expression, except for trinary expressions.  */
9262
9263 static tree
9264 cxx_eval_trinary_expression (const constexpr_call *call, tree t,
9265                              bool allow_non_constant, bool addr,
9266                              bool *non_constant_p, bool *overflow_p)
9267 {
9268   int i;
9269   tree args[3];
9270   tree val;
9271
9272   for (i = 0; i < 3; i++)
9273     {
9274       args[i] = cxx_eval_constant_expression (call, TREE_OPERAND (t, i),
9275                                               allow_non_constant, addr,
9276                                               non_constant_p, overflow_p);
9277       VERIFY_CONSTANT (args[i]);
9278     }
9279
9280   val = fold_ternary_loc (EXPR_LOCATION (t), TREE_CODE (t), TREE_TYPE (t),
9281                           args[0], args[1], args[2]);
9282   if (val == NULL_TREE)
9283     return t;
9284   VERIFY_CONSTANT (val);
9285   return val;
9286 }
9287
9288 /* Attempt to reduce the expression T to a constant value.
9289    On failure, issue diagnostic and return error_mark_node.  */
9290 /* FIXME unify with c_fully_fold */
9291
9292 static tree
9293 cxx_eval_constant_expression (const constexpr_call *call, tree t,
9294                               bool allow_non_constant, bool addr,
9295                               bool *non_constant_p, bool *overflow_p)
9296 {
9297   tree r = t;
9298
9299   if (t == error_mark_node)
9300     {
9301       *non_constant_p = true;
9302       return t;
9303     }
9304   if (CONSTANT_CLASS_P (t))
9305     {
9306       if (TREE_CODE (t) == PTRMEM_CST)
9307         t = cplus_expand_constant (t);
9308       else if (TREE_OVERFLOW (t) && (!flag_permissive || allow_non_constant))
9309         *overflow_p = true;
9310       return t;
9311     }
9312   if (TREE_CODE (t) != NOP_EXPR
9313       && reduced_constant_expression_p (t))
9314     return fold (t);
9315
9316   switch (TREE_CODE (t))
9317     {
9318     case VAR_DECL:
9319       if (addr)
9320         return t;
9321       /* else fall through. */
9322     case CONST_DECL:
9323       r = integral_constant_value (t);
9324       if (TREE_CODE (r) == TARGET_EXPR
9325           && TREE_CODE (TARGET_EXPR_INITIAL (r)) == CONSTRUCTOR)
9326         r = TARGET_EXPR_INITIAL (r);
9327       if (DECL_P (r))
9328         {
9329           if (!allow_non_constant)
9330             non_const_var_error (r);
9331           *non_constant_p = true;
9332         }
9333       break;
9334
9335     case FUNCTION_DECL:
9336     case TEMPLATE_DECL:
9337     case LABEL_DECL:
9338       return t;
9339
9340     case PARM_DECL:
9341       if (call && DECL_CONTEXT (t) == call->fundef->decl)
9342         {
9343           if (DECL_ARTIFICIAL (t) && DECL_CONSTRUCTOR_P (DECL_CONTEXT (t)))
9344             {
9345               if (!allow_non_constant)
9346                 sorry ("use of the value of the object being constructed "
9347                        "in a constant expression");
9348               *non_constant_p = true;
9349             }
9350           else
9351             r = lookup_parameter_binding (call, t);
9352         }
9353       else if (addr)
9354         /* Defer in case this is only used for its type.  */;
9355       else
9356         {
9357           if (!allow_non_constant)
9358             error ("%qE is not a constant expression", t);
9359           *non_constant_p = true;
9360         }
9361       break;
9362
9363     case CALL_EXPR:
9364     case AGGR_INIT_EXPR:
9365       r = cxx_eval_call_expression (call, t, allow_non_constant, addr,
9366                                     non_constant_p, overflow_p);
9367       break;
9368
9369     case TARGET_EXPR:
9370       if (!literal_type_p (TREE_TYPE (t)))
9371         {
9372           if (!allow_non_constant)
9373             {
9374               error ("temporary of non-literal type %qT in a "
9375                      "constant expression", TREE_TYPE (t));
9376               explain_non_literal_class (TREE_TYPE (t));
9377             }
9378           *non_constant_p = true;
9379           break;
9380         }
9381       /* else fall through.  */
9382     case INIT_EXPR:
9383       /* Pass false for 'addr' because these codes indicate
9384          initialization of a temporary.  */
9385       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
9386                                         allow_non_constant, false,
9387                                         non_constant_p, overflow_p);
9388       if (!*non_constant_p)
9389         /* Adjust the type of the result to the type of the temporary.  */
9390         r = adjust_temp_type (TREE_TYPE (t), r);
9391       break;
9392
9393     case SCOPE_REF:
9394       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
9395                                         allow_non_constant, addr,
9396                                         non_constant_p, overflow_p);
9397       break;
9398
9399     case RETURN_EXPR:
9400     case NON_LVALUE_EXPR:
9401     case TRY_CATCH_EXPR:
9402     case CLEANUP_POINT_EXPR:
9403     case MUST_NOT_THROW_EXPR:
9404     case SAVE_EXPR:
9405       r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
9406                                         allow_non_constant, addr,
9407                                         non_constant_p, overflow_p);
9408       break;
9409
9410       /* These differ from cxx_eval_unary_expression in that this doesn't
9411          check for a constant operand or result; an address can be
9412          constant without its operand being, and vice versa.  */
9413     case INDIRECT_REF:
9414       r = cxx_eval_indirect_ref (call, t, allow_non_constant, addr,
9415                                  non_constant_p, overflow_p);
9416       break;
9417
9418     case ADDR_EXPR:
9419       {
9420         tree oldop = TREE_OPERAND (t, 0);
9421         tree op = cxx_eval_constant_expression (call, oldop,
9422                                                 allow_non_constant,
9423                                                 /*addr*/true,
9424                                                 non_constant_p, overflow_p);
9425         /* Don't VERIFY_CONSTANT here.  */
9426         if (*non_constant_p)
9427           return t;
9428         /* This function does more aggressive folding than fold itself.  */
9429         r = build_fold_addr_expr_with_type (op, TREE_TYPE (t));
9430         if (TREE_CODE (r) == ADDR_EXPR && TREE_OPERAND (r, 0) == oldop)
9431           return t;
9432         break;
9433       }
9434
9435     case REALPART_EXPR:
9436     case IMAGPART_EXPR:
9437     case CONJ_EXPR:
9438     case FIX_TRUNC_EXPR:
9439     case FLOAT_EXPR:
9440     case NEGATE_EXPR:
9441     case ABS_EXPR:
9442     case BIT_NOT_EXPR:
9443     case TRUTH_NOT_EXPR:
9444     case FIXED_CONVERT_EXPR:
9445       r = cxx_eval_unary_expression (call, t, allow_non_constant, addr,
9446                                      non_constant_p, overflow_p);
9447       break;
9448
9449     case SIZEOF_EXPR:
9450       if (SIZEOF_EXPR_TYPE_P (t))
9451         r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9452                                         SIZEOF_EXPR, false);
9453       else if (TYPE_P (TREE_OPERAND (t, 0)))
9454         r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9455                                         false);
9456       else
9457         r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9458                                         false);
9459       if (r == error_mark_node)
9460         r = size_one_node;
9461       VERIFY_CONSTANT (r);
9462       break;
9463
9464     case COMPOUND_EXPR:
9465       {
9466         /* check_return_expr sometimes wraps a TARGET_EXPR in a
9467            COMPOUND_EXPR; don't get confused.  Also handle EMPTY_CLASS_EXPR
9468            introduced by build_call_a.  */
9469         tree op0 = TREE_OPERAND (t, 0);
9470         tree op1 = TREE_OPERAND (t, 1);
9471         STRIP_NOPS (op1);
9472         if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
9473             || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
9474           r = cxx_eval_constant_expression (call, op0, allow_non_constant,
9475                                             addr, non_constant_p, overflow_p);
9476         else
9477           {
9478             /* Check that the LHS is constant and then discard it.  */
9479             cxx_eval_constant_expression (call, op0, allow_non_constant,
9480                                           false, non_constant_p, overflow_p);
9481             op1 = TREE_OPERAND (t, 1);
9482             r = cxx_eval_constant_expression (call, op1, allow_non_constant,
9483                                               addr, non_constant_p, overflow_p);
9484           }
9485       }
9486       break;
9487
9488     case POINTER_PLUS_EXPR:
9489     case PLUS_EXPR:
9490     case MINUS_EXPR:
9491     case MULT_EXPR:
9492     case TRUNC_DIV_EXPR:
9493     case CEIL_DIV_EXPR:
9494     case FLOOR_DIV_EXPR:
9495     case ROUND_DIV_EXPR:
9496     case TRUNC_MOD_EXPR:
9497     case CEIL_MOD_EXPR:
9498     case ROUND_MOD_EXPR:
9499     case RDIV_EXPR:
9500     case EXACT_DIV_EXPR:
9501     case MIN_EXPR:
9502     case MAX_EXPR:
9503     case LSHIFT_EXPR:
9504     case RSHIFT_EXPR:
9505     case LROTATE_EXPR:
9506     case RROTATE_EXPR:
9507     case BIT_IOR_EXPR:
9508     case BIT_XOR_EXPR:
9509     case BIT_AND_EXPR:
9510     case TRUTH_XOR_EXPR:
9511     case LT_EXPR:
9512     case LE_EXPR:
9513     case GT_EXPR:
9514     case GE_EXPR:
9515     case EQ_EXPR:
9516     case NE_EXPR:
9517     case UNORDERED_EXPR:
9518     case ORDERED_EXPR:
9519     case UNLT_EXPR:
9520     case UNLE_EXPR:
9521     case UNGT_EXPR:
9522     case UNGE_EXPR:
9523     case UNEQ_EXPR:
9524     case LTGT_EXPR:
9525     case RANGE_EXPR:
9526     case COMPLEX_EXPR:
9527       r = cxx_eval_binary_expression (call, t, allow_non_constant, addr,
9528                                       non_constant_p, overflow_p);
9529       break;
9530
9531       /* fold can introduce non-IF versions of these; still treat them as
9532          short-circuiting.  */
9533     case TRUTH_AND_EXPR:
9534     case TRUTH_ANDIF_EXPR:
9535       r = cxx_eval_logical_expression (call, t, boolean_false_node,
9536                                        boolean_true_node,
9537                                        allow_non_constant, addr,
9538                                        non_constant_p, overflow_p);
9539       break;
9540
9541     case TRUTH_OR_EXPR:
9542     case TRUTH_ORIF_EXPR:
9543       r = cxx_eval_logical_expression (call, t, boolean_true_node,
9544                                        boolean_false_node,
9545                                        allow_non_constant, addr,
9546                                        non_constant_p, overflow_p);
9547       break;
9548
9549     case ARRAY_REF:
9550       r = cxx_eval_array_reference (call, t, allow_non_constant, addr,
9551                                     non_constant_p, overflow_p);
9552       break;
9553
9554     case COMPONENT_REF:
9555       r = cxx_eval_component_reference (call, t, allow_non_constant, addr,
9556                                         non_constant_p, overflow_p);
9557       break;
9558
9559     case BIT_FIELD_REF:
9560       r = cxx_eval_bit_field_ref (call, t, allow_non_constant, addr,
9561                                   non_constant_p, overflow_p);
9562       break;
9563
9564     case COND_EXPR:
9565     case VEC_COND_EXPR:
9566       r = cxx_eval_conditional_expression (call, t, allow_non_constant, addr,
9567                                            non_constant_p, overflow_p);
9568       break;
9569
9570     case CONSTRUCTOR:
9571       r = cxx_eval_bare_aggregate (call, t, allow_non_constant, addr,
9572                                    non_constant_p, overflow_p);
9573       break;
9574
9575     case VEC_INIT_EXPR:
9576       /* We can get this in a defaulted constructor for a class with a
9577          non-static data member of array type.  Either the initializer will
9578          be NULL, meaning default-initialization, or it will be an lvalue
9579          or xvalue of the same type, meaning direct-initialization from the
9580          corresponding member.  */
9581       r = cxx_eval_vec_init (call, t, allow_non_constant, addr,
9582                              non_constant_p, overflow_p);
9583       break;
9584
9585     case FMA_EXPR:
9586     case VEC_PERM_EXPR:
9587       r = cxx_eval_trinary_expression (call, t, allow_non_constant, addr,
9588                                        non_constant_p, overflow_p);
9589       break;
9590
9591     case CONVERT_EXPR:
9592     case VIEW_CONVERT_EXPR:
9593     case NOP_EXPR:
9594       {
9595         tree oldop = TREE_OPERAND (t, 0);
9596         tree op = cxx_eval_constant_expression (call, oldop,
9597                                                 allow_non_constant, addr,
9598                                                 non_constant_p, overflow_p);
9599         if (*non_constant_p)
9600           return t;
9601         if (POINTER_TYPE_P (TREE_TYPE (t))
9602             && TREE_CODE (op) == INTEGER_CST
9603             && !integer_zerop (op))
9604           {
9605             if (!allow_non_constant)
9606               error_at (EXPR_LOC_OR_HERE (t),
9607                         "reinterpret_cast from integer to pointer");
9608             *non_constant_p = true;
9609             return t;
9610           }
9611         if (op == oldop)
9612           /* We didn't fold at the top so we could check for ptr-int
9613              conversion.  */
9614           return fold (t);
9615         r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), op);
9616         /* Conversion of an out-of-range value has implementation-defined
9617            behavior; the language considers it different from arithmetic
9618            overflow, which is undefined.  */
9619         if (TREE_OVERFLOW_P (r) && !TREE_OVERFLOW_P (op))
9620           TREE_OVERFLOW (r) = false;
9621       }
9622       break;
9623
9624     case EMPTY_CLASS_EXPR:
9625       /* This is good enough for a function argument that might not get
9626          used, and they can't do anything with it, so just return it.  */
9627       return t;
9628
9629     case LAMBDA_EXPR:
9630     case PREINCREMENT_EXPR:
9631     case POSTINCREMENT_EXPR:
9632     case PREDECREMENT_EXPR:
9633     case POSTDECREMENT_EXPR:
9634     case NEW_EXPR:
9635     case VEC_NEW_EXPR:
9636     case DELETE_EXPR:
9637     case VEC_DELETE_EXPR:
9638     case THROW_EXPR:
9639     case MODIFY_EXPR:
9640     case MODOP_EXPR:
9641       /* GCC internal stuff.  */
9642     case VA_ARG_EXPR:
9643     case OBJ_TYPE_REF:
9644     case WITH_CLEANUP_EXPR:
9645     case STATEMENT_LIST:
9646     case BIND_EXPR:
9647     case NON_DEPENDENT_EXPR:
9648     case BASELINK:
9649     case EXPR_STMT:
9650     case OFFSET_REF:
9651       if (!allow_non_constant)
9652         error_at (EXPR_LOC_OR_HERE (t),
9653                   "expression %qE is not a constant-expression", t);
9654       *non_constant_p = true;
9655       break;
9656
9657     default:
9658       internal_error ("unexpected expression %qE of kind %s", t,
9659                       get_tree_code_name (TREE_CODE (t)));
9660       *non_constant_p = true;
9661       break;
9662     }
9663
9664   if (r == error_mark_node)
9665     *non_constant_p = true;
9666
9667   if (*non_constant_p)
9668     return t;
9669   else
9670     return r;
9671 }
9672
9673 static tree
9674 cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant)
9675 {
9676   bool non_constant_p = false;
9677   bool overflow_p = false;
9678   tree r = cxx_eval_constant_expression (NULL, t, allow_non_constant,
9679                                          false, &non_constant_p, &overflow_p);
9680
9681   verify_constant (r, allow_non_constant, &non_constant_p, &overflow_p);
9682
9683   if (TREE_CODE (t) != CONSTRUCTOR
9684       && cp_has_mutable_p (TREE_TYPE (t)))
9685     {
9686       /* We allow a mutable type if the original expression was a
9687          CONSTRUCTOR so that we can do aggregate initialization of
9688          constexpr variables.  */
9689       if (!allow_non_constant)
9690         error ("%qT cannot be the type of a complete constant expression "
9691                "because it has mutable sub-objects", TREE_TYPE (t));
9692       non_constant_p = true;
9693     }
9694
9695   /* Technically we should check this for all subexpressions, but that
9696      runs into problems with our internal representation of pointer
9697      subtraction and the 5.19 rules are still in flux.  */
9698   if (CONVERT_EXPR_CODE_P (TREE_CODE (r))
9699       && ARITHMETIC_TYPE_P (TREE_TYPE (r))
9700       && TREE_CODE (TREE_OPERAND (r, 0)) == ADDR_EXPR)
9701     {
9702       if (!allow_non_constant)
9703         error ("conversion from pointer type %qT "
9704                "to arithmetic type %qT in a constant-expression",
9705                TREE_TYPE (TREE_OPERAND (r, 0)), TREE_TYPE (r));
9706       non_constant_p = true;
9707     }
9708
9709   if (!non_constant_p && overflow_p)
9710     non_constant_p = true;
9711
9712   if (non_constant_p && !allow_non_constant)
9713     return error_mark_node;
9714   else if (non_constant_p && TREE_CONSTANT (r))
9715     {
9716       /* This isn't actually constant, so unset TREE_CONSTANT.  */
9717       if (EXPR_P (r))
9718         r = copy_node (r);
9719       else if (TREE_CODE (r) == CONSTRUCTOR)
9720         r = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (r), r);
9721       else
9722         r = build_nop (TREE_TYPE (r), r);
9723       TREE_CONSTANT (r) = false;
9724     }
9725   else if (non_constant_p || r == t)
9726     return t;
9727
9728   if (TREE_CODE (r) == CONSTRUCTOR && CLASS_TYPE_P (TREE_TYPE (r)))
9729     {
9730       if (TREE_CODE (t) == TARGET_EXPR
9731           && TARGET_EXPR_INITIAL (t) == r)
9732         return t;
9733       else
9734         {
9735           r = get_target_expr (r);
9736           TREE_CONSTANT (r) = true;
9737           return r;
9738         }
9739     }
9740   else
9741     return r;
9742 }
9743
9744 /* Returns true if T is a valid subexpression of a constant expression,
9745    even if it isn't itself a constant expression.  */
9746
9747 bool
9748 is_sub_constant_expr (tree t)
9749 {
9750   bool non_constant_p = false;
9751   bool overflow_p = false;
9752   cxx_eval_constant_expression (NULL, t, true, false, &non_constant_p,
9753                                 &overflow_p);
9754   return !non_constant_p && !overflow_p;
9755 }
9756
9757 /* If T represents a constant expression returns its reduced value.
9758    Otherwise return error_mark_node.  If T is dependent, then
9759    return NULL.  */
9760
9761 tree
9762 cxx_constant_value (tree t)
9763 {
9764   return cxx_eval_outermost_constant_expr (t, false);
9765 }
9766
9767 /* If T is a constant expression, returns its reduced value.
9768    Otherwise, if T does not have TREE_CONSTANT set, returns T.
9769    Otherwise, returns a version of T without TREE_CONSTANT.  */
9770
9771 tree
9772 maybe_constant_value (tree t)
9773 {
9774   tree r;
9775
9776   if (instantiation_dependent_expression_p (t)
9777       || type_unknown_p (t)
9778       || BRACE_ENCLOSED_INITIALIZER_P (t)
9779       || !potential_constant_expression (t))
9780     {
9781       if (TREE_OVERFLOW_P (t))
9782         {
9783           t = build_nop (TREE_TYPE (t), t);
9784           TREE_CONSTANT (t) = false;
9785         }
9786       return t;
9787     }
9788
9789   r = cxx_eval_outermost_constant_expr (t, true);
9790 #ifdef ENABLE_CHECKING
9791   /* cp_tree_equal looks through NOPs, so allow them.  */
9792   gcc_assert (r == t
9793               || CONVERT_EXPR_P (t)
9794               || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
9795               || !cp_tree_equal (r, t));
9796 #endif
9797   return r;
9798 }
9799
9800 /* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
9801    than wrapped in a TARGET_EXPR.  */
9802
9803 tree
9804 maybe_constant_init (tree t)
9805 {
9806   t = maybe_constant_value (t);
9807   if (TREE_CODE (t) == TARGET_EXPR)
9808     {
9809       tree init = TARGET_EXPR_INITIAL (t);
9810       if (TREE_CODE (init) == CONSTRUCTOR)
9811         t = init;
9812     }
9813   return t;
9814 }
9815
9816 #if 0
9817 /* FIXME see ADDR_EXPR section in potential_constant_expression_1.  */
9818 /* Return true if the object referred to by REF has automatic or thread
9819    local storage.  */
9820
9821 enum { ck_ok, ck_bad, ck_unknown };
9822 static int
9823 check_automatic_or_tls (tree ref)
9824 {
9825   enum machine_mode mode;
9826   HOST_WIDE_INT bitsize, bitpos;
9827   tree offset;
9828   int volatilep = 0, unsignedp = 0;
9829   tree decl = get_inner_reference (ref, &bitsize, &bitpos, &offset,
9830                                    &mode, &unsignedp, &volatilep, false);
9831   duration_kind dk;
9832
9833   /* If there isn't a decl in the middle, we don't know the linkage here,
9834      and this isn't a constant expression anyway.  */
9835   if (!DECL_P (decl))
9836     return ck_unknown;
9837   dk = decl_storage_duration (decl);
9838   return (dk == dk_auto || dk == dk_thread) ? ck_bad : ck_ok;
9839 }
9840 #endif
9841
9842 /* Return true if T denotes a potentially constant expression.  Issue
9843    diagnostic as appropriate under control of FLAGS.  If WANT_RVAL is true,
9844    an lvalue-rvalue conversion is implied.
9845
9846    C++0x [expr.const] used to say
9847
9848    6 An expression is a potential constant expression if it is
9849      a constant expression where all occurrences of function
9850      parameters are replaced by arbitrary constant expressions
9851      of the appropriate type.
9852
9853    2  A conditional expression is a constant expression unless it
9854       involves one of the following as a potentially evaluated
9855       subexpression (3.2), but subexpressions of logical AND (5.14),
9856       logical OR (5.15), and conditional (5.16) operations that are
9857       not evaluated are not considered.   */
9858
9859 static bool
9860 potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags)
9861 {
9862   enum { any = false, rval = true };
9863   int i;
9864   tree tmp;
9865
9866   if (t == error_mark_node)
9867     return false;
9868   if (t == NULL_TREE)
9869     return true;
9870   if (TREE_THIS_VOLATILE (t))
9871     {
9872       if (flags & tf_error)
9873         error ("expression %qE has side-effects", t);
9874       return false;
9875     }
9876   if (CONSTANT_CLASS_P (t))
9877     return true;
9878
9879   switch (TREE_CODE (t))
9880     {
9881     case FUNCTION_DECL:
9882     case BASELINK:
9883     case TEMPLATE_DECL:
9884     case OVERLOAD:
9885     case TEMPLATE_ID_EXPR:
9886     case LABEL_DECL:
9887     case LABEL_EXPR:
9888     case CONST_DECL:
9889     case SIZEOF_EXPR:
9890     case ALIGNOF_EXPR:
9891     case OFFSETOF_EXPR:
9892     case NOEXCEPT_EXPR:
9893     case TEMPLATE_PARM_INDEX:
9894     case TRAIT_EXPR:
9895     case IDENTIFIER_NODE:
9896     case USERDEF_LITERAL:
9897       /* We can see a FIELD_DECL in a pointer-to-member expression.  */
9898     case FIELD_DECL:
9899     case PARM_DECL:
9900     case USING_DECL:
9901       return true;
9902
9903     case AGGR_INIT_EXPR:
9904     case CALL_EXPR:
9905       /* -- an invocation of a function other than a constexpr function
9906             or a constexpr constructor.  */
9907       {
9908         tree fun = get_function_named_in_call (t);
9909         const int nargs = call_expr_nargs (t);
9910         i = 0;
9911
9912         if (is_overloaded_fn (fun))
9913           {
9914             if (TREE_CODE (fun) == FUNCTION_DECL)
9915               {
9916                 if (builtin_valid_in_constant_expr_p (fun))
9917                   return true;
9918                 if (!DECL_DECLARED_CONSTEXPR_P (fun)
9919                     /* Allow any built-in function; if the expansion
9920                        isn't constant, we'll deal with that then.  */
9921                     && !is_builtin_fn (fun))
9922                   {
9923                     if (flags & tf_error)
9924                       {
9925                         error_at (EXPR_LOC_OR_HERE (t),
9926                                   "call to non-constexpr function %qD", fun);
9927                         explain_invalid_constexpr_fn (fun);
9928                       }
9929                     return false;
9930                   }
9931                 /* A call to a non-static member function takes the address
9932                    of the object as the first argument.  But in a constant
9933                    expression the address will be folded away, so look
9934                    through it now.  */
9935                 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
9936                     && !DECL_CONSTRUCTOR_P (fun))
9937                   {
9938                     tree x = get_nth_callarg (t, 0);
9939                     if (is_this_parameter (x))
9940                       {
9941                         if (DECL_CONTEXT (x) == NULL_TREE
9942                             || DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)))
9943                           {
9944                             if (flags & tf_error)
9945                               sorry ("calling a member function of the "
9946                                      "object being constructed in a constant "
9947                                      "expression");
9948                             return false;
9949                           }
9950                         /* Otherwise OK.  */;
9951                       }
9952                     else if (!potential_constant_expression_1 (x, rval, flags))
9953                       return false;
9954                     i = 1;
9955                   }
9956               }
9957             else
9958               {
9959                 if (!potential_constant_expression_1 (fun, true, flags))
9960                   return false;
9961                 fun = get_first_fn (fun);
9962               }
9963             /* Skip initial arguments to base constructors.  */
9964             if (DECL_BASE_CONSTRUCTOR_P (fun))
9965               i = num_artificial_parms_for (fun);
9966             fun = DECL_ORIGIN (fun);
9967           }
9968         else
9969           {
9970             if (potential_constant_expression_1 (fun, rval, flags))
9971               /* Might end up being a constant function pointer.  */;
9972             else
9973               return false;
9974           }
9975         for (; i < nargs; ++i)
9976           {
9977             tree x = get_nth_callarg (t, i);
9978             if (!potential_constant_expression_1 (x, rval, flags))
9979               return false;
9980           }
9981         return true;
9982       }
9983
9984     case NON_LVALUE_EXPR:
9985       /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
9986             -- an lvalue of integral type that refers to a non-volatile
9987                const variable or static data member initialized with
9988                constant expressions, or
9989
9990             -- an lvalue of literal type that refers to non-volatile
9991                object defined with constexpr, or that refers to a
9992                sub-object of such an object;  */
9993       return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval, flags);
9994
9995     case VAR_DECL:
9996       if (want_rval && !decl_constant_var_p (t)
9997           && !dependent_type_p (TREE_TYPE (t)))
9998         {
9999           if (flags & tf_error)
10000             non_const_var_error (t);
10001           return false;
10002         }
10003       return true;
10004
10005     case NOP_EXPR:
10006     case CONVERT_EXPR:
10007     case VIEW_CONVERT_EXPR:
10008       /* -- a reinterpret_cast.  FIXME not implemented, and this rule
10009          may change to something more specific to type-punning (DR 1312).  */
10010       {
10011         tree from = TREE_OPERAND (t, 0);
10012         if (POINTER_TYPE_P (TREE_TYPE (t))
10013             && TREE_CODE (from) == INTEGER_CST
10014             && !integer_zerop (from))
10015           {
10016             if (flags & tf_error)
10017               error_at (EXPR_LOC_OR_HERE (t),
10018                         "reinterpret_cast from integer to pointer");
10019             return false;
10020           }
10021         return (potential_constant_expression_1
10022                 (from, TREE_CODE (t) != VIEW_CONVERT_EXPR, flags));
10023       }
10024
10025     case ADDR_EXPR:
10026       /* -- a unary operator & that is applied to an lvalue that
10027             designates an object with thread or automatic storage
10028             duration;  */
10029       t = TREE_OPERAND (t, 0);
10030 #if 0
10031       /* FIXME adjust when issue 1197 is fully resolved.  For now don't do
10032          any checking here, as we might dereference the pointer later.  If
10033          we remove this code, also remove check_automatic_or_tls.  */
10034       i = check_automatic_or_tls (t);
10035       if (i == ck_ok)
10036         return true;
10037       if (i == ck_bad)
10038         {
10039           if (flags & tf_error)
10040             error ("address-of an object %qE with thread local or "
10041                    "automatic storage is not a constant expression", t);
10042           return false;
10043         }
10044 #endif
10045       return potential_constant_expression_1 (t, any, flags);
10046
10047     case COMPONENT_REF:
10048     case BIT_FIELD_REF:
10049     case ARROW_EXPR:
10050     case OFFSET_REF:
10051       /* -- a class member access unless its postfix-expression is
10052             of literal type or of pointer to literal type.  */
10053       /* This test would be redundant, as it follows from the
10054          postfix-expression being a potential constant expression.  */
10055       return potential_constant_expression_1 (TREE_OPERAND (t, 0),
10056                                               want_rval, flags);
10057
10058     case EXPR_PACK_EXPANSION:
10059       return potential_constant_expression_1 (PACK_EXPANSION_PATTERN (t),
10060                                               want_rval, flags);
10061
10062     case INDIRECT_REF:
10063       {
10064         tree x = TREE_OPERAND (t, 0);
10065         STRIP_NOPS (x);
10066         if (is_this_parameter (x))
10067           {
10068             if (DECL_CONTEXT (x)
10069                 && !DECL_DECLARED_CONSTEXPR_P (DECL_CONTEXT (x)))
10070               {
10071                 if (flags & tf_error)
10072                   error ("use of %<this%> in a constant expression");
10073                 return false;
10074               }
10075             if (want_rval && DECL_CONTEXT (x)
10076                 && DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)))
10077               {
10078                 if (flags & tf_error)
10079                   sorry ("use of the value of the object being constructed "
10080                          "in a constant expression");
10081                 return false;
10082               }
10083             return true;
10084           }
10085         return potential_constant_expression_1 (x, rval, flags);
10086       }
10087
10088     case LAMBDA_EXPR:
10089     case DYNAMIC_CAST_EXPR:
10090     case PSEUDO_DTOR_EXPR:
10091     case PREINCREMENT_EXPR:
10092     case POSTINCREMENT_EXPR:
10093     case PREDECREMENT_EXPR:
10094     case POSTDECREMENT_EXPR:
10095     case NEW_EXPR:
10096     case VEC_NEW_EXPR:
10097     case DELETE_EXPR:
10098     case VEC_DELETE_EXPR:
10099     case THROW_EXPR:
10100     case MODIFY_EXPR:
10101     case MODOP_EXPR:
10102     case OMP_ATOMIC:
10103     case OMP_ATOMIC_READ:
10104     case OMP_ATOMIC_CAPTURE_OLD:
10105     case OMP_ATOMIC_CAPTURE_NEW:
10106       /* GCC internal stuff.  */
10107     case VA_ARG_EXPR:
10108     case OBJ_TYPE_REF:
10109     case WITH_CLEANUP_EXPR:
10110     case CLEANUP_POINT_EXPR:
10111     case MUST_NOT_THROW_EXPR:
10112     case TRY_CATCH_EXPR:
10113     case STATEMENT_LIST:
10114       /* Don't bother trying to define a subset of statement-expressions to
10115          be constant-expressions, at least for now.  */
10116     case STMT_EXPR:
10117     case EXPR_STMT:
10118     case BIND_EXPR:
10119     case TRANSACTION_EXPR:
10120     case IF_STMT:
10121     case DO_STMT:
10122     case FOR_STMT:
10123     case WHILE_STMT:
10124       if (flags & tf_error)
10125         error ("expression %qE is not a constant-expression", t);
10126       return false;
10127
10128     case TYPEID_EXPR:
10129       /* -- a typeid expression whose operand is of polymorphic
10130             class type;  */
10131       {
10132         tree e = TREE_OPERAND (t, 0);
10133         if (!TYPE_P (e) && !type_dependent_expression_p (e)
10134             && TYPE_POLYMORPHIC_P (TREE_TYPE (e)))
10135           {
10136             if (flags & tf_error)
10137               error ("typeid-expression is not a constant expression "
10138                      "because %qE is of polymorphic type", e);
10139             return false;
10140           }
10141         return true;
10142       }
10143
10144     case MINUS_EXPR:
10145       /* -- a subtraction where both operands are pointers.   */
10146       if (TYPE_PTR_P (TREE_OPERAND (t, 0))
10147           && TYPE_PTR_P (TREE_OPERAND (t, 1)))
10148         {
10149           if (flags & tf_error)
10150             error ("difference of two pointer expressions is not "
10151                    "a constant expression");
10152           return false;
10153         }
10154       want_rval = true;
10155       goto binary;
10156
10157     case LT_EXPR:
10158     case LE_EXPR:
10159     case GT_EXPR:
10160     case GE_EXPR:
10161     case EQ_EXPR:
10162     case NE_EXPR:
10163       /* -- a relational or equality operator where at least
10164             one of the operands is a pointer.  */
10165       if (TYPE_PTR_P (TREE_OPERAND (t, 0))
10166           || TYPE_PTR_P (TREE_OPERAND (t, 1)))
10167         {
10168           if (flags & tf_error)
10169             error ("pointer comparison expression is not a "
10170                    "constant expression");
10171           return false;
10172         }
10173       want_rval = true;
10174       goto binary;
10175
10176     case BIT_NOT_EXPR:
10177       /* A destructor.  */
10178       if (TYPE_P (TREE_OPERAND (t, 0)))
10179         return true;
10180       /* else fall through.  */
10181
10182     case REALPART_EXPR:
10183     case IMAGPART_EXPR:
10184     case CONJ_EXPR:
10185     case SAVE_EXPR:
10186     case FIX_TRUNC_EXPR:
10187     case FLOAT_EXPR:
10188     case NEGATE_EXPR:
10189     case ABS_EXPR:
10190     case TRUTH_NOT_EXPR:
10191     case FIXED_CONVERT_EXPR:
10192     case UNARY_PLUS_EXPR:
10193       return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval,
10194                                               flags);
10195
10196     case CAST_EXPR:
10197     case CONST_CAST_EXPR:
10198     case STATIC_CAST_EXPR:
10199     case REINTERPRET_CAST_EXPR:
10200     case IMPLICIT_CONV_EXPR:
10201       if (cxx_dialect < cxx11
10202           && !dependent_type_p (TREE_TYPE (t))
10203           && !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t)))
10204         /* In C++98, a conversion to non-integral type can't be part of a
10205            constant expression.  */
10206         {
10207           if (flags & tf_error)
10208             error ("cast to non-integral type %qT in a constant expression",
10209                    TREE_TYPE (t));
10210           return false;
10211         }
10212
10213       return (potential_constant_expression_1
10214               (TREE_OPERAND (t, 0),
10215                TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE, flags));
10216
10217     case PAREN_EXPR:
10218     case NON_DEPENDENT_EXPR:
10219       /* For convenience.  */
10220     case RETURN_EXPR:
10221       return potential_constant_expression_1 (TREE_OPERAND (t, 0),
10222                                               want_rval, flags);
10223
10224     case SCOPE_REF:
10225       return potential_constant_expression_1 (TREE_OPERAND (t, 1),
10226                                               want_rval, flags);
10227
10228     case TARGET_EXPR:
10229       if (!literal_type_p (TREE_TYPE (t)))
10230         {
10231           if (flags & tf_error)
10232             {
10233               error ("temporary of non-literal type %qT in a "
10234                      "constant expression", TREE_TYPE (t));
10235               explain_non_literal_class (TREE_TYPE (t));
10236             }
10237           return false;
10238         }
10239     case INIT_EXPR:
10240       return potential_constant_expression_1 (TREE_OPERAND (t, 1),
10241                                               rval, flags);
10242
10243     case CONSTRUCTOR:
10244       {
10245         vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
10246         constructor_elt *ce;
10247         for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
10248           if (!potential_constant_expression_1 (ce->value, want_rval, flags))
10249             return false;
10250         return true;
10251       }
10252
10253     case TREE_LIST:
10254       {
10255         gcc_assert (TREE_PURPOSE (t) == NULL_TREE
10256                     || DECL_P (TREE_PURPOSE (t)));
10257         if (!potential_constant_expression_1 (TREE_VALUE (t), want_rval,
10258                                               flags))
10259           return false;
10260         if (TREE_CHAIN (t) == NULL_TREE)
10261           return true;
10262         return potential_constant_expression_1 (TREE_CHAIN (t), want_rval,
10263                                                 flags);
10264       }
10265
10266     case TRUNC_DIV_EXPR:
10267     case CEIL_DIV_EXPR:
10268     case FLOOR_DIV_EXPR:
10269     case ROUND_DIV_EXPR:
10270     case TRUNC_MOD_EXPR:
10271     case CEIL_MOD_EXPR:
10272     case ROUND_MOD_EXPR:
10273       {
10274         tree denom = TREE_OPERAND (t, 1);
10275         if (!potential_constant_expression_1 (denom, rval, flags))
10276           return false;
10277         /* We can't call cxx_eval_outermost_constant_expr on an expression
10278            that hasn't been through fold_non_dependent_expr yet.  */
10279         if (!processing_template_decl)
10280           denom = cxx_eval_outermost_constant_expr (denom, true);
10281         if (integer_zerop (denom))
10282           {
10283             if (flags & tf_error)
10284               error ("division by zero is not a constant-expression");
10285             return false;
10286           }
10287         else
10288           {
10289             want_rval = true;
10290             return potential_constant_expression_1 (TREE_OPERAND (t, 0),
10291                                                     want_rval, flags);
10292           }
10293       }
10294
10295     case COMPOUND_EXPR:
10296       {
10297         /* check_return_expr sometimes wraps a TARGET_EXPR in a
10298            COMPOUND_EXPR; don't get confused.  Also handle EMPTY_CLASS_EXPR
10299            introduced by build_call_a.  */
10300         tree op0 = TREE_OPERAND (t, 0);
10301         tree op1 = TREE_OPERAND (t, 1);
10302         STRIP_NOPS (op1);
10303         if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
10304             || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
10305           return potential_constant_expression_1 (op0, want_rval, flags);
10306         else
10307           goto binary;
10308       }
10309
10310       /* If the first operand is the non-short-circuit constant, look at
10311          the second operand; otherwise we only care about the first one for
10312          potentiality.  */
10313     case TRUTH_AND_EXPR:
10314     case TRUTH_ANDIF_EXPR:
10315       tmp = boolean_true_node;
10316       goto truth;
10317     case TRUTH_OR_EXPR:
10318     case TRUTH_ORIF_EXPR:
10319       tmp = boolean_false_node;
10320     truth:
10321       {
10322         tree op = TREE_OPERAND (t, 0);
10323         if (!potential_constant_expression_1 (op, rval, flags))
10324           return false;
10325         if (!processing_template_decl)
10326           op = cxx_eval_outermost_constant_expr (op, true);
10327         if (tree_int_cst_equal (op, tmp))
10328           return potential_constant_expression_1 (TREE_OPERAND (t, 1), rval, flags);
10329         else
10330           return true;
10331       }
10332
10333     case PLUS_EXPR:
10334     case MULT_EXPR:
10335     case POINTER_PLUS_EXPR:
10336     case RDIV_EXPR:
10337     case EXACT_DIV_EXPR:
10338     case MIN_EXPR:
10339     case MAX_EXPR:
10340     case LSHIFT_EXPR:
10341     case RSHIFT_EXPR:
10342     case LROTATE_EXPR:
10343     case RROTATE_EXPR:
10344     case BIT_IOR_EXPR:
10345     case BIT_XOR_EXPR:
10346     case BIT_AND_EXPR:
10347     case TRUTH_XOR_EXPR:
10348     case UNORDERED_EXPR:
10349     case ORDERED_EXPR:
10350     case UNLT_EXPR:
10351     case UNLE_EXPR:
10352     case UNGT_EXPR:
10353     case UNGE_EXPR:
10354     case UNEQ_EXPR:
10355     case LTGT_EXPR:
10356     case RANGE_EXPR:
10357     case COMPLEX_EXPR:
10358       want_rval = true;
10359       /* Fall through.  */
10360     case ARRAY_REF:
10361     case ARRAY_RANGE_REF:
10362     case MEMBER_REF:
10363     case DOTSTAR_EXPR:
10364     binary:
10365       for (i = 0; i < 2; ++i)
10366         if (!potential_constant_expression_1 (TREE_OPERAND (t, i),
10367                                               want_rval, flags))
10368           return false;
10369       return true;
10370
10371     case ARRAY_NOTATION_REF:
10372       return false;
10373
10374     case FMA_EXPR:
10375     case VEC_PERM_EXPR:
10376      for (i = 0; i < 3; ++i)
10377       if (!potential_constant_expression_1 (TREE_OPERAND (t, i),
10378                                             true, flags))
10379         return false;
10380      return true;
10381
10382     case COND_EXPR:
10383     case VEC_COND_EXPR:
10384       /* If the condition is a known constant, we know which of the legs we
10385          care about; otherwise we only require that the condition and
10386          either of the legs be potentially constant.  */
10387       tmp = TREE_OPERAND (t, 0);
10388       if (!potential_constant_expression_1 (tmp, rval, flags))
10389         return false;
10390       if (!processing_template_decl)
10391         tmp = cxx_eval_outermost_constant_expr (tmp, true);
10392       if (integer_zerop (tmp))
10393         return potential_constant_expression_1 (TREE_OPERAND (t, 2),
10394                                                 want_rval, flags);
10395       else if (TREE_CODE (tmp) == INTEGER_CST)
10396         return potential_constant_expression_1 (TREE_OPERAND (t, 1),
10397                                                 want_rval, flags);
10398       for (i = 1; i < 3; ++i)
10399         if (potential_constant_expression_1 (TREE_OPERAND (t, i),
10400                                              want_rval, tf_none))
10401           return true;
10402       if (flags & tf_error)
10403         error ("expression %qE is not a constant-expression", t);
10404       return false;
10405
10406     case VEC_INIT_EXPR:
10407       if (VEC_INIT_EXPR_IS_CONSTEXPR (t))
10408         return true;
10409       if (flags & tf_error)
10410         {
10411           error ("non-constant array initialization");
10412           diagnose_non_constexpr_vec_init (t);
10413         }
10414       return false;
10415
10416     default:
10417       if (objc_is_property_ref (t))
10418         return false;
10419
10420       sorry ("unexpected AST of kind %s", get_tree_code_name (TREE_CODE (t)));
10421       gcc_unreachable();
10422       return false;
10423     }
10424 }
10425
10426 /* The main entry point to the above.  */
10427
10428 bool
10429 potential_constant_expression (tree t)
10430 {
10431   return potential_constant_expression_1 (t, false, tf_none);
10432 }
10433
10434 /* As above, but require a constant rvalue.  */
10435
10436 bool
10437 potential_rvalue_constant_expression (tree t)
10438 {
10439   return potential_constant_expression_1 (t, true, tf_none);
10440 }
10441
10442 /* Like above, but complain about non-constant expressions.  */
10443
10444 bool
10445 require_potential_constant_expression (tree t)
10446 {
10447   return potential_constant_expression_1 (t, false, tf_warning_or_error);
10448 }
10449
10450 /* Cross product of the above.  */
10451
10452 bool
10453 require_potential_rvalue_constant_expression (tree t)
10454 {
10455   return potential_constant_expression_1 (t, true, tf_warning_or_error);
10456 }
10457 \f
10458 /* Insert the deduced return type for an auto function.  */
10459
10460 void
10461 apply_deduced_return_type (tree fco, tree return_type)
10462 {
10463   tree result;
10464
10465   if (return_type == error_mark_node)
10466     return;
10467
10468   if (LAMBDA_FUNCTION_P (fco))
10469     {
10470       tree lambda = CLASSTYPE_LAMBDA_EXPR (current_class_type);
10471       LAMBDA_EXPR_RETURN_TYPE (lambda) = return_type;
10472     }
10473
10474   if (DECL_CONV_FN_P (fco))
10475     DECL_NAME (fco) = mangle_conv_op_name_for_type (return_type);
10476
10477   TREE_TYPE (fco) = change_return_type (return_type, TREE_TYPE (fco));
10478
10479   result = DECL_RESULT (fco);
10480   if (result == NULL_TREE)
10481     return;
10482   if (TREE_TYPE (result) == return_type)
10483     return;
10484
10485   /* We already have a DECL_RESULT from start_preparsed_function.
10486      Now we need to redo the work it and allocate_struct_function
10487      did to reflect the new type.  */
10488   gcc_assert (current_function_decl == fco);
10489   result = build_decl (input_location, RESULT_DECL, NULL_TREE,
10490                        TYPE_MAIN_VARIANT (return_type));
10491   DECL_ARTIFICIAL (result) = 1;
10492   DECL_IGNORED_P (result) = 1;
10493   cp_apply_type_quals_to_decl (cp_type_quals (return_type),
10494                                result);
10495
10496   DECL_RESULT (fco) = result;
10497
10498   if (!processing_template_decl)
10499     {
10500       bool aggr = aggregate_value_p (result, fco);
10501 #ifdef PCC_STATIC_STRUCT_RETURN
10502       cfun->returns_pcc_struct = aggr;
10503 #endif
10504       cfun->returns_struct = aggr;
10505     }
10506
10507 }
10508
10509 /* DECL is a local variable or parameter from the surrounding scope of a
10510    lambda-expression.  Returns the decltype for a use of the capture field
10511    for DECL even if it hasn't been captured yet.  */
10512
10513 static tree
10514 capture_decltype (tree decl)
10515 {
10516   tree lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
10517   /* FIXME do lookup instead of list walk? */
10518   tree cap = value_member (decl, LAMBDA_EXPR_CAPTURE_LIST (lam));
10519   tree type;
10520
10521   if (cap)
10522     type = TREE_TYPE (TREE_PURPOSE (cap));
10523   else
10524     switch (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam))
10525       {
10526       case CPLD_NONE:
10527         error ("%qD is not captured", decl);
10528         return error_mark_node;
10529
10530       case CPLD_COPY:
10531         type = TREE_TYPE (decl);
10532         if (TREE_CODE (type) == REFERENCE_TYPE
10533             && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
10534           type = TREE_TYPE (type);
10535         break;
10536
10537       case CPLD_REFERENCE:
10538         type = TREE_TYPE (decl);
10539         if (TREE_CODE (type) != REFERENCE_TYPE)
10540           type = build_reference_type (TREE_TYPE (decl));
10541         break;
10542
10543       default:
10544         gcc_unreachable ();
10545       }
10546
10547   if (TREE_CODE (type) != REFERENCE_TYPE)
10548     {
10549       if (!LAMBDA_EXPR_MUTABLE_P (lam))
10550         type = cp_build_qualified_type (type, (cp_type_quals (type)
10551                                                |TYPE_QUAL_CONST));
10552       type = build_reference_type (type);
10553     }
10554   return type;
10555 }
10556
10557 #include "gt-cp-semantics.h"