OSDN Git Service

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