OSDN Git Service

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