OSDN Git Service

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