OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [cp/] [semantics.c] - Blame information for rev 433

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 283 jeremybenn
/* 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
static tree capture_decltype (tree);
59
static tree thisify_lambda_field (tree);
60
 
61
 
62
/* Deferred Access Checking Overview
63
   ---------------------------------
64
 
65
   Most C++ expressions and declarations require access checking
66
   to be performed during parsing.  However, in several cases,
67
   this has to be treated differently.
68
 
69
   For member declarations, access checking has to be deferred
70
   until more information about the declaration is known.  For
71
   example:
72
 
73
     class A {
74
         typedef int X;
75
       public:
76
         X f();
77
     };
78
 
79
     A::X A::f();
80
     A::X g();
81
 
82
   When we are parsing the function return type `A::X', we don't
83
   really know if this is allowed until we parse the function name.
84
 
85
   Furthermore, some contexts require that access checking is
86
   never performed at all.  These include class heads, and template
87
   instantiations.
88
 
89
   Typical use of access checking functions is described here:
90
 
91
   1. When we enter a context that requires certain access checking
92
      mode, the function `push_deferring_access_checks' is called with
93
      DEFERRING argument specifying the desired mode.  Access checking
94
      may be performed immediately (dk_no_deferred), deferred
95
      (dk_deferred), or not performed (dk_no_check).
96
 
97
   2. When a declaration such as a type, or a variable, is encountered,
98
      the function `perform_or_defer_access_check' is called.  It
99
      maintains a VEC of all deferred checks.
100
 
101
   3. The global `current_class_type' or `current_function_decl' is then
102
      setup by the parser.  `enforce_access' relies on these information
103
      to check access.
104
 
105
   4. Upon exiting the context mentioned in step 1,
106
      `perform_deferred_access_checks' is called to check all declaration
107
      stored in the VEC. `pop_deferring_access_checks' is then
108
      called to restore the previous access checking mode.
109
 
110
      In case of parsing error, we simply call `pop_deferring_access_checks'
111
      without `perform_deferred_access_checks'.  */
112
 
113
typedef struct GTY(()) deferred_access {
114
  /* A VEC representing name-lookups for which we have deferred
115
     checking access controls.  We cannot check the accessibility of
116
     names used in a decl-specifier-seq until we know what is being
117
     declared because code like:
118
 
119
       class A {
120
         class B {};
121
         B* f();
122
       }
123
 
124
       A::B* A::f() { return 0; }
125
 
126
     is valid, even though `A::B' is not generally accessible.  */
127
  VEC (deferred_access_check,gc)* GTY(()) deferred_access_checks;
128
 
129
  /* The current mode of access checks.  */
130
  enum deferring_kind deferring_access_checks_kind;
131
 
132
} deferred_access;
133
DEF_VEC_O (deferred_access);
134
DEF_VEC_ALLOC_O (deferred_access,gc);
135
 
136
/* Data for deferred access checking.  */
137
static GTY(()) VEC(deferred_access,gc) *deferred_access_stack;
138
static GTY(()) unsigned deferred_access_no_check;
139
 
140
/* Save the current deferred access states and start deferred
141
   access checking iff DEFER_P is true.  */
142
 
143
void
144
push_deferring_access_checks (deferring_kind deferring)
145
{
146
  /* For context like template instantiation, access checking
147
     disabling applies to all nested context.  */
148
  if (deferred_access_no_check || deferring == dk_no_check)
149
    deferred_access_no_check++;
150
  else
151
    {
152
      deferred_access *ptr;
153
 
154
      ptr = VEC_safe_push (deferred_access, gc, deferred_access_stack, NULL);
155
      ptr->deferred_access_checks = NULL;
156
      ptr->deferring_access_checks_kind = deferring;
157
    }
158
}
159
 
160
/* Resume deferring access checks again after we stopped doing
161
   this previously.  */
162
 
163
void
164
resume_deferring_access_checks (void)
165
{
166
  if (!deferred_access_no_check)
167
    VEC_last (deferred_access, deferred_access_stack)
168
      ->deferring_access_checks_kind = dk_deferred;
169
}
170
 
171
/* Stop deferring access checks.  */
172
 
173
void
174
stop_deferring_access_checks (void)
175
{
176
  if (!deferred_access_no_check)
177
    VEC_last (deferred_access, deferred_access_stack)
178
      ->deferring_access_checks_kind = dk_no_deferred;
179
}
180
 
181
/* Discard the current deferred access checks and restore the
182
   previous states.  */
183
 
184
void
185
pop_deferring_access_checks (void)
186
{
187
  if (deferred_access_no_check)
188
    deferred_access_no_check--;
189
  else
190
    VEC_pop (deferred_access, deferred_access_stack);
191
}
192
 
193
/* Returns a TREE_LIST representing the deferred checks.
194
   The TREE_PURPOSE of each node is the type through which the
195
   access occurred; the TREE_VALUE is the declaration named.
196
   */
197
 
198
VEC (deferred_access_check,gc)*
199
get_deferred_access_checks (void)
200
{
201
  if (deferred_access_no_check)
202
    return NULL;
203
  else
204
    return (VEC_last (deferred_access, deferred_access_stack)
205
            ->deferred_access_checks);
206
}
207
 
208
/* Take current deferred checks and combine with the
209
   previous states if we also defer checks previously.
210
   Otherwise perform checks now.  */
211
 
212
void
213
pop_to_parent_deferring_access_checks (void)
214
{
215
  if (deferred_access_no_check)
216
    deferred_access_no_check--;
217
  else
218
    {
219
      VEC (deferred_access_check,gc) *checks;
220
      deferred_access *ptr;
221
 
222
      checks = (VEC_last (deferred_access, deferred_access_stack)
223
                ->deferred_access_checks);
224
 
225
      VEC_pop (deferred_access, deferred_access_stack);
226
      ptr = VEC_last (deferred_access, deferred_access_stack);
227
      if (ptr->deferring_access_checks_kind == dk_no_deferred)
228
        {
229
          /* Check access.  */
230
          perform_access_checks (checks);
231
        }
232
      else
233
        {
234
          /* Merge with parent.  */
235
          int i, j;
236
          deferred_access_check *chk, *probe;
237
 
238
          for (i = 0 ;
239
               VEC_iterate (deferred_access_check, checks, i, chk) ;
240
               ++i)
241
            {
242
              for (j = 0 ;
243
                   VEC_iterate (deferred_access_check,
244
                                ptr->deferred_access_checks, j, probe) ;
245
                   ++j)
246
                {
247
                  if (probe->binfo == chk->binfo &&
248
                      probe->decl == chk->decl &&
249
                      probe->diag_decl == chk->diag_decl)
250
                    goto found;
251
                }
252
              /* Insert into parent's checks.  */
253
              VEC_safe_push (deferred_access_check, gc,
254
                             ptr->deferred_access_checks, chk);
255
            found:;
256
            }
257
        }
258
    }
259
}
260
 
261
/* Perform the access checks in CHECKS.  The TREE_PURPOSE of each node
262
   is the BINFO indicating the qualifying scope used to access the
263
   DECL node stored in the TREE_VALUE of the node.  */
264
 
265
void
266
perform_access_checks (VEC (deferred_access_check,gc)* checks)
267
{
268
  int i;
269
  deferred_access_check *chk;
270
 
271
  if (!checks)
272
    return;
273
 
274
  for (i = 0 ; VEC_iterate (deferred_access_check, checks, i, chk) ; ++i)
275
    enforce_access (chk->binfo, chk->decl, chk->diag_decl);
276
}
277
 
278
/* Perform the deferred access checks.
279
 
280
   After performing the checks, we still have to keep the list
281
   `deferred_access_stack->deferred_access_checks' since we may want
282
   to check access for them again later in a different context.
283
   For example:
284
 
285
     class A {
286
       typedef int X;
287
       static X a;
288
     };
289
     A::X A::a, x;      // No error for `A::a', error for `x'
290
 
291
   We have to perform deferred access of `A::X', first with `A::a',
292
   next with `x'.  */
293
 
294
void
295
perform_deferred_access_checks (void)
296
{
297
  perform_access_checks (get_deferred_access_checks ());
298
}
299
 
300
/* Defer checking the accessibility of DECL, when looked up in
301
   BINFO. DIAG_DECL is the declaration to use to print diagnostics.  */
302
 
303
void
304
perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl)
305
{
306
  int i;
307
  deferred_access *ptr;
308
  deferred_access_check *chk;
309
  deferred_access_check *new_access;
310
 
311
 
312
  /* Exit if we are in a context that no access checking is performed.
313
     */
314
  if (deferred_access_no_check)
315
    return;
316
 
317
  gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
318
 
319
  ptr = VEC_last (deferred_access, deferred_access_stack);
320
 
321
  /* If we are not supposed to defer access checks, just check now.  */
322
  if (ptr->deferring_access_checks_kind == dk_no_deferred)
323
    {
324
      enforce_access (binfo, decl, diag_decl);
325
      return;
326
    }
327
 
328
  /* See if we are already going to perform this check.  */
329
  for (i = 0 ;
330
       VEC_iterate (deferred_access_check,
331
                    ptr->deferred_access_checks, i, chk) ;
332
       ++i)
333
    {
334
      if (chk->decl == decl && chk->binfo == binfo &&
335
          chk->diag_decl == diag_decl)
336
        {
337
          return;
338
        }
339
    }
340
  /* If not, record the check.  */
341
  new_access =
342
    VEC_safe_push (deferred_access_check, gc,
343
                   ptr->deferred_access_checks, 0);
344
  new_access->binfo = binfo;
345
  new_access->decl = decl;
346
  new_access->diag_decl = diag_decl;
347
}
348
 
349
/* Returns nonzero if the current statement is a full expression,
350
   i.e. temporaries created during that statement should be destroyed
351
   at the end of the statement.  */
352
 
353
int
354
stmts_are_full_exprs_p (void)
355
{
356
  return current_stmt_tree ()->stmts_are_full_exprs_p;
357
}
358
 
359
/* T is a statement.  Add it to the statement-tree.  This is the C++
360
   version.  The C/ObjC frontends have a slightly different version of
361
   this function.  */
362
 
363
tree
364
add_stmt (tree t)
365
{
366
  enum tree_code code = TREE_CODE (t);
367
 
368
  if (EXPR_P (t) && code != LABEL_EXPR)
369
    {
370
      if (!EXPR_HAS_LOCATION (t))
371
        SET_EXPR_LOCATION (t, input_location);
372
 
373
      /* When we expand a statement-tree, we must know whether or not the
374
         statements are full-expressions.  We record that fact here.  */
375
      STMT_IS_FULL_EXPR_P (t) = stmts_are_full_exprs_p ();
376
    }
377
 
378
  /* Add T to the statement-tree.  Non-side-effect statements need to be
379
     recorded during statement expressions.  */
380
  append_to_statement_list_force (t, &cur_stmt_list);
381
 
382
  return t;
383
}
384
 
385
/* Returns the stmt_tree to which statements are currently being added.  */
386
 
387
stmt_tree
388
current_stmt_tree (void)
389
{
390
  return (cfun
391
          ? &cfun->language->base.x_stmt_tree
392
          : &scope_chain->x_stmt_tree);
393
}
394
 
395
/* If statements are full expressions, wrap STMT in a CLEANUP_POINT_EXPR.  */
396
 
397
static tree
398
maybe_cleanup_point_expr (tree expr)
399
{
400
  if (!processing_template_decl && stmts_are_full_exprs_p ())
401
    expr = fold_build_cleanup_point_expr (TREE_TYPE (expr), expr);
402
  return expr;
403
}
404
 
405
/* Like maybe_cleanup_point_expr except have the type of the new expression be
406
   void so we don't need to create a temporary variable to hold the inner
407
   expression.  The reason why we do this is because the original type might be
408
   an aggregate and we cannot create a temporary variable for that type.  */
409
 
410
static tree
411
maybe_cleanup_point_expr_void (tree expr)
412
{
413
  if (!processing_template_decl && stmts_are_full_exprs_p ())
414
    expr = fold_build_cleanup_point_expr (void_type_node, expr);
415
  return expr;
416
}
417
 
418
 
419
 
420
/* Create a declaration statement for the declaration given by the DECL.  */
421
 
422
void
423
add_decl_expr (tree decl)
424
{
425
  tree r = build_stmt (input_location, DECL_EXPR, decl);
426
  if (DECL_INITIAL (decl)
427
      || (DECL_SIZE (decl) && TREE_SIDE_EFFECTS (DECL_SIZE (decl))))
428
    r = maybe_cleanup_point_expr_void (r);
429
  add_stmt (r);
430
}
431
 
432
/* Finish a scope.  */
433
 
434
tree
435
do_poplevel (tree stmt_list)
436
{
437
  tree block = NULL;
438
 
439
  if (stmts_are_full_exprs_p ())
440
    block = poplevel (kept_level_p (), 1, 0);
441
 
442
  stmt_list = pop_stmt_list (stmt_list);
443
 
444
  if (!processing_template_decl)
445
    {
446
      stmt_list = c_build_bind_expr (input_location, block, stmt_list);
447
      /* ??? See c_end_compound_stmt re statement expressions.  */
448
    }
449
 
450
  return stmt_list;
451
}
452
 
453
/* Begin a new scope.  */
454
 
455
static tree
456
do_pushlevel (scope_kind sk)
457
{
458
  tree ret = push_stmt_list ();
459
  if (stmts_are_full_exprs_p ())
460
    begin_scope (sk, NULL);
461
  return ret;
462
}
463
 
464
/* Queue a cleanup.  CLEANUP is an expression/statement to be executed
465
   when the current scope is exited.  EH_ONLY is true when this is not
466
   meant to apply to normal control flow transfer.  */
467
 
468
void
469
push_cleanup (tree decl, tree cleanup, bool eh_only)
470
{
471
  tree stmt = build_stmt (input_location, CLEANUP_STMT, NULL, cleanup, decl);
472
  CLEANUP_EH_ONLY (stmt) = eh_only;
473
  add_stmt (stmt);
474
  CLEANUP_BODY (stmt) = push_stmt_list ();
475
}
476
 
477
/* Begin a conditional that might contain a declaration.  When generating
478
   normal code, we want the declaration to appear before the statement
479
   containing the conditional.  When generating template code, we want the
480
   conditional to be rendered as the raw DECL_EXPR.  */
481
 
482
static void
483
begin_cond (tree *cond_p)
484
{
485
  if (processing_template_decl)
486
    *cond_p = push_stmt_list ();
487
}
488
 
489
/* Finish such a conditional.  */
490
 
491
static void
492
finish_cond (tree *cond_p, tree expr)
493
{
494
  if (processing_template_decl)
495
    {
496
      tree cond = pop_stmt_list (*cond_p);
497
      if (TREE_CODE (cond) == DECL_EXPR)
498
        expr = cond;
499
 
500
      if (check_for_bare_parameter_packs (expr))
501
        *cond_p = error_mark_node;
502
    }
503
  *cond_p = expr;
504
}
505
 
506
/* If *COND_P specifies a conditional with a declaration, transform the
507
   loop such that
508
            while (A x = 42) { }
509
            for (; A x = 42;) { }
510
   becomes
511
            while (true) { A x = 42; if (!x) break; }
512
            for (;;) { A x = 42; if (!x) break; }
513
   The statement list for BODY will be empty if the conditional did
514
   not declare anything.  */
515
 
516
static void
517
simplify_loop_decl_cond (tree *cond_p, tree body)
518
{
519
  tree cond, if_stmt;
520
 
521
  if (!TREE_SIDE_EFFECTS (body))
522
    return;
523
 
524
  cond = *cond_p;
525
  *cond_p = boolean_true_node;
526
 
527
  if_stmt = begin_if_stmt ();
528
  cond = cp_build_unary_op (TRUTH_NOT_EXPR, cond, 0, tf_warning_or_error);
529
  finish_if_stmt_cond (cond, if_stmt);
530
  finish_break_stmt ();
531
  finish_then_clause (if_stmt);
532
  finish_if_stmt (if_stmt);
533
}
534
 
535
/* Finish a goto-statement.  */
536
 
537
tree
538
finish_goto_stmt (tree destination)
539
{
540
  if (TREE_CODE (destination) == IDENTIFIER_NODE)
541
    destination = lookup_label (destination);
542
 
543
  /* We warn about unused labels with -Wunused.  That means we have to
544
     mark the used labels as used.  */
545
  if (TREE_CODE (destination) == LABEL_DECL)
546
    TREE_USED (destination) = 1;
547
  else
548
    {
549
      if (!processing_template_decl)
550
        {
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 (input_location, 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 (input_location, 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 (input_location, 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 (input_location, 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 (input_location, 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 (input_location, 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 (input_location, 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 (input_location, BREAK_STMT));
912
}
913
 
914
/* Finish a continue-statement.  */
915
 
916
tree
917
finish_continue_stmt (void)
918
{
919
  return add_stmt (build_stmt (input_location, 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 (input_location, 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 (input_location, 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 (input_location, 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, some CLOBBERS and some
1204
   LABELS.  Also note whether the asm-statement should be
1205
   considered volatile.  */
1206
 
1207
tree
1208
finish_asm_stmt (int volatile_p, tree string, tree output_operands,
1209
                 tree input_operands, tree clobbers, tree labels)
1210
{
1211
  tree r;
1212
  tree t;
1213
  int ninputs = list_length (input_operands);
1214
  int noutputs = list_length (output_operands);
1215
 
1216
  if (!processing_template_decl)
1217
    {
1218
      const char *constraint;
1219
      const char **oconstraints;
1220
      bool allows_mem, allows_reg, is_inout;
1221
      tree operand;
1222
      int i;
1223
 
1224
      oconstraints = (const char **) alloca (noutputs * sizeof (char *));
1225
 
1226
      string = resolve_asm_operand_names (string, output_operands,
1227
                                          input_operands, labels);
1228
 
1229
      for (i = 0, t = output_operands; t; t = TREE_CHAIN (t), ++i)
1230
        {
1231
          operand = TREE_VALUE (t);
1232
 
1233
          /* ??? Really, this should not be here.  Users should be using a
1234
             proper lvalue, dammit.  But there's a long history of using
1235
             casts in the output operands.  In cases like longlong.h, this
1236
             becomes a primitive form of typechecking -- if the cast can be
1237
             removed, then the output operand had a type of the proper width;
1238
             otherwise we'll get an error.  Gross, but ...  */
1239
          STRIP_NOPS (operand);
1240
 
1241
          if (!lvalue_or_else (operand, lv_asm, tf_warning_or_error))
1242
            operand = error_mark_node;
1243
 
1244
          if (operand != error_mark_node
1245
              && (TREE_READONLY (operand)
1246
                  || CP_TYPE_CONST_P (TREE_TYPE (operand))
1247
                  /* Functions are not modifiable, even though they are
1248
                     lvalues.  */
1249
                  || TREE_CODE (TREE_TYPE (operand)) == FUNCTION_TYPE
1250
                  || TREE_CODE (TREE_TYPE (operand)) == METHOD_TYPE
1251
                  /* If it's an aggregate and any field is const, then it is
1252
                     effectively const.  */
1253
                  || (CLASS_TYPE_P (TREE_TYPE (operand))
1254
                      && C_TYPE_FIELDS_READONLY (TREE_TYPE (operand)))))
1255
            readonly_error (operand, REK_ASSIGNMENT_ASM);
1256
 
1257
          constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1258
          oconstraints[i] = constraint;
1259
 
1260
          if (parse_output_constraint (&constraint, i, ninputs, noutputs,
1261
                                       &allows_mem, &allows_reg, &is_inout))
1262
            {
1263
              /* If the operand is going to end up in memory,
1264
                 mark it addressable.  */
1265
              if (!allows_reg && !cxx_mark_addressable (operand))
1266
                operand = error_mark_node;
1267
            }
1268
          else
1269
            operand = error_mark_node;
1270
 
1271
          TREE_VALUE (t) = operand;
1272
        }
1273
 
1274
      for (i = 0, t = input_operands; t; ++i, t = TREE_CHAIN (t))
1275
        {
1276
          constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1277
          operand = decay_conversion (TREE_VALUE (t));
1278
 
1279
          /* If the type of the operand hasn't been determined (e.g.,
1280
             because it involves an overloaded function), then issue
1281
             an error message.  There's no context available to
1282
             resolve the overloading.  */
1283
          if (TREE_TYPE (operand) == unknown_type_node)
1284
            {
1285
              error ("type of asm operand %qE could not be determined",
1286
                     TREE_VALUE (t));
1287
              operand = error_mark_node;
1288
            }
1289
 
1290
          if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
1291
                                      oconstraints, &allows_mem, &allows_reg))
1292
            {
1293
              /* If the operand is going to end up in memory,
1294
                 mark it addressable.  */
1295
              if (!allows_reg && allows_mem)
1296
                {
1297
                  /* Strip the nops as we allow this case.  FIXME, this really
1298
                     should be rejected or made deprecated.  */
1299
                  STRIP_NOPS (operand);
1300
                  if (!cxx_mark_addressable (operand))
1301
                    operand = error_mark_node;
1302
                }
1303
            }
1304
          else
1305
            operand = error_mark_node;
1306
 
1307
          TREE_VALUE (t) = operand;
1308
        }
1309
    }
1310
 
1311
  r = build_stmt (input_location, ASM_EXPR, string,
1312
                  output_operands, input_operands,
1313
                  clobbers, labels);
1314
  ASM_VOLATILE_P (r) = volatile_p || noutputs == 0;
1315
  r = maybe_cleanup_point_expr_void (r);
1316
  return add_stmt (r);
1317
}
1318
 
1319
/* Finish a label with the indicated NAME.  Returns the new label.  */
1320
 
1321
tree
1322
finish_label_stmt (tree name)
1323
{
1324
  tree decl = define_label (input_location, name);
1325
 
1326
  if (decl == error_mark_node)
1327
    return error_mark_node;
1328
 
1329
  add_stmt (build_stmt (input_location, LABEL_EXPR, decl));
1330
 
1331
  return decl;
1332
}
1333
 
1334
/* Finish a series of declarations for local labels.  G++ allows users
1335
   to declare "local" labels, i.e., labels with scope.  This extension
1336
   is useful when writing code involving statement-expressions.  */
1337
 
1338
void
1339
finish_label_decl (tree name)
1340
{
1341
  if (!at_function_scope_p ())
1342
    {
1343
      error ("__label__ declarations are only allowed in function scopes");
1344
      return;
1345
    }
1346
 
1347
  add_decl_expr (declare_local_label (name));
1348
}
1349
 
1350
/* When DECL goes out of scope, make sure that CLEANUP is executed.  */
1351
 
1352
void
1353
finish_decl_cleanup (tree decl, tree cleanup)
1354
{
1355
  push_cleanup (decl, cleanup, false);
1356
}
1357
 
1358
/* If the current scope exits with an exception, run CLEANUP.  */
1359
 
1360
void
1361
finish_eh_cleanup (tree cleanup)
1362
{
1363
  push_cleanup (NULL, cleanup, true);
1364
}
1365
 
1366
/* The MEM_INITS is a list of mem-initializers, in reverse of the
1367
   order they were written by the user.  Each node is as for
1368
   emit_mem_initializers.  */
1369
 
1370
void
1371
finish_mem_initializers (tree mem_inits)
1372
{
1373
  /* Reorder the MEM_INITS so that they are in the order they appeared
1374
     in the source program.  */
1375
  mem_inits = nreverse (mem_inits);
1376
 
1377
  if (processing_template_decl)
1378
    {
1379
      tree mem;
1380
 
1381
      for (mem = mem_inits; mem; mem = TREE_CHAIN (mem))
1382
        {
1383
          /* If the TREE_PURPOSE is a TYPE_PACK_EXPANSION, skip the
1384
             check for bare parameter packs in the TREE_VALUE, because
1385
             any parameter packs in the TREE_VALUE have already been
1386
             bound as part of the TREE_PURPOSE.  See
1387
             make_pack_expansion for more information.  */
1388
          if (TREE_CODE (TREE_PURPOSE (mem)) != TYPE_PACK_EXPANSION
1389
              && check_for_bare_parameter_packs (TREE_VALUE (mem)))
1390
            TREE_VALUE (mem) = error_mark_node;
1391
        }
1392
 
1393
      add_stmt (build_min_nt (CTOR_INITIALIZER, mem_inits));
1394
    }
1395
  else
1396
    emit_mem_initializers (mem_inits);
1397
}
1398
 
1399
/* Finish a parenthesized expression EXPR.  */
1400
 
1401
tree
1402
finish_parenthesized_expr (tree expr)
1403
{
1404
  if (EXPR_P (expr))
1405
    /* This inhibits warnings in c_common_truthvalue_conversion.  */
1406
    TREE_NO_WARNING (expr) = 1;
1407
 
1408
  if (TREE_CODE (expr) == OFFSET_REF)
1409
    /* [expr.unary.op]/3 The qualified id of a pointer-to-member must not be
1410
       enclosed in parentheses.  */
1411
    PTRMEM_OK_P (expr) = 0;
1412
 
1413
  if (TREE_CODE (expr) == STRING_CST)
1414
    PAREN_STRING_LITERAL_P (expr) = 1;
1415
 
1416
  return expr;
1417
}
1418
 
1419
/* Finish a reference to a non-static data member (DECL) that is not
1420
   preceded by `.' or `->'.  */
1421
 
1422
tree
1423
finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
1424
{
1425
  gcc_assert (TREE_CODE (decl) == FIELD_DECL);
1426
 
1427
  if (!object && cp_unevaluated_operand != 0)
1428
    {
1429
      /* DR 613: Can use non-static data members without an associated
1430
         object in sizeof/decltype/alignof.  */
1431
      tree scope = qualifying_scope;
1432
      if (scope == NULL_TREE)
1433
        scope = context_for_name_lookup (decl);
1434
      object = maybe_dummy_object (scope, NULL);
1435
    }
1436
 
1437
  if (!object)
1438
    {
1439
      if (current_function_decl
1440
          && DECL_STATIC_FUNCTION_P (current_function_decl))
1441
        error ("invalid use of member %q+D in static member function", decl);
1442
      else
1443
        error ("invalid use of non-static data member %q+D", decl);
1444
      error ("from this location");
1445
 
1446
      return error_mark_node;
1447
    }
1448
 
1449
  /* If decl is a non-capture field and object has a lambda type,
1450
     then we have a reference to a member of 'this' from a
1451
     lambda inside a non-static member function, and we must get to decl
1452
     through the 'this' capture.  If decl is not a member of that object,
1453
     either, then its access will still fail later.  */
1454
  if (LAMBDA_TYPE_P (TREE_TYPE (object))
1455
      && !LAMBDA_TYPE_P (DECL_CONTEXT (decl)))
1456
    object = cp_build_indirect_ref (lambda_expr_this_capture
1457
                                    (CLASSTYPE_LAMBDA_EXPR
1458
                                     (TREE_TYPE (object))),
1459
                                    RO_NULL,
1460
                                    /*complain=*/tf_warning_or_error);
1461
 
1462
  if (current_class_ptr)
1463
    TREE_USED (current_class_ptr) = 1;
1464
  if (processing_template_decl && !qualifying_scope)
1465
    {
1466
      tree type = TREE_TYPE (decl);
1467
 
1468
      if (TREE_CODE (type) == REFERENCE_TYPE)
1469
        type = TREE_TYPE (type);
1470
      else
1471
        {
1472
          /* Set the cv qualifiers.  */
1473
          int quals = (current_class_ref
1474
                       ? cp_type_quals (TREE_TYPE (current_class_ref))
1475
                       : TYPE_UNQUALIFIED);
1476
 
1477
          if (DECL_MUTABLE_P (decl))
1478
            quals &= ~TYPE_QUAL_CONST;
1479
 
1480
          quals |= cp_type_quals (TREE_TYPE (decl));
1481
          type = cp_build_qualified_type (type, quals);
1482
        }
1483
 
1484
      return build_min (COMPONENT_REF, type, object, decl, NULL_TREE);
1485
    }
1486
  /* If PROCESSING_TEMPLATE_DECL is nonzero here, then
1487
     QUALIFYING_SCOPE is also non-null.  Wrap this in a SCOPE_REF
1488
     for now.  */
1489
  else if (processing_template_decl)
1490
    return build_qualified_name (TREE_TYPE (decl),
1491
                                 qualifying_scope,
1492
                                 DECL_NAME (decl),
1493
                                 /*template_p=*/false);
1494
  else
1495
    {
1496
      tree access_type = TREE_TYPE (object);
1497
      tree lookup_context = context_for_name_lookup (decl);
1498
 
1499
      while (!DERIVED_FROM_P (lookup_context, access_type))
1500
        {
1501
          access_type = TYPE_CONTEXT (access_type);
1502
          while (access_type && DECL_P (access_type))
1503
            access_type = DECL_CONTEXT (access_type);
1504
 
1505
          if (!access_type)
1506
            {
1507
              error ("object missing in reference to %q+D", decl);
1508
              error ("from this location");
1509
              return error_mark_node;
1510
            }
1511
        }
1512
 
1513
      perform_or_defer_access_check (TYPE_BINFO (access_type), decl,
1514
                                     decl);
1515
 
1516
      /* If the data member was named `C::M', convert `*this' to `C'
1517
         first.  */
1518
      if (qualifying_scope)
1519
        {
1520
          tree binfo = NULL_TREE;
1521
          object = build_scoped_ref (object, qualifying_scope,
1522
                                     &binfo);
1523
        }
1524
 
1525
      return build_class_member_access_expr (object, decl,
1526
                                             /*access_path=*/NULL_TREE,
1527
                                             /*preserve_reference=*/false,
1528
                                             tf_warning_or_error);
1529
    }
1530
}
1531
 
1532
/* If we are currently parsing a template and we encountered a typedef
1533
   TYPEDEF_DECL that is being accessed though CONTEXT, this function
1534
   adds the typedef to a list tied to the current template.
1535
   At tempate instantiatin time, that list is walked and access check
1536
   performed for each typedef.
1537
   LOCATION is the location of the usage point of TYPEDEF_DECL.  */
1538
 
1539
void
1540
add_typedef_to_current_template_for_access_check (tree typedef_decl,
1541
                                                  tree context,
1542
                                                  location_t location)
1543
{
1544
    tree template_info = NULL;
1545
    tree cs = current_scope ();
1546
 
1547
    if (!is_typedef_decl (typedef_decl)
1548
        || !context
1549
        || !CLASS_TYPE_P (context)
1550
        || !cs)
1551
      return;
1552
 
1553
    if (CLASS_TYPE_P (cs) || TREE_CODE (cs) == FUNCTION_DECL)
1554
      template_info = get_template_info (cs);
1555
 
1556
    if (template_info
1557
        && TI_TEMPLATE (template_info)
1558
        && !currently_open_class (context))
1559
      append_type_to_template_for_access_check (cs, typedef_decl,
1560
                                                context, location);
1561
}
1562
 
1563
/* DECL was the declaration to which a qualified-id resolved.  Issue
1564
   an error message if it is not accessible.  If OBJECT_TYPE is
1565
   non-NULL, we have just seen `x->' or `x.' and OBJECT_TYPE is the
1566
   type of `*x', or `x', respectively.  If the DECL was named as
1567
   `A::B' then NESTED_NAME_SPECIFIER is `A'.  */
1568
 
1569
void
1570
check_accessibility_of_qualified_id (tree decl,
1571
                                     tree object_type,
1572
                                     tree nested_name_specifier)
1573
{
1574
  tree scope;
1575
  tree qualifying_type = NULL_TREE;
1576
 
1577
  /* If we are parsing a template declaration and if decl is a typedef,
1578
     add it to a list tied to the template.
1579
     At template instantiation time, that list will be walked and
1580
     access check performed.  */
1581
  add_typedef_to_current_template_for_access_check (decl,
1582
                                                    nested_name_specifier
1583
                                                    ? nested_name_specifier
1584
                                                    : DECL_CONTEXT (decl),
1585
                                                    input_location);
1586
 
1587
  /* If we're not checking, return immediately.  */
1588
  if (deferred_access_no_check)
1589
    return;
1590
 
1591
  /* Determine the SCOPE of DECL.  */
1592
  scope = context_for_name_lookup (decl);
1593
  /* If the SCOPE is not a type, then DECL is not a member.  */
1594
  if (!TYPE_P (scope))
1595
    return;
1596
  /* Compute the scope through which DECL is being accessed.  */
1597
  if (object_type
1598
      /* OBJECT_TYPE might not be a class type; consider:
1599
 
1600
           class A { typedef int I; };
1601
           I *p;
1602
           p->A::I::~I();
1603
 
1604
         In this case, we will have "A::I" as the DECL, but "I" as the
1605
         OBJECT_TYPE.  */
1606
      && CLASS_TYPE_P (object_type)
1607
      && DERIVED_FROM_P (scope, object_type))
1608
    /* If we are processing a `->' or `.' expression, use the type of the
1609
       left-hand side.  */
1610
    qualifying_type = object_type;
1611
  else if (nested_name_specifier)
1612
    {
1613
      /* If the reference is to a non-static member of the
1614
         current class, treat it as if it were referenced through
1615
         `this'.  */
1616
      if (DECL_NONSTATIC_MEMBER_P (decl)
1617
          && current_class_ptr
1618
          && DERIVED_FROM_P (scope, current_class_type))
1619
        qualifying_type = current_class_type;
1620
      /* Otherwise, use the type indicated by the
1621
         nested-name-specifier.  */
1622
      else
1623
        qualifying_type = nested_name_specifier;
1624
    }
1625
  else
1626
    /* Otherwise, the name must be from the current class or one of
1627
       its bases.  */
1628
    qualifying_type = currently_open_derived_class (scope);
1629
 
1630
  if (qualifying_type
1631
      /* It is possible for qualifying type to be a TEMPLATE_TYPE_PARM
1632
         or similar in a default argument value.  */
1633
      && CLASS_TYPE_P (qualifying_type)
1634
      && !dependent_type_p (qualifying_type))
1635
    perform_or_defer_access_check (TYPE_BINFO (qualifying_type), decl,
1636
                                   decl);
1637
}
1638
 
1639
/* EXPR is the result of a qualified-id.  The QUALIFYING_CLASS was the
1640
   class named to the left of the "::" operator.  DONE is true if this
1641
   expression is a complete postfix-expression; it is false if this
1642
   expression is followed by '->', '[', '(', etc.  ADDRESS_P is true
1643
   iff this expression is the operand of '&'.  TEMPLATE_P is true iff
1644
   the qualified-id was of the form "A::template B".  TEMPLATE_ARG_P
1645
   is true iff this qualified name appears as a template argument.  */
1646
 
1647
tree
1648
finish_qualified_id_expr (tree qualifying_class,
1649
                          tree expr,
1650
                          bool done,
1651
                          bool address_p,
1652
                          bool template_p,
1653
                          bool template_arg_p)
1654
{
1655
  gcc_assert (TYPE_P (qualifying_class));
1656
 
1657
  if (error_operand_p (expr))
1658
    return error_mark_node;
1659
 
1660
  if (DECL_P (expr) || BASELINK_P (expr))
1661
    mark_used (expr);
1662
 
1663
  if (template_p)
1664
    check_template_keyword (expr);
1665
 
1666
  /* If EXPR occurs as the operand of '&', use special handling that
1667
     permits a pointer-to-member.  */
1668
  if (address_p && done)
1669
    {
1670
      if (TREE_CODE (expr) == SCOPE_REF)
1671
        expr = TREE_OPERAND (expr, 1);
1672
      expr = build_offset_ref (qualifying_class, expr,
1673
                               /*address_p=*/true);
1674
      return expr;
1675
    }
1676
 
1677
  /* Within the scope of a class, turn references to non-static
1678
     members into expression of the form "this->...".  */
1679
  if (template_arg_p)
1680
    /* But, within a template argument, we do not want make the
1681
       transformation, as there is no "this" pointer.  */
1682
    ;
1683
  else if (TREE_CODE (expr) == FIELD_DECL)
1684
    {
1685
      push_deferring_access_checks (dk_no_check);
1686
      expr = finish_non_static_data_member (expr, current_class_ref,
1687
                                            qualifying_class);
1688
      pop_deferring_access_checks ();
1689
    }
1690
  else if (BASELINK_P (expr) && !processing_template_decl)
1691
    {
1692
      tree fns;
1693
 
1694
      /* See if any of the functions are non-static members.  */
1695
      fns = BASELINK_FUNCTIONS (expr);
1696
      if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
1697
        fns = TREE_OPERAND (fns, 0);
1698
      /* If so, the expression may be relative to 'this'.  */
1699
      if (!shared_member_p (fns)
1700
          && current_class_ref
1701
          && DERIVED_FROM_P (qualifying_class, TREE_TYPE (current_class_ref)))
1702
        expr = (build_class_member_access_expr
1703
                (maybe_dummy_object (qualifying_class, NULL),
1704
                 expr,
1705
                 BASELINK_ACCESS_BINFO (expr),
1706
                 /*preserve_reference=*/false,
1707
                 tf_warning_or_error));
1708
      else if (done)
1709
        /* The expression is a qualified name whose address is not
1710
           being taken.  */
1711
        expr = build_offset_ref (qualifying_class, expr, /*address_p=*/false);
1712
    }
1713
 
1714
  return expr;
1715
}
1716
 
1717
/* Begin a statement-expression.  The value returned must be passed to
1718
   finish_stmt_expr.  */
1719
 
1720
tree
1721
begin_stmt_expr (void)
1722
{
1723
  return push_stmt_list ();
1724
}
1725
 
1726
/* Process the final expression of a statement expression. EXPR can be
1727
   NULL, if the final expression is empty.  Return a STATEMENT_LIST
1728
   containing all the statements in the statement-expression, or
1729
   ERROR_MARK_NODE if there was an error.  */
1730
 
1731
tree
1732
finish_stmt_expr_expr (tree expr, tree stmt_expr)
1733
{
1734
  if (error_operand_p (expr))
1735
    {
1736
      /* The type of the statement-expression is the type of the last
1737
         expression.  */
1738
      TREE_TYPE (stmt_expr) = error_mark_node;
1739
      return error_mark_node;
1740
    }
1741
 
1742
  /* If the last statement does not have "void" type, then the value
1743
     of the last statement is the value of the entire expression.  */
1744
  if (expr)
1745
    {
1746
      tree type = TREE_TYPE (expr);
1747
 
1748
      if (processing_template_decl)
1749
        {
1750
          expr = build_stmt (input_location, EXPR_STMT, expr);
1751
          expr = add_stmt (expr);
1752
          /* Mark the last statement so that we can recognize it as such at
1753
             template-instantiation time.  */
1754
          EXPR_STMT_STMT_EXPR_RESULT (expr) = 1;
1755
        }
1756
      else if (VOID_TYPE_P (type))
1757
        {
1758
          /* Just treat this like an ordinary statement.  */
1759
          expr = finish_expr_stmt (expr);
1760
        }
1761
      else
1762
        {
1763
          /* It actually has a value we need to deal with.  First, force it
1764
             to be an rvalue so that we won't need to build up a copy
1765
             constructor call later when we try to assign it to something.  */
1766
          expr = force_rvalue (expr);
1767
          if (error_operand_p (expr))
1768
            return error_mark_node;
1769
 
1770
          /* Update for array-to-pointer decay.  */
1771
          type = TREE_TYPE (expr);
1772
 
1773
          /* Wrap it in a CLEANUP_POINT_EXPR and add it to the list like a
1774
             normal statement, but don't convert to void or actually add
1775
             the EXPR_STMT.  */
1776
          if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
1777
            expr = maybe_cleanup_point_expr (expr);
1778
          add_stmt (expr);
1779
        }
1780
 
1781
      /* The type of the statement-expression is the type of the last
1782
         expression.  */
1783
      TREE_TYPE (stmt_expr) = type;
1784
    }
1785
 
1786
  return stmt_expr;
1787
}
1788
 
1789
/* Finish a statement-expression.  EXPR should be the value returned
1790
   by the previous begin_stmt_expr.  Returns an expression
1791
   representing the statement-expression.  */
1792
 
1793
tree
1794
finish_stmt_expr (tree stmt_expr, bool has_no_scope)
1795
{
1796
  tree type;
1797
  tree result;
1798
 
1799
  if (error_operand_p (stmt_expr))
1800
    {
1801
      pop_stmt_list (stmt_expr);
1802
      return error_mark_node;
1803
    }
1804
 
1805
  gcc_assert (TREE_CODE (stmt_expr) == STATEMENT_LIST);
1806
 
1807
  type = TREE_TYPE (stmt_expr);
1808
  result = pop_stmt_list (stmt_expr);
1809
  TREE_TYPE (result) = type;
1810
 
1811
  if (processing_template_decl)
1812
    {
1813
      result = build_min (STMT_EXPR, type, result);
1814
      TREE_SIDE_EFFECTS (result) = 1;
1815
      STMT_EXPR_NO_SCOPE (result) = has_no_scope;
1816
    }
1817
  else if (CLASS_TYPE_P (type))
1818
    {
1819
      /* Wrap the statement-expression in a TARGET_EXPR so that the
1820
         temporary object created by the final expression is destroyed at
1821
         the end of the full-expression containing the
1822
         statement-expression.  */
1823
      result = force_target_expr (type, result);
1824
    }
1825
 
1826
  return result;
1827
}
1828
 
1829
/* Returns the expression which provides the value of STMT_EXPR.  */
1830
 
1831
tree
1832
stmt_expr_value_expr (tree stmt_expr)
1833
{
1834
  tree t = STMT_EXPR_STMT (stmt_expr);
1835
 
1836
  if (TREE_CODE (t) == BIND_EXPR)
1837
    t = BIND_EXPR_BODY (t);
1838
 
1839
  if (TREE_CODE (t) == STATEMENT_LIST && STATEMENT_LIST_TAIL (t))
1840
    t = STATEMENT_LIST_TAIL (t)->stmt;
1841
 
1842
  if (TREE_CODE (t) == EXPR_STMT)
1843
    t = EXPR_STMT_EXPR (t);
1844
 
1845
  return t;
1846
}
1847
 
1848
/* Return TRUE iff EXPR_STMT is an empty list of
1849
   expression statements.  */
1850
 
1851
bool
1852
empty_expr_stmt_p (tree expr_stmt)
1853
{
1854
  tree body = NULL_TREE;
1855
 
1856
  if (expr_stmt == void_zero_node)
1857
    return true;
1858
 
1859
  if (expr_stmt)
1860
    {
1861
      if (TREE_CODE (expr_stmt) == EXPR_STMT)
1862
        body = EXPR_STMT_EXPR (expr_stmt);
1863
      else if (TREE_CODE (expr_stmt) == STATEMENT_LIST)
1864
        body = expr_stmt;
1865
    }
1866
 
1867
  if (body)
1868
    {
1869
      if (TREE_CODE (body) == STATEMENT_LIST)
1870
        return tsi_end_p (tsi_start (body));
1871
      else
1872
        return empty_expr_stmt_p (body);
1873
    }
1874
  return false;
1875
}
1876
 
1877
/* Perform Koenig lookup.  FN is the postfix-expression representing
1878
   the function (or functions) to call; ARGS are the arguments to the
1879
   call.  Returns the functions to be considered by overload
1880
   resolution.  */
1881
 
1882
tree
1883
perform_koenig_lookup (tree fn, VEC(tree,gc) *args)
1884
{
1885
  tree identifier = NULL_TREE;
1886
  tree functions = NULL_TREE;
1887
  tree tmpl_args = NULL_TREE;
1888
  bool template_id = false;
1889
 
1890
  if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
1891
    {
1892
      /* Use a separate flag to handle null args.  */
1893
      template_id = true;
1894
      tmpl_args = TREE_OPERAND (fn, 1);
1895
      fn = TREE_OPERAND (fn, 0);
1896
    }
1897
 
1898
  /* Find the name of the overloaded function.  */
1899
  if (TREE_CODE (fn) == IDENTIFIER_NODE)
1900
    identifier = fn;
1901
  else if (is_overloaded_fn (fn))
1902
    {
1903
      functions = fn;
1904
      identifier = DECL_NAME (get_first_fn (functions));
1905
    }
1906
  else if (DECL_P (fn))
1907
    {
1908
      functions = fn;
1909
      identifier = DECL_NAME (fn);
1910
    }
1911
 
1912
  /* A call to a namespace-scope function using an unqualified name.
1913
 
1914
     Do Koenig lookup -- unless any of the arguments are
1915
     type-dependent.  */
1916
  if (!any_type_dependent_arguments_p (args)
1917
      && !any_dependent_template_arguments_p (tmpl_args))
1918
    {
1919
      fn = lookup_arg_dependent (identifier, functions, args);
1920
      if (!fn)
1921
        /* The unqualified name could not be resolved.  */
1922
        fn = unqualified_fn_lookup_error (identifier);
1923
    }
1924
 
1925
  if (fn && template_id)
1926
    fn = build2 (TEMPLATE_ID_EXPR, unknown_type_node, fn, tmpl_args);
1927
 
1928
  return fn;
1929
}
1930
 
1931
/* Generate an expression for `FN (ARGS)'.  This may change the
1932
   contents of ARGS.
1933
 
1934
   If DISALLOW_VIRTUAL is true, the call to FN will be not generated
1935
   as a virtual call, even if FN is virtual.  (This flag is set when
1936
   encountering an expression where the function name is explicitly
1937
   qualified.  For example a call to `X::f' never generates a virtual
1938
   call.)
1939
 
1940
   Returns code for the call.  */
1941
 
1942
tree
1943
finish_call_expr (tree fn, VEC(tree,gc) **args, bool disallow_virtual,
1944
                  bool koenig_p, tsubst_flags_t complain)
1945
{
1946
  tree result;
1947
  tree orig_fn;
1948
  VEC(tree,gc) *orig_args = NULL;
1949
 
1950
  if (fn == error_mark_node)
1951
    return error_mark_node;
1952
 
1953
  gcc_assert (!TYPE_P (fn));
1954
 
1955
  orig_fn = fn;
1956
 
1957
  if (processing_template_decl)
1958
    {
1959
      if (type_dependent_expression_p (fn)
1960
          || any_type_dependent_arguments_p (*args))
1961
        {
1962
          result = build_nt_call_vec (fn, *args);
1963
          KOENIG_LOOKUP_P (result) = koenig_p;
1964
          if (cfun)
1965
            {
1966
              do
1967
                {
1968
                  tree fndecl = OVL_CURRENT (fn);
1969
                  if (TREE_CODE (fndecl) != FUNCTION_DECL
1970
                      || !TREE_THIS_VOLATILE (fndecl))
1971
                    break;
1972
                  fn = OVL_NEXT (fn);
1973
                }
1974
              while (fn);
1975
              if (!fn)
1976
                current_function_returns_abnormally = 1;
1977
            }
1978
          return result;
1979
        }
1980
      orig_args = make_tree_vector_copy (*args);
1981
      if (!BASELINK_P (fn)
1982
          && TREE_CODE (fn) != PSEUDO_DTOR_EXPR
1983
          && TREE_TYPE (fn) != unknown_type_node)
1984
        fn = build_non_dependent_expr (fn);
1985
      make_args_non_dependent (*args);
1986
    }
1987
 
1988
  if (is_overloaded_fn (fn))
1989
    fn = baselink_for_fns (fn);
1990
 
1991
  result = NULL_TREE;
1992
  if (BASELINK_P (fn))
1993
    {
1994
      tree object;
1995
 
1996
      /* A call to a member function.  From [over.call.func]:
1997
 
1998
           If the keyword this is in scope and refers to the class of
1999
           that member function, or a derived class thereof, then the
2000
           function call is transformed into a qualified function call
2001
           using (*this) as the postfix-expression to the left of the
2002
           . operator.... [Otherwise] a contrived object of type T
2003
           becomes the implied object argument.
2004
 
2005
        This paragraph is unclear about this situation:
2006
 
2007
          struct A { void f(); };
2008
          struct B : public A {};
2009
          struct C : public A { void g() { B::f(); }};
2010
 
2011
        In particular, for `B::f', this paragraph does not make clear
2012
        whether "the class of that member function" refers to `A' or
2013
        to `B'.  We believe it refers to `B'.  */
2014
      if (current_class_type
2015
          && DERIVED_FROM_P (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
2016
                             current_class_type)
2017
          && current_class_ref)
2018
        object = maybe_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
2019
                                     NULL);
2020
      else
2021
        {
2022
          tree representative_fn;
2023
 
2024
          representative_fn = BASELINK_FUNCTIONS (fn);
2025
          if (TREE_CODE (representative_fn) == TEMPLATE_ID_EXPR)
2026
            representative_fn = TREE_OPERAND (representative_fn, 0);
2027
          representative_fn = get_first_fn (representative_fn);
2028
          object = build_dummy_object (DECL_CONTEXT (representative_fn));
2029
        }
2030
 
2031
      if (processing_template_decl)
2032
        {
2033
          if (type_dependent_expression_p (object))
2034
            {
2035
              tree ret = build_nt_call_vec (orig_fn, orig_args);
2036
              release_tree_vector (orig_args);
2037
              return ret;
2038
            }
2039
          object = build_non_dependent_expr (object);
2040
        }
2041
 
2042
      result = build_new_method_call (object, fn, args, NULL_TREE,
2043
                                      (disallow_virtual
2044
                                       ? LOOKUP_NONVIRTUAL : 0),
2045
                                      /*fn_p=*/NULL,
2046
                                      complain);
2047
    }
2048
  else if (is_overloaded_fn (fn))
2049
    {
2050
      /* If the function is an overloaded builtin, resolve it.  */
2051
      if (TREE_CODE (fn) == FUNCTION_DECL
2052
          && (DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL
2053
              || DECL_BUILT_IN_CLASS (fn) == BUILT_IN_MD))
2054
        result = resolve_overloaded_builtin (input_location, fn, *args);
2055
 
2056
      if (!result)
2057
        /* A call to a namespace-scope function.  */
2058
        result = build_new_function_call (fn, args, koenig_p, complain);
2059
    }
2060
  else if (TREE_CODE (fn) == PSEUDO_DTOR_EXPR)
2061
    {
2062
      if (!VEC_empty (tree, *args))
2063
        error ("arguments to destructor are not allowed");
2064
      /* Mark the pseudo-destructor call as having side-effects so
2065
         that we do not issue warnings about its use.  */
2066
      result = build1 (NOP_EXPR,
2067
                       void_type_node,
2068
                       TREE_OPERAND (fn, 0));
2069
      TREE_SIDE_EFFECTS (result) = 1;
2070
    }
2071
  else if (CLASS_TYPE_P (TREE_TYPE (fn)))
2072
    /* If the "function" is really an object of class type, it might
2073
       have an overloaded `operator ()'.  */
2074
    result = build_op_call (fn, args, complain);
2075
 
2076
  if (!result)
2077
    /* A call where the function is unknown.  */
2078
    result = cp_build_function_call_vec (fn, args, complain);
2079
 
2080
  if (processing_template_decl)
2081
    {
2082
      result = build_call_vec (TREE_TYPE (result), orig_fn, orig_args);
2083
      KOENIG_LOOKUP_P (result) = koenig_p;
2084
      release_tree_vector (orig_args);
2085
    }
2086
 
2087
  return result;
2088
}
2089
 
2090
/* Finish a call to a postfix increment or decrement or EXPR.  (Which
2091
   is indicated by CODE, which should be POSTINCREMENT_EXPR or
2092
   POSTDECREMENT_EXPR.)  */
2093
 
2094
tree
2095
finish_increment_expr (tree expr, enum tree_code code)
2096
{
2097
  return build_x_unary_op (code, expr, tf_warning_or_error);
2098
}
2099
 
2100
/* Finish a use of `this'.  Returns an expression for `this'.  */
2101
 
2102
tree
2103
finish_this_expr (void)
2104
{
2105
  tree result;
2106
 
2107
  if (current_class_ptr)
2108
    {
2109
      tree type = TREE_TYPE (current_class_ref);
2110
 
2111
      /* In a lambda expression, 'this' refers to the captured 'this'.  */
2112
      if (LAMBDA_TYPE_P (type))
2113
        result = lambda_expr_this_capture (CLASSTYPE_LAMBDA_EXPR (type));
2114
      else
2115
        result = current_class_ptr;
2116
 
2117
    }
2118
  else if (current_function_decl
2119
           && DECL_STATIC_FUNCTION_P (current_function_decl))
2120
    {
2121
      error ("%<this%> is unavailable for static member functions");
2122
      result = error_mark_node;
2123
    }
2124
  else
2125
    {
2126
      if (current_function_decl)
2127
        error ("invalid use of %<this%> in non-member function");
2128
      else
2129
        error ("invalid use of %<this%> at top level");
2130
      result = error_mark_node;
2131
    }
2132
 
2133
  return result;
2134
}
2135
 
2136
/* Finish a pseudo-destructor expression.  If SCOPE is NULL, the
2137
   expression was of the form `OBJECT.~DESTRUCTOR' where DESTRUCTOR is
2138
   the TYPE for the type given.  If SCOPE is non-NULL, the expression
2139
   was of the form `OBJECT.SCOPE::~DESTRUCTOR'.  */
2140
 
2141
tree
2142
finish_pseudo_destructor_expr (tree object, tree scope, tree destructor)
2143
{
2144
  if (object == error_mark_node || destructor == error_mark_node)
2145
    return error_mark_node;
2146
 
2147
  gcc_assert (TYPE_P (destructor));
2148
 
2149
  if (!processing_template_decl)
2150
    {
2151
      if (scope == error_mark_node)
2152
        {
2153
          error ("invalid qualifying scope in pseudo-destructor name");
2154
          return error_mark_node;
2155
        }
2156
      if (scope && TYPE_P (scope) && !check_dtor_name (scope, destructor))
2157
        {
2158
          error ("qualified type %qT does not match destructor name ~%qT",
2159
                 scope, destructor);
2160
          return error_mark_node;
2161
        }
2162
 
2163
 
2164
      /* [expr.pseudo] says both:
2165
 
2166
           The type designated by the pseudo-destructor-name shall be
2167
           the same as the object type.
2168
 
2169
         and:
2170
 
2171
           The cv-unqualified versions of the object type and of the
2172
           type designated by the pseudo-destructor-name shall be the
2173
           same type.
2174
 
2175
         We implement the more generous second sentence, since that is
2176
         what most other compilers do.  */
2177
      if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (object),
2178
                                                      destructor))
2179
        {
2180
          error ("%qE is not of type %qT", object, destructor);
2181
          return error_mark_node;
2182
        }
2183
    }
2184
 
2185
  return build3 (PSEUDO_DTOR_EXPR, void_type_node, object, scope, destructor);
2186
}
2187
 
2188
/* Finish an expression of the form CODE EXPR.  */
2189
 
2190
tree
2191
finish_unary_op_expr (enum tree_code code, tree expr)
2192
{
2193
  tree result = build_x_unary_op (code, expr, tf_warning_or_error);
2194
  /* Inside a template, build_x_unary_op does not fold the
2195
     expression. So check whether the result is folded before
2196
     setting TREE_NEGATED_INT.  */
2197
  if (code == NEGATE_EXPR && TREE_CODE (expr) == INTEGER_CST
2198
      && TREE_CODE (result) == INTEGER_CST
2199
      && !TYPE_UNSIGNED (TREE_TYPE (result))
2200
      && INT_CST_LT (result, integer_zero_node))
2201
    {
2202
      /* RESULT may be a cached INTEGER_CST, so we must copy it before
2203
         setting TREE_NEGATED_INT.  */
2204
      result = copy_node (result);
2205
      TREE_NEGATED_INT (result) = 1;
2206
    }
2207
  if (TREE_OVERFLOW_P (result) && !TREE_OVERFLOW_P (expr))
2208
    overflow_warning (input_location, result);
2209
 
2210
  return result;
2211
}
2212
 
2213
/* Finish a compound-literal expression.  TYPE is the type to which
2214
   the CONSTRUCTOR in COMPOUND_LITERAL is being cast.  */
2215
 
2216
tree
2217
finish_compound_literal (tree type, tree compound_literal)
2218
{
2219
  if (type == error_mark_node)
2220
    return error_mark_node;
2221
 
2222
  if (!TYPE_OBJ_P (type))
2223
    {
2224
      error ("compound literal of non-object type %qT", type);
2225
      return error_mark_node;
2226
    }
2227
 
2228
  if (processing_template_decl)
2229
    {
2230
      TREE_TYPE (compound_literal) = type;
2231
      /* Mark the expression as a compound literal.  */
2232
      TREE_HAS_CONSTRUCTOR (compound_literal) = 1;
2233
      return compound_literal;
2234
    }
2235
 
2236
  type = complete_type (type);
2237
 
2238
  if (TYPE_NON_AGGREGATE_CLASS (type))
2239
    {
2240
      /* Trying to deal with a CONSTRUCTOR instead of a TREE_LIST
2241
         everywhere that deals with function arguments would be a pain, so
2242
         just wrap it in a TREE_LIST.  The parser set a flag so we know
2243
         that it came from T{} rather than T({}).  */
2244
      CONSTRUCTOR_IS_DIRECT_INIT (compound_literal) = 1;
2245
      compound_literal = build_tree_list (NULL_TREE, compound_literal);
2246
      return build_functional_cast (type, compound_literal, tf_error);
2247
    }
2248
 
2249
  if (TREE_CODE (type) == ARRAY_TYPE
2250
      && check_array_initializer (NULL_TREE, type, compound_literal))
2251
    return error_mark_node;
2252
  compound_literal = reshape_init (type, compound_literal);
2253
  if (TREE_CODE (type) == ARRAY_TYPE)
2254
    cp_complete_array_type (&type, compound_literal, false);
2255
  compound_literal = digest_init (type, compound_literal);
2256
  if ((!at_function_scope_p () || cp_type_readonly (type))
2257
      && initializer_constant_valid_p (compound_literal, type))
2258
    {
2259
      tree decl = create_temporary_var (type);
2260
      DECL_INITIAL (decl) = compound_literal;
2261
      TREE_STATIC (decl) = 1;
2262
      cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
2263
      decl = pushdecl_top_level (decl);
2264
      DECL_NAME (decl) = make_anon_name ();
2265
      SET_DECL_ASSEMBLER_NAME (decl, DECL_NAME (decl));
2266
      return decl;
2267
    }
2268
  else
2269
    return get_target_expr (compound_literal);
2270
}
2271
 
2272
/* Return the declaration for the function-name variable indicated by
2273
   ID.  */
2274
 
2275
tree
2276
finish_fname (tree id)
2277
{
2278
  tree decl;
2279
 
2280
  decl = fname_decl (input_location, C_RID_CODE (id), id);
2281
  if (processing_template_decl)
2282
    decl = DECL_NAME (decl);
2283
  return decl;
2284
}
2285
 
2286
/* Finish a translation unit.  */
2287
 
2288
void
2289
finish_translation_unit (void)
2290
{
2291
  /* In case there were missing closebraces,
2292
     get us back to the global binding level.  */
2293
  pop_everything ();
2294
  while (current_namespace != global_namespace)
2295
    pop_namespace ();
2296
 
2297
  /* Do file scope __FUNCTION__ et al.  */
2298
  finish_fname_decls ();
2299
}
2300
 
2301
/* Finish a template type parameter, specified as AGGR IDENTIFIER.
2302
   Returns the parameter.  */
2303
 
2304
tree
2305
finish_template_type_parm (tree aggr, tree identifier)
2306
{
2307
  if (aggr != class_type_node)
2308
    {
2309
      permerror (input_location, "template type parameters must use the keyword %<class%> or %<typename%>");
2310
      aggr = class_type_node;
2311
    }
2312
 
2313
  return build_tree_list (aggr, identifier);
2314
}
2315
 
2316
/* Finish a template template parameter, specified as AGGR IDENTIFIER.
2317
   Returns the parameter.  */
2318
 
2319
tree
2320
finish_template_template_parm (tree aggr, tree identifier)
2321
{
2322
  tree decl = build_decl (input_location,
2323
                          TYPE_DECL, identifier, NULL_TREE);
2324
  tree tmpl = build_lang_decl (TEMPLATE_DECL, identifier, NULL_TREE);
2325
  DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
2326
  DECL_TEMPLATE_RESULT (tmpl) = decl;
2327
  DECL_ARTIFICIAL (decl) = 1;
2328
  end_template_decl ();
2329
 
2330
  gcc_assert (DECL_TEMPLATE_PARMS (tmpl));
2331
 
2332
  check_default_tmpl_args (decl, DECL_TEMPLATE_PARMS (tmpl),
2333
                           /*is_primary=*/true, /*is_partial=*/false,
2334
                           /*is_friend=*/0);
2335
 
2336
  return finish_template_type_parm (aggr, tmpl);
2337
}
2338
 
2339
/* ARGUMENT is the default-argument value for a template template
2340
   parameter.  If ARGUMENT is invalid, issue error messages and return
2341
   the ERROR_MARK_NODE.  Otherwise, ARGUMENT itself is returned.  */
2342
 
2343
tree
2344
check_template_template_default_arg (tree argument)
2345
{
2346
  if (TREE_CODE (argument) != TEMPLATE_DECL
2347
      && TREE_CODE (argument) != TEMPLATE_TEMPLATE_PARM
2348
      && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
2349
    {
2350
      if (TREE_CODE (argument) == TYPE_DECL)
2351
        error ("invalid use of type %qT as a default value for a template "
2352
               "template-parameter", TREE_TYPE (argument));
2353
      else
2354
        error ("invalid default argument for a template template parameter");
2355
      return error_mark_node;
2356
    }
2357
 
2358
  return argument;
2359
}
2360
 
2361
/* Begin a class definition, as indicated by T.  */
2362
 
2363
tree
2364
begin_class_definition (tree t, tree attributes)
2365
{
2366
  if (error_operand_p (t) || error_operand_p (TYPE_MAIN_DECL (t)))
2367
    return error_mark_node;
2368
 
2369
  if (processing_template_parmlist)
2370
    {
2371
      error ("definition of %q#T inside template parameter list", t);
2372
      return error_mark_node;
2373
    }
2374
 
2375
  /* According to the C++ ABI, decimal classes defined in ISO/IEC TR 24733
2376
     are passed the same as decimal scalar types.  */
2377
  if (TREE_CODE (t) == RECORD_TYPE
2378
      && !processing_template_decl)
2379
    {
2380
      tree ns = TYPE_CONTEXT (t);
2381
      if (ns && TREE_CODE (ns) == NAMESPACE_DECL
2382
          && DECL_CONTEXT (ns) == std_node
2383
          && DECL_NAME (ns)
2384
          && !strcmp (IDENTIFIER_POINTER (DECL_NAME (ns)), "decimal"))
2385
        {
2386
          const char *n = TYPE_NAME_STRING (t);
2387
          if ((strcmp (n, "decimal32") == 0)
2388
              || (strcmp (n, "decimal64") == 0)
2389
              || (strcmp (n, "decimal128") == 0))
2390
            TYPE_TRANSPARENT_AGGR (t) = 1;
2391
        }
2392
    }
2393
 
2394
  /* A non-implicit typename comes from code like:
2395
 
2396
       template <typename T> struct A {
2397
         template <typename U> struct A<T>::B ...
2398
 
2399
     This is erroneous.  */
2400
  else if (TREE_CODE (t) == TYPENAME_TYPE)
2401
    {
2402
      error ("invalid definition of qualified type %qT", t);
2403
      t = error_mark_node;
2404
    }
2405
 
2406
  if (t == error_mark_node || ! MAYBE_CLASS_TYPE_P (t))
2407
    {
2408
      t = make_class_type (RECORD_TYPE);
2409
      pushtag (make_anon_name (), t, /*tag_scope=*/ts_current);
2410
    }
2411
 
2412
  /* Update the location of the decl.  */
2413
  DECL_SOURCE_LOCATION (TYPE_NAME (t)) = input_location;
2414
 
2415
  if (TYPE_BEING_DEFINED (t))
2416
    {
2417
      t = make_class_type (TREE_CODE (t));
2418
      pushtag (TYPE_IDENTIFIER (t), t, /*tag_scope=*/ts_current);
2419
    }
2420
  maybe_process_partial_specialization (t);
2421
  pushclass (t);
2422
  TYPE_BEING_DEFINED (t) = 1;
2423
 
2424
  cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
2425
 
2426
  if (flag_pack_struct)
2427
    {
2428
      tree v;
2429
      TYPE_PACKED (t) = 1;
2430
      /* Even though the type is being defined for the first time
2431
         here, there might have been a forward declaration, so there
2432
         might be cv-qualified variants of T.  */
2433
      for (v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
2434
        TYPE_PACKED (v) = 1;
2435
    }
2436
  /* Reset the interface data, at the earliest possible
2437
     moment, as it might have been set via a class foo;
2438
     before.  */
2439
  if (! TYPE_ANONYMOUS_P (t))
2440
    {
2441
      struct c_fileinfo *finfo = get_fileinfo (input_filename);
2442
      CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
2443
      SET_CLASSTYPE_INTERFACE_UNKNOWN_X
2444
        (t, finfo->interface_unknown);
2445
    }
2446
  reset_specialization();
2447
 
2448
  /* Make a declaration for this class in its own scope.  */
2449
  build_self_reference ();
2450
 
2451
  return t;
2452
}
2453
 
2454
/* Finish the member declaration given by DECL.  */
2455
 
2456
void
2457
finish_member_declaration (tree decl)
2458
{
2459
  if (decl == error_mark_node || decl == NULL_TREE)
2460
    return;
2461
 
2462
  if (decl == void_type_node)
2463
    /* The COMPONENT was a friend, not a member, and so there's
2464
       nothing for us to do.  */
2465
    return;
2466
 
2467
  /* We should see only one DECL at a time.  */
2468
  gcc_assert (TREE_CHAIN (decl) == NULL_TREE);
2469
 
2470
  /* Set up access control for DECL.  */
2471
  TREE_PRIVATE (decl)
2472
    = (current_access_specifier == access_private_node);
2473
  TREE_PROTECTED (decl)
2474
    = (current_access_specifier == access_protected_node);
2475
  if (TREE_CODE (decl) == TEMPLATE_DECL)
2476
    {
2477
      TREE_PRIVATE (DECL_TEMPLATE_RESULT (decl)) = TREE_PRIVATE (decl);
2478
      TREE_PROTECTED (DECL_TEMPLATE_RESULT (decl)) = TREE_PROTECTED (decl);
2479
    }
2480
 
2481
  /* Mark the DECL as a member of the current class.  */
2482
  DECL_CONTEXT (decl) = current_class_type;
2483
 
2484
  /* Check for bare parameter packs in the member variable declaration.  */
2485
  if (TREE_CODE (decl) == FIELD_DECL)
2486
    {
2487
      if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
2488
        TREE_TYPE (decl) = error_mark_node;
2489
      if (check_for_bare_parameter_packs (DECL_ATTRIBUTES (decl)))
2490
        DECL_ATTRIBUTES (decl) = NULL_TREE;
2491
    }
2492
 
2493
  /* [dcl.link]
2494
 
2495
     A C language linkage is ignored for the names of class members
2496
     and the member function type of class member functions.  */
2497
  if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
2498
    SET_DECL_LANGUAGE (decl, lang_cplusplus);
2499
 
2500
  /* Put functions on the TYPE_METHODS list and everything else on the
2501
     TYPE_FIELDS list.  Note that these are built up in reverse order.
2502
     We reverse them (to obtain declaration order) in finish_struct.  */
2503
  if (TREE_CODE (decl) == FUNCTION_DECL
2504
      || DECL_FUNCTION_TEMPLATE_P (decl))
2505
    {
2506
      /* We also need to add this function to the
2507
         CLASSTYPE_METHOD_VEC.  */
2508
      if (add_method (current_class_type, decl, NULL_TREE))
2509
        {
2510
          TREE_CHAIN (decl) = TYPE_METHODS (current_class_type);
2511
          TYPE_METHODS (current_class_type) = decl;
2512
 
2513
          maybe_add_class_template_decl_list (current_class_type, decl,
2514
                                              /*friend_p=*/0);
2515
        }
2516
    }
2517
  /* Enter the DECL into the scope of the class.  */
2518
  else if ((TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
2519
           || pushdecl_class_level (decl))
2520
    {
2521
      /* All TYPE_DECLs go at the end of TYPE_FIELDS.  Ordinary fields
2522
         go at the beginning.  The reason is that lookup_field_1
2523
         searches the list in order, and we want a field name to
2524
         override a type name so that the "struct stat hack" will
2525
         work.  In particular:
2526
 
2527
           struct S { enum E { }; int E } s;
2528
           s.E = 3;
2529
 
2530
         is valid.  In addition, the FIELD_DECLs must be maintained in
2531
         declaration order so that class layout works as expected.
2532
         However, we don't need that order until class layout, so we
2533
         save a little time by putting FIELD_DECLs on in reverse order
2534
         here, and then reversing them in finish_struct_1.  (We could
2535
         also keep a pointer to the correct insertion points in the
2536
         list.)  */
2537
 
2538
      if (TREE_CODE (decl) == TYPE_DECL)
2539
        TYPE_FIELDS (current_class_type)
2540
          = chainon (TYPE_FIELDS (current_class_type), decl);
2541
      else
2542
        {
2543
          TREE_CHAIN (decl) = TYPE_FIELDS (current_class_type);
2544
          TYPE_FIELDS (current_class_type) = decl;
2545
        }
2546
 
2547
      maybe_add_class_template_decl_list (current_class_type, decl,
2548
                                          /*friend_p=*/0);
2549
    }
2550
 
2551
  if (pch_file)
2552
    note_decl_for_pch (decl);
2553
}
2554
 
2555
/* DECL has been declared while we are building a PCH file.  Perform
2556
   actions that we might normally undertake lazily, but which can be
2557
   performed now so that they do not have to be performed in
2558
   translation units which include the PCH file.  */
2559
 
2560
void
2561
note_decl_for_pch (tree decl)
2562
{
2563
  gcc_assert (pch_file);
2564
 
2565
  /* There's a good chance that we'll have to mangle names at some
2566
     point, even if only for emission in debugging information.  */
2567
  if ((TREE_CODE (decl) == VAR_DECL
2568
       || TREE_CODE (decl) == FUNCTION_DECL)
2569
      && !processing_template_decl)
2570
    mangle_decl (decl);
2571
}
2572
 
2573
/* Finish processing a complete template declaration.  The PARMS are
2574
   the template parameters.  */
2575
 
2576
void
2577
finish_template_decl (tree parms)
2578
{
2579
  if (parms)
2580
    end_template_decl ();
2581
  else
2582
    end_specialization ();
2583
}
2584
 
2585
/* Finish processing a template-id (which names a type) of the form
2586
   NAME < ARGS >.  Return the TYPE_DECL for the type named by the
2587
   template-id.  If ENTERING_SCOPE is nonzero we are about to enter
2588
   the scope of template-id indicated.  */
2589
 
2590
tree
2591
finish_template_type (tree name, tree args, int entering_scope)
2592
{
2593
  tree decl;
2594
 
2595
  decl = lookup_template_class (name, args,
2596
                                NULL_TREE, NULL_TREE, entering_scope,
2597
                                tf_warning_or_error | tf_user);
2598
  if (decl != error_mark_node)
2599
    decl = TYPE_STUB_DECL (decl);
2600
 
2601
  return decl;
2602
}
2603
 
2604
/* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2605
   Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2606
   BASE_CLASS, or NULL_TREE if an error occurred.  The
2607
   ACCESS_SPECIFIER is one of
2608
   access_{default,public,protected_private}_node.  For a virtual base
2609
   we set TREE_TYPE.  */
2610
 
2611
tree
2612
finish_base_specifier (tree base, tree access, bool virtual_p)
2613
{
2614
  tree result;
2615
 
2616
  if (base == error_mark_node)
2617
    {
2618
      error ("invalid base-class specification");
2619
      result = NULL_TREE;
2620
    }
2621
  else if (! MAYBE_CLASS_TYPE_P (base))
2622
    {
2623
      error ("%qT is not a class type", base);
2624
      result = NULL_TREE;
2625
    }
2626
  else
2627
    {
2628
      if (cp_type_quals (base) != 0)
2629
        {
2630
          error ("base class %qT has cv qualifiers", base);
2631
          base = TYPE_MAIN_VARIANT (base);
2632
        }
2633
      result = build_tree_list (access, base);
2634
      if (virtual_p)
2635
        TREE_TYPE (result) = integer_type_node;
2636
    }
2637
 
2638
  return result;
2639
}
2640
 
2641
/* Issue a diagnostic that NAME cannot be found in SCOPE.  DECL is
2642
   what we found when we tried to do the lookup.
2643
   LOCATION is the location of the NAME identifier;
2644
   The location is used in the error message*/
2645
 
2646
void
2647
qualified_name_lookup_error (tree scope, tree name,
2648
                             tree decl, location_t location)
2649
{
2650
  if (scope == error_mark_node)
2651
    ; /* We already complained.  */
2652
  else if (TYPE_P (scope))
2653
    {
2654
      if (!COMPLETE_TYPE_P (scope))
2655
        error_at (location, "incomplete type %qT used in nested name specifier",
2656
                  scope);
2657
      else if (TREE_CODE (decl) == TREE_LIST)
2658
        {
2659
          error_at (location, "reference to %<%T::%D%> is ambiguous",
2660
                    scope, name);
2661
          print_candidates (decl);
2662
        }
2663
      else
2664
        error_at (location, "%qD is not a member of %qT", name, scope);
2665
    }
2666
  else if (scope != global_namespace)
2667
    error_at (location, "%qD is not a member of %qD", name, scope);
2668
  else
2669
    error_at (location, "%<::%D%> has not been declared", name);
2670
}
2671
 
2672
/* If FNS is a member function, a set of member functions, or a
2673
   template-id referring to one or more member functions, return a
2674
   BASELINK for FNS, incorporating the current access context.
2675
   Otherwise, return FNS unchanged.  */
2676
 
2677
tree
2678
baselink_for_fns (tree fns)
2679
{
2680
  tree fn;
2681
  tree cl;
2682
 
2683
  if (BASELINK_P (fns)
2684
      || error_operand_p (fns))
2685
    return fns;
2686
 
2687
  fn = fns;
2688
  if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2689
    fn = TREE_OPERAND (fn, 0);
2690
  fn = get_first_fn (fn);
2691
  if (!DECL_FUNCTION_MEMBER_P (fn))
2692
    return fns;
2693
 
2694
  cl = currently_open_derived_class (DECL_CONTEXT (fn));
2695
  if (!cl)
2696
    cl = DECL_CONTEXT (fn);
2697
  cl = TYPE_BINFO (cl);
2698
  return build_baselink (cl, cl, fns, /*optype=*/NULL_TREE);
2699
}
2700
 
2701
/* Returns true iff DECL is an automatic variable from a function outside
2702
   the current one.  */
2703
 
2704
static bool
2705
outer_automatic_var_p (tree decl)
2706
{
2707
  return ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
2708
          && DECL_FUNCTION_SCOPE_P (decl)
2709
          && !TREE_STATIC (decl)
2710
          && DECL_CONTEXT (decl) != current_function_decl);
2711
}
2712
 
2713
/* Returns true iff DECL is a capture field from a lambda that is not our
2714
   immediate context.  */
2715
 
2716
static bool
2717
outer_lambda_capture_p (tree decl)
2718
{
2719
  return (TREE_CODE (decl) == FIELD_DECL
2720
          && LAMBDA_TYPE_P (DECL_CONTEXT (decl))
2721
          && (!current_class_type
2722
              || !DERIVED_FROM_P (DECL_CONTEXT (decl), current_class_type)));
2723
}
2724
 
2725
/* ID_EXPRESSION is a representation of parsed, but unprocessed,
2726
   id-expression.  (See cp_parser_id_expression for details.)  SCOPE,
2727
   if non-NULL, is the type or namespace used to explicitly qualify
2728
   ID_EXPRESSION.  DECL is the entity to which that name has been
2729
   resolved.
2730
 
2731
   *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2732
   constant-expression.  In that case, *NON_CONSTANT_EXPRESSION_P will
2733
   be set to true if this expression isn't permitted in a
2734
   constant-expression, but it is otherwise not set by this function.
2735
   *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2736
   constant-expression, but a non-constant expression is also
2737
   permissible.
2738
 
2739
   DONE is true if this expression is a complete postfix-expression;
2740
   it is false if this expression is followed by '->', '[', '(', etc.
2741
   ADDRESS_P is true iff this expression is the operand of '&'.
2742
   TEMPLATE_P is true iff the qualified-id was of the form
2743
   "A::template B".  TEMPLATE_ARG_P is true iff this qualified name
2744
   appears as a template argument.
2745
 
2746
   If an error occurs, and it is the kind of error that might cause
2747
   the parser to abort a tentative parse, *ERROR_MSG is filled in.  It
2748
   is the caller's responsibility to issue the message.  *ERROR_MSG
2749
   will be a string with static storage duration, so the caller need
2750
   not "free" it.
2751
 
2752
   Return an expression for the entity, after issuing appropriate
2753
   diagnostics.  This function is also responsible for transforming a
2754
   reference to a non-static member into a COMPONENT_REF that makes
2755
   the use of "this" explicit.
2756
 
2757
   Upon return, *IDK will be filled in appropriately.  */
2758
tree
2759
finish_id_expression (tree id_expression,
2760
                      tree decl,
2761
                      tree scope,
2762
                      cp_id_kind *idk,
2763
                      bool integral_constant_expression_p,
2764
                      bool allow_non_integral_constant_expression_p,
2765
                      bool *non_integral_constant_expression_p,
2766
                      bool template_p,
2767
                      bool done,
2768
                      bool address_p,
2769
                      bool template_arg_p,
2770
                      const char **error_msg,
2771
                      location_t location)
2772
{
2773
  /* Initialize the output parameters.  */
2774
  *idk = CP_ID_KIND_NONE;
2775
  *error_msg = NULL;
2776
 
2777
  if (id_expression == error_mark_node)
2778
    return error_mark_node;
2779
  /* If we have a template-id, then no further lookup is
2780
     required.  If the template-id was for a template-class, we
2781
     will sometimes have a TYPE_DECL at this point.  */
2782
  else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2783
           || TREE_CODE (decl) == TYPE_DECL)
2784
    ;
2785
  /* Look up the name.  */
2786
  else
2787
    {
2788
      if (decl == error_mark_node)
2789
        {
2790
          /* Name lookup failed.  */
2791
          if (scope
2792
              && (!TYPE_P (scope)
2793
                  || (!dependent_type_p (scope)
2794
                      && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
2795
                           && IDENTIFIER_TYPENAME_P (id_expression)
2796
                           && dependent_type_p (TREE_TYPE (id_expression))))))
2797
            {
2798
              /* If the qualifying type is non-dependent (and the name
2799
                 does not name a conversion operator to a dependent
2800
                 type), issue an error.  */
2801
              qualified_name_lookup_error (scope, id_expression, decl, location);
2802
              return error_mark_node;
2803
            }
2804
          else if (!scope)
2805
            {
2806
              /* It may be resolved via Koenig lookup.  */
2807
              *idk = CP_ID_KIND_UNQUALIFIED;
2808
              return id_expression;
2809
            }
2810
          else
2811
            decl = id_expression;
2812
        }
2813
      /* If DECL is a variable that would be out of scope under
2814
         ANSI/ISO rules, but in scope in the ARM, name lookup
2815
         will succeed.  Issue a diagnostic here.  */
2816
      else
2817
        decl = check_for_out_of_scope_variable (decl);
2818
 
2819
      /* Remember that the name was used in the definition of
2820
         the current class so that we can check later to see if
2821
         the meaning would have been different after the class
2822
         was entirely defined.  */
2823
      if (!scope && decl != error_mark_node)
2824
        maybe_note_name_used_in_class (id_expression, decl);
2825
 
2826
      /* Disallow uses of local variables from containing functions, except
2827
         within lambda-expressions.  */
2828
      if ((outer_automatic_var_p (decl)
2829
           || outer_lambda_capture_p (decl))
2830
          /* It's not a use (3.2) if we're in an unevaluated context.  */
2831
          && !cp_unevaluated_operand)
2832
        {
2833
          tree context = DECL_CONTEXT (decl);
2834
          tree containing_function = current_function_decl;
2835
          tree lambda_stack = NULL_TREE;
2836
          tree lambda_expr = NULL_TREE;
2837
          tree initializer = decl;
2838
 
2839
          /* Core issue 696: "[At the July 2009 meeting] the CWG expressed
2840
             support for an approach in which a reference to a local
2841
             [constant] automatic variable in a nested class or lambda body
2842
             would enter the expression as an rvalue, which would reduce
2843
             the complexity of the problem"
2844
 
2845
             FIXME update for final resolution of core issue 696.  */
2846
          if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
2847
            return integral_constant_value (decl);
2848
 
2849
          if (TYPE_P (context))
2850
            {
2851
              /* Implicit capture of an explicit capture.  */
2852
              context = lambda_function (context);
2853
              initializer = thisify_lambda_field (decl);
2854
            }
2855
 
2856
          /* If we are in a lambda function, we can move out until we hit
2857
             1. the context,
2858
             2. a non-lambda function, or
2859
             3. a non-default capturing lambda function.  */
2860
          while (context != containing_function
2861
                 && LAMBDA_FUNCTION_P (containing_function))
2862
            {
2863
              lambda_expr = CLASSTYPE_LAMBDA_EXPR
2864
                (DECL_CONTEXT (containing_function));
2865
 
2866
              if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr)
2867
                  == CPLD_NONE)
2868
                break;
2869
 
2870
              lambda_stack = tree_cons (NULL_TREE,
2871
                                        lambda_expr,
2872
                                        lambda_stack);
2873
 
2874
              containing_function
2875
                = decl_function_context (containing_function);
2876
            }
2877
 
2878
          if (context == containing_function)
2879
            {
2880
              decl = add_default_capture (lambda_stack,
2881
                                          /*id=*/DECL_NAME (decl),
2882
                                          initializer);
2883
            }
2884
          else if (lambda_expr)
2885
            {
2886
              error ("%qD is not captured", decl);
2887
              return error_mark_node;
2888
            }
2889
          else
2890
            {
2891
              error (TREE_CODE (decl) == VAR_DECL
2892
                     ? "use of %<auto%> variable from containing function"
2893
                     : "use of parameter from containing function");
2894
              error ("  %q+#D declared here", decl);
2895
              return error_mark_node;
2896
            }
2897
        }
2898
    }
2899
 
2900
  /* If we didn't find anything, or what we found was a type,
2901
     then this wasn't really an id-expression.  */
2902
  if (TREE_CODE (decl) == TEMPLATE_DECL
2903
      && !DECL_FUNCTION_TEMPLATE_P (decl))
2904
    {
2905
      *error_msg = "missing template arguments";
2906
      return error_mark_node;
2907
    }
2908
  else if (TREE_CODE (decl) == TYPE_DECL
2909
           || TREE_CODE (decl) == NAMESPACE_DECL)
2910
    {
2911
      *error_msg = "expected primary-expression";
2912
      return error_mark_node;
2913
    }
2914
 
2915
  /* If the name resolved to a template parameter, there is no
2916
     need to look it up again later.  */
2917
  if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
2918
      || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2919
    {
2920
      tree r;
2921
 
2922
      *idk = CP_ID_KIND_NONE;
2923
      if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2924
        decl = TEMPLATE_PARM_DECL (decl);
2925
      r = convert_from_reference (DECL_INITIAL (decl));
2926
 
2927
      if (integral_constant_expression_p
2928
          && !dependent_type_p (TREE_TYPE (decl))
2929
          && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
2930
        {
2931
          if (!allow_non_integral_constant_expression_p)
2932
            error ("template parameter %qD of type %qT is not allowed in "
2933
                   "an integral constant expression because it is not of "
2934
                   "integral or enumeration type", decl, TREE_TYPE (decl));
2935
          *non_integral_constant_expression_p = true;
2936
        }
2937
      return r;
2938
    }
2939
  /* Similarly, we resolve enumeration constants to their
2940
     underlying values.  */
2941
  else if (TREE_CODE (decl) == CONST_DECL)
2942
    {
2943
      *idk = CP_ID_KIND_NONE;
2944
      if (!processing_template_decl)
2945
        {
2946
          used_types_insert (TREE_TYPE (decl));
2947
          return DECL_INITIAL (decl);
2948
        }
2949
      return decl;
2950
    }
2951
  else
2952
    {
2953
      bool dependent_p;
2954
 
2955
      /* If the declaration was explicitly qualified indicate
2956
         that.  The semantics of `A::f(3)' are different than
2957
         `f(3)' if `f' is virtual.  */
2958
      *idk = (scope
2959
              ? CP_ID_KIND_QUALIFIED
2960
              : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2961
                 ? CP_ID_KIND_TEMPLATE_ID
2962
                 : CP_ID_KIND_UNQUALIFIED));
2963
 
2964
 
2965
      /* [temp.dep.expr]
2966
 
2967
         An id-expression is type-dependent if it contains an
2968
         identifier that was declared with a dependent type.
2969
 
2970
         The standard is not very specific about an id-expression that
2971
         names a set of overloaded functions.  What if some of them
2972
         have dependent types and some of them do not?  Presumably,
2973
         such a name should be treated as a dependent name.  */
2974
      /* Assume the name is not dependent.  */
2975
      dependent_p = false;
2976
      if (!processing_template_decl)
2977
        /* No names are dependent outside a template.  */
2978
        ;
2979
      /* A template-id where the name of the template was not resolved
2980
         is definitely dependent.  */
2981
      else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2982
               && (TREE_CODE (TREE_OPERAND (decl, 0))
2983
                   == IDENTIFIER_NODE))
2984
        dependent_p = true;
2985
      /* For anything except an overloaded function, just check its
2986
         type.  */
2987
      else if (!is_overloaded_fn (decl))
2988
        dependent_p
2989
          = dependent_type_p (TREE_TYPE (decl));
2990
      /* For a set of overloaded functions, check each of the
2991
         functions.  */
2992
      else
2993
        {
2994
          tree fns = decl;
2995
 
2996
          if (BASELINK_P (fns))
2997
            fns = BASELINK_FUNCTIONS (fns);
2998
 
2999
          /* For a template-id, check to see if the template
3000
             arguments are dependent.  */
3001
          if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
3002
            {
3003
              tree args = TREE_OPERAND (fns, 1);
3004
              dependent_p = any_dependent_template_arguments_p (args);
3005
              /* The functions are those referred to by the
3006
                 template-id.  */
3007
              fns = TREE_OPERAND (fns, 0);
3008
            }
3009
 
3010
          /* If there are no dependent template arguments, go through
3011
             the overloaded functions.  */
3012
          while (fns && !dependent_p)
3013
            {
3014
              tree fn = OVL_CURRENT (fns);
3015
 
3016
              /* Member functions of dependent classes are
3017
                 dependent.  */
3018
              if (TREE_CODE (fn) == FUNCTION_DECL
3019
                  && type_dependent_expression_p (fn))
3020
                dependent_p = true;
3021
              else if (TREE_CODE (fn) == TEMPLATE_DECL
3022
                       && dependent_template_p (fn))
3023
                dependent_p = true;
3024
 
3025
              fns = OVL_NEXT (fns);
3026
            }
3027
        }
3028
 
3029
      /* If the name was dependent on a template parameter, we will
3030
         resolve the name at instantiation time.  */
3031
      if (dependent_p)
3032
        {
3033
          /* Create a SCOPE_REF for qualified names, if the scope is
3034
             dependent.  */
3035
          if (scope)
3036
            {
3037
              if (TYPE_P (scope))
3038
                {
3039
                  if (address_p && done)
3040
                    decl = finish_qualified_id_expr (scope, decl,
3041
                                                     done, address_p,
3042
                                                     template_p,
3043
                                                     template_arg_p);
3044
                  else
3045
                    {
3046
                      tree type = NULL_TREE;
3047
                      if (DECL_P (decl) && !dependent_scope_p (scope))
3048
                        type = TREE_TYPE (decl);
3049
                      decl = build_qualified_name (type,
3050
                                                   scope,
3051
                                                   id_expression,
3052
                                                   template_p);
3053
                    }
3054
                }
3055
              if (TREE_TYPE (decl))
3056
                decl = convert_from_reference (decl);
3057
              return decl;
3058
            }
3059
          /* A TEMPLATE_ID already contains all the information we
3060
             need.  */
3061
          if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
3062
            return id_expression;
3063
          *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
3064
          /* If we found a variable, then name lookup during the
3065
             instantiation will always resolve to the same VAR_DECL
3066
             (or an instantiation thereof).  */
3067
          if (TREE_CODE (decl) == VAR_DECL
3068
              || TREE_CODE (decl) == PARM_DECL)
3069
            return convert_from_reference (decl);
3070
          /* The same is true for FIELD_DECL, but we also need to
3071
             make sure that the syntax is correct.  */
3072
          else if (TREE_CODE (decl) == FIELD_DECL)
3073
            {
3074
              /* Since SCOPE is NULL here, this is an unqualified name.
3075
                 Access checking has been performed during name lookup
3076
                 already.  Turn off checking to avoid duplicate errors.  */
3077
              push_deferring_access_checks (dk_no_check);
3078
              decl = finish_non_static_data_member
3079
                       (decl, current_class_ref,
3080
                        /*qualifying_scope=*/NULL_TREE);
3081
              pop_deferring_access_checks ();
3082
              return decl;
3083
            }
3084
          return id_expression;
3085
        }
3086
 
3087
      /* Only certain kinds of names are allowed in constant
3088
         expression.  Enumerators and template parameters have already
3089
         been handled above.  */
3090
      if (integral_constant_expression_p
3091
          && ! DECL_INTEGRAL_CONSTANT_VAR_P (decl)
3092
          && ! builtin_valid_in_constant_expr_p (decl))
3093
        {
3094
          if (!allow_non_integral_constant_expression_p)
3095
            {
3096
              error ("%qD cannot appear in a constant-expression", decl);
3097
              return error_mark_node;
3098
            }
3099
          *non_integral_constant_expression_p = true;
3100
        }
3101
 
3102
      if (TREE_CODE (decl) == NAMESPACE_DECL)
3103
        {
3104
          error ("use of namespace %qD as expression", decl);
3105
          return error_mark_node;
3106
        }
3107
      else if (DECL_CLASS_TEMPLATE_P (decl))
3108
        {
3109
          error ("use of class template %qT as expression", decl);
3110
          return error_mark_node;
3111
        }
3112
      else if (TREE_CODE (decl) == TREE_LIST)
3113
        {
3114
          /* Ambiguous reference to base members.  */
3115
          error ("request for member %qD is ambiguous in "
3116
                 "multiple inheritance lattice", id_expression);
3117
          print_candidates (decl);
3118
          return error_mark_node;
3119
        }
3120
 
3121
      /* Mark variable-like entities as used.  Functions are similarly
3122
         marked either below or after overload resolution.  */
3123
      if (TREE_CODE (decl) == VAR_DECL
3124
          || TREE_CODE (decl) == PARM_DECL
3125
          || TREE_CODE (decl) == RESULT_DECL)
3126
        mark_used (decl);
3127
 
3128
      if (scope)
3129
        {
3130
          decl = (adjust_result_of_qualified_name_lookup
3131
                  (decl, scope, current_class_type));
3132
 
3133
          if (TREE_CODE (decl) == FUNCTION_DECL)
3134
            mark_used (decl);
3135
 
3136
          if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl))
3137
            decl = finish_qualified_id_expr (scope,
3138
                                             decl,
3139
                                             done,
3140
                                             address_p,
3141
                                             template_p,
3142
                                             template_arg_p);
3143
          else
3144
            {
3145
              tree r = convert_from_reference (decl);
3146
 
3147
              /* In a template, return a SCOPE_REF for most qualified-ids
3148
                 so that we can check access at instantiation time.  But if
3149
                 we're looking at a member of the current instantiation, we
3150
                 know we have access and building up the SCOPE_REF confuses
3151
                 non-type template argument handling.  */
3152
              if (processing_template_decl && TYPE_P (scope)
3153
                  && !currently_open_class (scope))
3154
                r = build_qualified_name (TREE_TYPE (r),
3155
                                          scope, decl,
3156
                                          template_p);
3157
              decl = r;
3158
            }
3159
        }
3160
      else if (TREE_CODE (decl) == FIELD_DECL)
3161
        {
3162
          /* Since SCOPE is NULL here, this is an unqualified name.
3163
             Access checking has been performed during name lookup
3164
             already.  Turn off checking to avoid duplicate errors.  */
3165
          push_deferring_access_checks (dk_no_check);
3166
          decl = finish_non_static_data_member (decl, current_class_ref,
3167
                                                /*qualifying_scope=*/NULL_TREE);
3168
          pop_deferring_access_checks ();
3169
        }
3170
      else if (is_overloaded_fn (decl))
3171
        {
3172
          tree first_fn;
3173
 
3174
          first_fn = decl;
3175
          if (TREE_CODE (first_fn) == TEMPLATE_ID_EXPR)
3176
            first_fn = TREE_OPERAND (first_fn, 0);
3177
          first_fn = get_first_fn (first_fn);
3178
          if (TREE_CODE (first_fn) == TEMPLATE_DECL)
3179
            first_fn = DECL_TEMPLATE_RESULT (first_fn);
3180
 
3181
          if (!really_overloaded_fn (decl))
3182
            mark_used (first_fn);
3183
 
3184
          if (!template_arg_p
3185
              && TREE_CODE (first_fn) == FUNCTION_DECL
3186
              && DECL_FUNCTION_MEMBER_P (first_fn)
3187
              && !shared_member_p (decl))
3188
            {
3189
              /* A set of member functions.  */
3190
              decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
3191
              return finish_class_member_access_expr (decl, id_expression,
3192
                                                      /*template_p=*/false,
3193
                                                      tf_warning_or_error);
3194
            }
3195
 
3196
          decl = baselink_for_fns (decl);
3197
        }
3198
      else
3199
        {
3200
          if (DECL_P (decl) && DECL_NONLOCAL (decl)
3201
              && DECL_CLASS_SCOPE_P (decl))
3202
            {
3203
              tree context = context_for_name_lookup (decl);
3204
              if (context != current_class_type)
3205
                {
3206
                  tree path = currently_open_derived_class (context);
3207
                  perform_or_defer_access_check (TYPE_BINFO (path),
3208
                                                 decl, decl);
3209
                }
3210
            }
3211
 
3212
          decl = convert_from_reference (decl);
3213
        }
3214
    }
3215
 
3216
  if (TREE_DEPRECATED (decl))
3217
    warn_deprecated_use (decl, NULL_TREE);
3218
 
3219
  return decl;
3220
}
3221
 
3222
/* Implement the __typeof keyword: Return the type of EXPR, suitable for
3223
   use as a type-specifier.  */
3224
 
3225
tree
3226
finish_typeof (tree expr)
3227
{
3228
  tree type;
3229
 
3230
  if (type_dependent_expression_p (expr))
3231
    {
3232
      type = cxx_make_type (TYPEOF_TYPE);
3233
      TYPEOF_TYPE_EXPR (type) = expr;
3234
      SET_TYPE_STRUCTURAL_EQUALITY (type);
3235
 
3236
      return type;
3237
    }
3238
 
3239
  type = unlowered_expr_type (expr);
3240
 
3241
  if (!type || type == unknown_type_node)
3242
    {
3243
      error ("type of %qE is unknown", expr);
3244
      return error_mark_node;
3245
    }
3246
 
3247
  return type;
3248
}
3249
 
3250
/* Perform C++-specific checks for __builtin_offsetof before calling
3251
   fold_offsetof.  */
3252
 
3253
tree
3254
finish_offsetof (tree expr)
3255
{
3256
  if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
3257
    {
3258
      error ("cannot apply %<offsetof%> to destructor %<~%T%>",
3259
              TREE_OPERAND (expr, 2));
3260
      return error_mark_node;
3261
    }
3262
  if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
3263
      || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
3264
      || TREE_CODE (TREE_TYPE (expr)) == UNKNOWN_TYPE)
3265
    {
3266
      if (TREE_CODE (expr) == COMPONENT_REF
3267
          || TREE_CODE (expr) == COMPOUND_EXPR)
3268
        expr = TREE_OPERAND (expr, 1);
3269
      error ("cannot apply %<offsetof%> to member function %qD", expr);
3270
      return error_mark_node;
3271
    }
3272
  if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
3273
    expr = TREE_OPERAND (expr, 0);
3274
  return fold_offsetof (expr, NULL_TREE);
3275
}
3276
 
3277
/* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR.  This
3278
   function is broken out from the above for the benefit of the tree-ssa
3279
   project.  */
3280
 
3281
void
3282
simplify_aggr_init_expr (tree *tp)
3283
{
3284
  tree aggr_init_expr = *tp;
3285
 
3286
  /* Form an appropriate CALL_EXPR.  */
3287
  tree fn = AGGR_INIT_EXPR_FN (aggr_init_expr);
3288
  tree slot = AGGR_INIT_EXPR_SLOT (aggr_init_expr);
3289
  tree type = TREE_TYPE (slot);
3290
 
3291
  tree call_expr;
3292
  enum style_t { ctor, arg, pcc } style;
3293
 
3294
  if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
3295
    style = ctor;
3296
#ifdef PCC_STATIC_STRUCT_RETURN
3297
  else if (1)
3298
    style = pcc;
3299
#endif
3300
  else
3301
    {
3302
      gcc_assert (TREE_ADDRESSABLE (type));
3303
      style = arg;
3304
    }
3305
 
3306
  call_expr = build_call_array_loc (input_location,
3307
                                    TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
3308
                                    fn,
3309
                                    aggr_init_expr_nargs (aggr_init_expr),
3310
                                    AGGR_INIT_EXPR_ARGP (aggr_init_expr));
3311
 
3312
  if (style == ctor)
3313
    {
3314
      /* Replace the first argument to the ctor with the address of the
3315
         slot.  */
3316
      cxx_mark_addressable (slot);
3317
      CALL_EXPR_ARG (call_expr, 0) =
3318
        build1 (ADDR_EXPR, build_pointer_type (type), slot);
3319
    }
3320
  else if (style == arg)
3321
    {
3322
      /* Just mark it addressable here, and leave the rest to
3323
         expand_call{,_inline}.  */
3324
      cxx_mark_addressable (slot);
3325
      CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
3326
      call_expr = build2 (MODIFY_EXPR, TREE_TYPE (call_expr), slot, call_expr);
3327
    }
3328
  else if (style == pcc)
3329
    {
3330
      /* If we're using the non-reentrant PCC calling convention, then we
3331
         need to copy the returned value out of the static buffer into the
3332
         SLOT.  */
3333
      push_deferring_access_checks (dk_no_check);
3334
      call_expr = build_aggr_init (slot, call_expr,
3335
                                   DIRECT_BIND | LOOKUP_ONLYCONVERTING,
3336
                                   tf_warning_or_error);
3337
      pop_deferring_access_checks ();
3338
      call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
3339
    }
3340
 
3341
  if (AGGR_INIT_ZERO_FIRST (aggr_init_expr))
3342
    {
3343
      tree init = build_zero_init (type, NULL_TREE,
3344
                                   /*static_storage_p=*/false);
3345
      init = build2 (INIT_EXPR, void_type_node, slot, init);
3346
      call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (call_expr),
3347
                          init, call_expr);
3348
    }
3349
 
3350
  *tp = call_expr;
3351
}
3352
 
3353
/* Emit all thunks to FN that should be emitted when FN is emitted.  */
3354
 
3355
void
3356
emit_associated_thunks (tree fn)
3357
{
3358
  /* When we use vcall offsets, we emit thunks with the virtual
3359
     functions to which they thunk. The whole point of vcall offsets
3360
     is so that you can know statically the entire set of thunks that
3361
     will ever be needed for a given virtual function, thereby
3362
     enabling you to output all the thunks with the function itself.  */
3363
  if (DECL_VIRTUAL_P (fn)
3364
      /* Do not emit thunks for extern template instantiations.  */
3365
      && ! DECL_REALLY_EXTERN (fn))
3366
    {
3367
      tree thunk;
3368
 
3369
      for (thunk = DECL_THUNKS (fn); thunk; thunk = TREE_CHAIN (thunk))
3370
        {
3371
          if (!THUNK_ALIAS (thunk))
3372
            {
3373
              use_thunk (thunk, /*emit_p=*/1);
3374
              if (DECL_RESULT_THUNK_P (thunk))
3375
                {
3376
                  tree probe;
3377
 
3378
                  for (probe = DECL_THUNKS (thunk);
3379
                       probe; probe = TREE_CHAIN (probe))
3380
                    use_thunk (probe, /*emit_p=*/1);
3381
                }
3382
            }
3383
          else
3384
            gcc_assert (!DECL_THUNKS (thunk));
3385
        }
3386
    }
3387
}
3388
 
3389
/* Generate RTL for FN.  */
3390
 
3391
bool
3392
expand_or_defer_fn_1 (tree fn)
3393
{
3394
  /* When the parser calls us after finishing the body of a template
3395
     function, we don't really want to expand the body.  */
3396
  if (processing_template_decl)
3397
    {
3398
      /* Normally, collection only occurs in rest_of_compilation.  So,
3399
         if we don't collect here, we never collect junk generated
3400
         during the processing of templates until we hit a
3401
         non-template function.  It's not safe to do this inside a
3402
         nested class, though, as the parser may have local state that
3403
         is not a GC root.  */
3404
      if (!function_depth)
3405
        ggc_collect ();
3406
      return false;
3407
    }
3408
 
3409
  gcc_assert (DECL_SAVED_TREE (fn));
3410
 
3411
  /* If this is a constructor or destructor body, we have to clone
3412
     it.  */
3413
  if (maybe_clone_body (fn))
3414
    {
3415
      /* We don't want to process FN again, so pretend we've written
3416
         it out, even though we haven't.  */
3417
      TREE_ASM_WRITTEN (fn) = 1;
3418
      DECL_SAVED_TREE (fn) = NULL_TREE;
3419
      return false;
3420
    }
3421
 
3422
  /* We make a decision about linkage for these functions at the end
3423
     of the compilation.  Until that point, we do not want the back
3424
     end to output them -- but we do want it to see the bodies of
3425
     these functions so that it can inline them as appropriate.  */
3426
  if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3427
    {
3428
      if (DECL_INTERFACE_KNOWN (fn))
3429
        /* We've already made a decision as to how this function will
3430
           be handled.  */;
3431
      else if (!at_eof)
3432
        {
3433
          DECL_EXTERNAL (fn) = 1;
3434
          DECL_NOT_REALLY_EXTERN (fn) = 1;
3435
          note_vague_linkage_fn (fn);
3436
          /* A non-template inline function with external linkage will
3437
             always be COMDAT.  As we must eventually determine the
3438
             linkage of all functions, and as that causes writes to
3439
             the data mapped in from the PCH file, it's advantageous
3440
             to mark the functions at this point.  */
3441
          if (!DECL_IMPLICIT_INSTANTIATION (fn))
3442
            {
3443
              /* This function must have external linkage, as
3444
                 otherwise DECL_INTERFACE_KNOWN would have been
3445
                 set.  */
3446
              gcc_assert (TREE_PUBLIC (fn));
3447
              comdat_linkage (fn);
3448
              DECL_INTERFACE_KNOWN (fn) = 1;
3449
            }
3450
        }
3451
      else
3452
        import_export_decl (fn);
3453
 
3454
      /* If the user wants us to keep all inline functions, then mark
3455
         this function as needed so that finish_file will make sure to
3456
         output it later.  Similarly, all dllexport'd functions must
3457
         be emitted; there may be callers in other DLLs.  */
3458
      if ((flag_keep_inline_functions
3459
           && DECL_DECLARED_INLINE_P (fn)
3460
           && !DECL_REALLY_EXTERN (fn))
3461
          || lookup_attribute ("dllexport", DECL_ATTRIBUTES (fn)))
3462
        mark_needed (fn);
3463
    }
3464
 
3465
  /* There's no reason to do any of the work here if we're only doing
3466
     semantic analysis; this code just generates RTL.  */
3467
  if (flag_syntax_only)
3468
    return false;
3469
 
3470
  return true;
3471
}
3472
 
3473
void
3474
expand_or_defer_fn (tree fn)
3475
{
3476
  if (expand_or_defer_fn_1 (fn))
3477
    {
3478
      function_depth++;
3479
 
3480
      /* Expand or defer, at the whim of the compilation unit manager.  */
3481
      cgraph_finalize_function (fn, function_depth > 1);
3482
      emit_associated_thunks (fn);
3483
 
3484
      function_depth--;
3485
    }
3486
}
3487
 
3488
struct nrv_data
3489
{
3490
  tree var;
3491
  tree result;
3492
  htab_t visited;
3493
};
3494
 
3495
/* Helper function for walk_tree, used by finalize_nrv below.  */
3496
 
3497
static tree
3498
finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
3499
{
3500
  struct nrv_data *dp = (struct nrv_data *)data;
3501
  void **slot;
3502
 
3503
  /* No need to walk into types.  There wouldn't be any need to walk into
3504
     non-statements, except that we have to consider STMT_EXPRs.  */
3505
  if (TYPE_P (*tp))
3506
    *walk_subtrees = 0;
3507
  /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3508
     but differs from using NULL_TREE in that it indicates that we care
3509
     about the value of the RESULT_DECL.  */
3510
  else if (TREE_CODE (*tp) == RETURN_EXPR)
3511
    TREE_OPERAND (*tp, 0) = dp->result;
3512
  /* Change all cleanups for the NRV to only run when an exception is
3513
     thrown.  */
3514
  else if (TREE_CODE (*tp) == CLEANUP_STMT
3515
           && CLEANUP_DECL (*tp) == dp->var)
3516
    CLEANUP_EH_ONLY (*tp) = 1;
3517
  /* Replace the DECL_EXPR for the NRV with an initialization of the
3518
     RESULT_DECL, if needed.  */
3519
  else if (TREE_CODE (*tp) == DECL_EXPR
3520
           && DECL_EXPR_DECL (*tp) == dp->var)
3521
    {
3522
      tree init;
3523
      if (DECL_INITIAL (dp->var)
3524
          && DECL_INITIAL (dp->var) != error_mark_node)
3525
        init = build2 (INIT_EXPR, void_type_node, dp->result,
3526
                       DECL_INITIAL (dp->var));
3527
      else
3528
        init = build_empty_stmt (EXPR_LOCATION (*tp));
3529
      DECL_INITIAL (dp->var) = NULL_TREE;
3530
      SET_EXPR_LOCATION (init, EXPR_LOCATION (*tp));
3531
      *tp = init;
3532
    }
3533
  /* And replace all uses of the NRV with the RESULT_DECL.  */
3534
  else if (*tp == dp->var)
3535
    *tp = dp->result;
3536
 
3537
  /* Avoid walking into the same tree more than once.  Unfortunately, we
3538
     can't just use walk_tree_without duplicates because it would only call
3539
     us for the first occurrence of dp->var in the function body.  */
3540
  slot = htab_find_slot (dp->visited, *tp, INSERT);
3541
  if (*slot)
3542
    *walk_subtrees = 0;
3543
  else
3544
    *slot = *tp;
3545
 
3546
  /* Keep iterating.  */
3547
  return NULL_TREE;
3548
}
3549
 
3550
/* Called from finish_function to implement the named return value
3551
   optimization by overriding all the RETURN_EXPRs and pertinent
3552
   CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
3553
   RESULT_DECL for the function.  */
3554
 
3555
void
3556
finalize_nrv (tree *tp, tree var, tree result)
3557
{
3558
  struct nrv_data data;
3559
 
3560
  /* Copy debugging information from VAR to RESULT.  */
3561
  DECL_NAME (result) = DECL_NAME (var);
3562
  DECL_ARTIFICIAL (result) = DECL_ARTIFICIAL (var);
3563
  DECL_IGNORED_P (result) = DECL_IGNORED_P (var);
3564
  DECL_SOURCE_LOCATION (result) = DECL_SOURCE_LOCATION (var);
3565
  DECL_ABSTRACT_ORIGIN (result) = DECL_ABSTRACT_ORIGIN (var);
3566
  /* Don't forget that we take its address.  */
3567
  TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
3568
 
3569
  data.var = var;
3570
  data.result = result;
3571
  data.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
3572
  cp_walk_tree (tp, finalize_nrv_r, &data, 0);
3573
  htab_delete (data.visited);
3574
}
3575
 
3576
/* Return the declaration for the function called by CALL_EXPR T,
3577
   TYPE is the class type of the clause decl.  */
3578
 
3579
static tree
3580
omp_clause_info_fndecl (tree t, tree type)
3581
{
3582
  tree ret = get_callee_fndecl (t);
3583
 
3584
  if (ret)
3585
    return ret;
3586
 
3587
  gcc_assert (TREE_CODE (t) == CALL_EXPR);
3588
  t = CALL_EXPR_FN (t);
3589
  STRIP_NOPS (t);
3590
  if (TREE_CODE (t) == OBJ_TYPE_REF)
3591
    {
3592
      t = cp_fold_obj_type_ref (t, type);
3593
      if (TREE_CODE (t) == ADDR_EXPR
3594
          && TREE_CODE (TREE_OPERAND (t, 0)) == FUNCTION_DECL)
3595
        return TREE_OPERAND (t, 0);
3596
    }
3597
 
3598
  return NULL_TREE;
3599
}
3600
 
3601
/* Create CP_OMP_CLAUSE_INFO for clause C.  Returns true if it is invalid.  */
3602
 
3603
bool
3604
cxx_omp_create_clause_info (tree c, tree type, bool need_default_ctor,
3605
                            bool need_copy_ctor, bool need_copy_assignment)
3606
{
3607
  int save_errorcount = errorcount;
3608
  tree info, t;
3609
 
3610
  /* Always allocate 3 elements for simplicity.  These are the
3611
     function decls for the ctor, dtor, and assignment op.
3612
     This layout is known to the three lang hooks,
3613
     cxx_omp_clause_default_init, cxx_omp_clause_copy_init,
3614
     and cxx_omp_clause_assign_op.  */
3615
  info = make_tree_vec (3);
3616
  CP_OMP_CLAUSE_INFO (c) = info;
3617
 
3618
  if (need_default_ctor
3619
      || (need_copy_ctor && !TYPE_HAS_TRIVIAL_INIT_REF (type)))
3620
    {
3621
      VEC(tree,gc) *vec;
3622
 
3623
      if (need_default_ctor)
3624
        vec = NULL;
3625
      else
3626
        {
3627
          t = build_int_cst (build_pointer_type (type), 0);
3628
          t = build1 (INDIRECT_REF, type, t);
3629
          vec = make_tree_vector_single (t);
3630
        }
3631
      t = build_special_member_call (NULL_TREE, complete_ctor_identifier,
3632
                                     &vec, type, LOOKUP_NORMAL,
3633
                                     tf_warning_or_error);
3634
 
3635
      if (vec != NULL)
3636
        release_tree_vector (vec);
3637
 
3638
      if (targetm.cxx.cdtor_returns_this () || errorcount)
3639
        /* Because constructors and destructors return this,
3640
           the call will have been cast to "void".  Remove the
3641
           cast here.  We would like to use STRIP_NOPS, but it
3642
           wouldn't work here because TYPE_MODE (t) and
3643
           TYPE_MODE (TREE_OPERAND (t, 0)) are different.
3644
           They are VOIDmode and Pmode, respectively.  */
3645
        if (TREE_CODE (t) == NOP_EXPR)
3646
          t = TREE_OPERAND (t, 0);
3647
 
3648
      TREE_VEC_ELT (info, 0) = get_callee_fndecl (t);
3649
    }
3650
 
3651
  if ((need_default_ctor || need_copy_ctor)
3652
      && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3653
    {
3654
      t = build_int_cst (build_pointer_type (type), 0);
3655
      t = build1 (INDIRECT_REF, type, t);
3656
      t = build_special_member_call (t, complete_dtor_identifier,
3657
                                     NULL, type, LOOKUP_NORMAL,
3658
                                     tf_warning_or_error);
3659
 
3660
      if (targetm.cxx.cdtor_returns_this () || errorcount)
3661
        /* Because constructors and destructors return this,
3662
           the call will have been cast to "void".  Remove the
3663
           cast here.  We would like to use STRIP_NOPS, but it
3664
           wouldn't work here because TYPE_MODE (t) and
3665
           TYPE_MODE (TREE_OPERAND (t, 0)) are different.
3666
           They are VOIDmode and Pmode, respectively.  */
3667
        if (TREE_CODE (t) == NOP_EXPR)
3668
          t = TREE_OPERAND (t, 0);
3669
 
3670
      TREE_VEC_ELT (info, 1) = omp_clause_info_fndecl (t, type);
3671
    }
3672
 
3673
  if (need_copy_assignment && !TYPE_HAS_TRIVIAL_ASSIGN_REF (type))
3674
    {
3675
      VEC(tree,gc) *vec;
3676
 
3677
      t = build_int_cst (build_pointer_type (type), 0);
3678
      t = build1 (INDIRECT_REF, type, t);
3679
      vec = make_tree_vector_single (t);
3680
      t = build_special_member_call (t, ansi_assopname (NOP_EXPR),
3681
                                     &vec, type, LOOKUP_NORMAL,
3682
                                     tf_warning_or_error);
3683
      release_tree_vector (vec);
3684
 
3685
      /* We'll have called convert_from_reference on the call, which
3686
         may well have added an indirect_ref.  It's unneeded here,
3687
         and in the way, so kill it.  */
3688
      if (TREE_CODE (t) == INDIRECT_REF)
3689
        t = TREE_OPERAND (t, 0);
3690
 
3691
      TREE_VEC_ELT (info, 2) = omp_clause_info_fndecl (t, type);
3692
    }
3693
 
3694
  return errorcount != save_errorcount;
3695
}
3696
 
3697
/* For all elements of CLAUSES, validate them vs OpenMP constraints.
3698
   Remove any elements from the list that are invalid.  */
3699
 
3700
tree
3701
finish_omp_clauses (tree clauses)
3702
{
3703
  bitmap_head generic_head, firstprivate_head, lastprivate_head;
3704
  tree c, t, *pc = &clauses;
3705
  const char *name;
3706
 
3707
  bitmap_obstack_initialize (NULL);
3708
  bitmap_initialize (&generic_head, &bitmap_default_obstack);
3709
  bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
3710
  bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
3711
 
3712
  for (pc = &clauses, c = clauses; c ; c = *pc)
3713
    {
3714
      bool remove = false;
3715
 
3716
      switch (OMP_CLAUSE_CODE (c))
3717
        {
3718
        case OMP_CLAUSE_SHARED:
3719
          name = "shared";
3720
          goto check_dup_generic;
3721
        case OMP_CLAUSE_PRIVATE:
3722
          name = "private";
3723
          goto check_dup_generic;
3724
        case OMP_CLAUSE_REDUCTION:
3725
          name = "reduction";
3726
          goto check_dup_generic;
3727
        case OMP_CLAUSE_COPYPRIVATE:
3728
          name = "copyprivate";
3729
          goto check_dup_generic;
3730
        case OMP_CLAUSE_COPYIN:
3731
          name = "copyin";
3732
          goto check_dup_generic;
3733
        check_dup_generic:
3734
          t = OMP_CLAUSE_DECL (c);
3735
          if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3736
            {
3737
              if (processing_template_decl)
3738
                break;
3739
              if (DECL_P (t))
3740
                error ("%qD is not a variable in clause %qs", t, name);
3741
              else
3742
                error ("%qE is not a variable in clause %qs", t, name);
3743
              remove = true;
3744
            }
3745
          else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3746
                   || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
3747
                   || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3748
            {
3749
              error ("%qD appears more than once in data clauses", t);
3750
              remove = true;
3751
            }
3752
          else
3753
            bitmap_set_bit (&generic_head, DECL_UID (t));
3754
          break;
3755
 
3756
        case OMP_CLAUSE_FIRSTPRIVATE:
3757
          t = OMP_CLAUSE_DECL (c);
3758
          if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3759
            {
3760
              if (processing_template_decl)
3761
                break;
3762
              if (DECL_P (t))
3763
                error ("%qD is not a variable in clause %<firstprivate%>", t);
3764
              else
3765
                error ("%qE is not a variable in clause %<firstprivate%>", t);
3766
              remove = true;
3767
            }
3768
          else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3769
                   || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3770
            {
3771
              error ("%qD appears more than once in data clauses", t);
3772
              remove = true;
3773
            }
3774
          else
3775
            bitmap_set_bit (&firstprivate_head, DECL_UID (t));
3776
          break;
3777
 
3778
        case OMP_CLAUSE_LASTPRIVATE:
3779
          t = OMP_CLAUSE_DECL (c);
3780
          if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3781
            {
3782
              if (processing_template_decl)
3783
                break;
3784
              if (DECL_P (t))
3785
                error ("%qD is not a variable in clause %<lastprivate%>", t);
3786
              else
3787
                error ("%qE is not a variable in clause %<lastprivate%>", t);
3788
              remove = true;
3789
            }
3790
          else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3791
                   || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3792
            {
3793
              error ("%qD appears more than once in data clauses", t);
3794
              remove = true;
3795
            }
3796
          else
3797
            bitmap_set_bit (&lastprivate_head, DECL_UID (t));
3798
          break;
3799
 
3800
        case OMP_CLAUSE_IF:
3801
          t = OMP_CLAUSE_IF_EXPR (c);
3802
          t = maybe_convert_cond (t);
3803
          if (t == error_mark_node)
3804
            remove = true;
3805
          OMP_CLAUSE_IF_EXPR (c) = t;
3806
          break;
3807
 
3808
        case OMP_CLAUSE_NUM_THREADS:
3809
          t = OMP_CLAUSE_NUM_THREADS_EXPR (c);
3810
          if (t == error_mark_node)
3811
            remove = true;
3812
          else if (!type_dependent_expression_p (t)
3813
                   && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
3814
            {
3815
              error ("num_threads expression must be integral");
3816
              remove = true;
3817
            }
3818
          break;
3819
 
3820
        case OMP_CLAUSE_SCHEDULE:
3821
          t = OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c);
3822
          if (t == NULL)
3823
            ;
3824
          else if (t == error_mark_node)
3825
            remove = true;
3826
          else if (!type_dependent_expression_p (t)
3827
                   && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
3828
            {
3829
              error ("schedule chunk size expression must be integral");
3830
              remove = true;
3831
            }
3832
          break;
3833
 
3834
        case OMP_CLAUSE_NOWAIT:
3835
        case OMP_CLAUSE_ORDERED:
3836
        case OMP_CLAUSE_DEFAULT:
3837
        case OMP_CLAUSE_UNTIED:
3838
        case OMP_CLAUSE_COLLAPSE:
3839
          break;
3840
 
3841
        default:
3842
          gcc_unreachable ();
3843
        }
3844
 
3845
      if (remove)
3846
        *pc = OMP_CLAUSE_CHAIN (c);
3847
      else
3848
        pc = &OMP_CLAUSE_CHAIN (c);
3849
    }
3850
 
3851
  for (pc = &clauses, c = clauses; c ; c = *pc)
3852
    {
3853
      enum omp_clause_code c_kind = OMP_CLAUSE_CODE (c);
3854
      bool remove = false;
3855
      bool need_complete_non_reference = false;
3856
      bool need_default_ctor = false;
3857
      bool need_copy_ctor = false;
3858
      bool need_copy_assignment = false;
3859
      bool need_implicitly_determined = false;
3860
      tree type, inner_type;
3861
 
3862
      switch (c_kind)
3863
        {
3864
        case OMP_CLAUSE_SHARED:
3865
          name = "shared";
3866
          need_implicitly_determined = true;
3867
          break;
3868
        case OMP_CLAUSE_PRIVATE:
3869
          name = "private";
3870
          need_complete_non_reference = true;
3871
          need_default_ctor = true;
3872
          need_implicitly_determined = true;
3873
          break;
3874
        case OMP_CLAUSE_FIRSTPRIVATE:
3875
          name = "firstprivate";
3876
          need_complete_non_reference = true;
3877
          need_copy_ctor = true;
3878
          need_implicitly_determined = true;
3879
          break;
3880
        case OMP_CLAUSE_LASTPRIVATE:
3881
          name = "lastprivate";
3882
          need_complete_non_reference = true;
3883
          need_copy_assignment = true;
3884
          need_implicitly_determined = true;
3885
          break;
3886
        case OMP_CLAUSE_REDUCTION:
3887
          name = "reduction";
3888
          need_implicitly_determined = true;
3889
          break;
3890
        case OMP_CLAUSE_COPYPRIVATE:
3891
          name = "copyprivate";
3892
          need_copy_assignment = true;
3893
          break;
3894
        case OMP_CLAUSE_COPYIN:
3895
          name = "copyin";
3896
          need_copy_assignment = true;
3897
          break;
3898
        default:
3899
          pc = &OMP_CLAUSE_CHAIN (c);
3900
          continue;
3901
        }
3902
 
3903
      t = OMP_CLAUSE_DECL (c);
3904
      if (processing_template_decl
3905
          && TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3906
        {
3907
          pc = &OMP_CLAUSE_CHAIN (c);
3908
          continue;
3909
        }
3910
 
3911
      switch (c_kind)
3912
        {
3913
        case OMP_CLAUSE_LASTPRIVATE:
3914
          if (!bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3915
            need_default_ctor = true;
3916
          break;
3917
 
3918
        case OMP_CLAUSE_REDUCTION:
3919
          if (AGGREGATE_TYPE_P (TREE_TYPE (t))
3920
              || POINTER_TYPE_P (TREE_TYPE (t)))
3921
            {
3922
              error ("%qE has invalid type for %<reduction%>", t);
3923
              remove = true;
3924
            }
3925
          else if (FLOAT_TYPE_P (TREE_TYPE (t)))
3926
            {
3927
              enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
3928
              switch (r_code)
3929
                {
3930
                case PLUS_EXPR:
3931
                case MULT_EXPR:
3932
                case MINUS_EXPR:
3933
                  break;
3934
                default:
3935
                  error ("%qE has invalid type for %<reduction(%s)%>",
3936
                         t, operator_name_info[r_code].name);
3937
                  remove = true;
3938
                }
3939
            }
3940
          break;
3941
 
3942
        case OMP_CLAUSE_COPYIN:
3943
          if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
3944
            {
3945
              error ("%qE must be %<threadprivate%> for %<copyin%>", t);
3946
              remove = true;
3947
            }
3948
          break;
3949
 
3950
        default:
3951
          break;
3952
        }
3953
 
3954
      if (need_complete_non_reference)
3955
        {
3956
          t = require_complete_type (t);
3957
          if (t == error_mark_node)
3958
            remove = true;
3959
          else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
3960
            {
3961
              error ("%qE has reference type for %qs", t, name);
3962
              remove = true;
3963
            }
3964
        }
3965
      if (need_implicitly_determined)
3966
        {
3967
          const char *share_name = NULL;
3968
 
3969
          if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
3970
            share_name = "threadprivate";
3971
          else switch (cxx_omp_predetermined_sharing (t))
3972
            {
3973
            case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
3974
              break;
3975
            case OMP_CLAUSE_DEFAULT_SHARED:
3976
              share_name = "shared";
3977
              break;
3978
            case OMP_CLAUSE_DEFAULT_PRIVATE:
3979
              share_name = "private";
3980
              break;
3981
            default:
3982
              gcc_unreachable ();
3983
            }
3984
          if (share_name)
3985
            {
3986
              error ("%qE is predetermined %qs for %qs",
3987
                     t, share_name, name);
3988
              remove = true;
3989
            }
3990
        }
3991
 
3992
      /* We're interested in the base element, not arrays.  */
3993
      inner_type = type = TREE_TYPE (t);
3994
      while (TREE_CODE (inner_type) == ARRAY_TYPE)
3995
        inner_type = TREE_TYPE (inner_type);
3996
 
3997
      /* Check for special function availability by building a call to one.
3998
         Save the results, because later we won't be in the right context
3999
         for making these queries.  */
4000
      if (CLASS_TYPE_P (inner_type)
4001
          && (need_default_ctor || need_copy_ctor || need_copy_assignment)
4002
          && !type_dependent_expression_p (t)
4003
          && cxx_omp_create_clause_info (c, inner_type, need_default_ctor,
4004
                                         need_copy_ctor, need_copy_assignment))
4005
        remove = true;
4006
 
4007
      if (remove)
4008
        *pc = OMP_CLAUSE_CHAIN (c);
4009
      else
4010
        pc = &OMP_CLAUSE_CHAIN (c);
4011
    }
4012
 
4013
  bitmap_obstack_release (NULL);
4014
  return clauses;
4015
}
4016
 
4017
/* For all variables in the tree_list VARS, mark them as thread local.  */
4018
 
4019
void
4020
finish_omp_threadprivate (tree vars)
4021
{
4022
  tree t;
4023
 
4024
  /* Mark every variable in VARS to be assigned thread local storage.  */
4025
  for (t = vars; t; t = TREE_CHAIN (t))
4026
    {
4027
      tree v = TREE_PURPOSE (t);
4028
 
4029
      if (error_operand_p (v))
4030
        ;
4031
      else if (TREE_CODE (v) != VAR_DECL)
4032
        error ("%<threadprivate%> %qD is not file, namespace "
4033
               "or block scope variable", v);
4034
      /* If V had already been marked threadprivate, it doesn't matter
4035
         whether it had been used prior to this point.  */
4036
      else if (TREE_USED (v)
4037
          && (DECL_LANG_SPECIFIC (v) == NULL
4038
              || !CP_DECL_THREADPRIVATE_P (v)))
4039
        error ("%qE declared %<threadprivate%> after first use", v);
4040
      else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
4041
        error ("automatic variable %qE cannot be %<threadprivate%>", v);
4042
      else if (! COMPLETE_TYPE_P (TREE_TYPE (v)))
4043
        error ("%<threadprivate%> %qE has incomplete type", v);
4044
      else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v))
4045
               && CP_DECL_CONTEXT (v) != current_class_type)
4046
        error ("%<threadprivate%> %qE directive not "
4047
               "in %qT definition", v, CP_DECL_CONTEXT (v));
4048
      else
4049
        {
4050
          /* Allocate a LANG_SPECIFIC structure for V, if needed.  */
4051
          if (DECL_LANG_SPECIFIC (v) == NULL)
4052
            {
4053
              retrofit_lang_decl (v);
4054
 
4055
              /* Make sure that DECL_DISCRIMINATOR_P continues to be true
4056
                 after the allocation of the lang_decl structure.  */
4057
              if (DECL_DISCRIMINATOR_P (v))
4058
                DECL_LANG_SPECIFIC (v)->u.base.u2sel = 1;
4059
            }
4060
 
4061
          if (! DECL_THREAD_LOCAL_P (v))
4062
            {
4063
              DECL_TLS_MODEL (v) = decl_default_tls_model (v);
4064
              /* If rtl has been already set for this var, call
4065
                 make_decl_rtl once again, so that encode_section_info
4066
                 has a chance to look at the new decl flags.  */
4067
              if (DECL_RTL_SET_P (v))
4068
                make_decl_rtl (v);
4069
            }
4070
          CP_DECL_THREADPRIVATE_P (v) = 1;
4071
        }
4072
    }
4073
}
4074
 
4075
/* Build an OpenMP structured block.  */
4076
 
4077
tree
4078
begin_omp_structured_block (void)
4079
{
4080
  return do_pushlevel (sk_omp);
4081
}
4082
 
4083
tree
4084
finish_omp_structured_block (tree block)
4085
{
4086
  return do_poplevel (block);
4087
}
4088
 
4089
/* Similarly, except force the retention of the BLOCK.  */
4090
 
4091
tree
4092
begin_omp_parallel (void)
4093
{
4094
  keep_next_level (true);
4095
  return begin_omp_structured_block ();
4096
}
4097
 
4098
tree
4099
finish_omp_parallel (tree clauses, tree body)
4100
{
4101
  tree stmt;
4102
 
4103
  body = finish_omp_structured_block (body);
4104
 
4105
  stmt = make_node (OMP_PARALLEL);
4106
  TREE_TYPE (stmt) = void_type_node;
4107
  OMP_PARALLEL_CLAUSES (stmt) = clauses;
4108
  OMP_PARALLEL_BODY (stmt) = body;
4109
 
4110
  return add_stmt (stmt);
4111
}
4112
 
4113
tree
4114
begin_omp_task (void)
4115
{
4116
  keep_next_level (true);
4117
  return begin_omp_structured_block ();
4118
}
4119
 
4120
tree
4121
finish_omp_task (tree clauses, tree body)
4122
{
4123
  tree stmt;
4124
 
4125
  body = finish_omp_structured_block (body);
4126
 
4127
  stmt = make_node (OMP_TASK);
4128
  TREE_TYPE (stmt) = void_type_node;
4129
  OMP_TASK_CLAUSES (stmt) = clauses;
4130
  OMP_TASK_BODY (stmt) = body;
4131
 
4132
  return add_stmt (stmt);
4133
}
4134
 
4135
/* Helper function for finish_omp_for.  Convert Ith random access iterator
4136
   into integral iterator.  Return FALSE if successful.  */
4137
 
4138
static bool
4139
handle_omp_for_class_iterator (int i, location_t locus, tree declv, tree initv,
4140
                               tree condv, tree incrv, tree *body,
4141
                               tree *pre_body, tree clauses)
4142
{
4143
  tree diff, iter_init, iter_incr = NULL, last;
4144
  tree incr_var = NULL, orig_pre_body, orig_body, c;
4145
  tree decl = TREE_VEC_ELT (declv, i);
4146
  tree init = TREE_VEC_ELT (initv, i);
4147
  tree cond = TREE_VEC_ELT (condv, i);
4148
  tree incr = TREE_VEC_ELT (incrv, i);
4149
  tree iter = decl;
4150
  location_t elocus = locus;
4151
 
4152
  if (init && EXPR_HAS_LOCATION (init))
4153
    elocus = EXPR_LOCATION (init);
4154
 
4155
  switch (TREE_CODE (cond))
4156
    {
4157
    case GT_EXPR:
4158
    case GE_EXPR:
4159
    case LT_EXPR:
4160
    case LE_EXPR:
4161
      if (TREE_OPERAND (cond, 1) == iter)
4162
        cond = build2 (swap_tree_comparison (TREE_CODE (cond)),
4163
                       TREE_TYPE (cond), iter, TREE_OPERAND (cond, 0));
4164
      if (TREE_OPERAND (cond, 0) != iter)
4165
        cond = error_mark_node;
4166
      else
4167
        {
4168
          tree tem = build_x_binary_op (TREE_CODE (cond), iter, ERROR_MARK,
4169
                                        TREE_OPERAND (cond, 1), ERROR_MARK,
4170
                                        NULL, tf_warning_or_error);
4171
          if (error_operand_p (tem))
4172
            return true;
4173
        }
4174
      break;
4175
    default:
4176
      cond = error_mark_node;
4177
      break;
4178
    }
4179
  if (cond == error_mark_node)
4180
    {
4181
      error_at (elocus, "invalid controlling predicate");
4182
      return true;
4183
    }
4184
  diff = build_x_binary_op (MINUS_EXPR, TREE_OPERAND (cond, 1),
4185
                            ERROR_MARK, iter, ERROR_MARK, NULL,
4186
                            tf_warning_or_error);
4187
  if (error_operand_p (diff))
4188
    return true;
4189
  if (TREE_CODE (TREE_TYPE (diff)) != INTEGER_TYPE)
4190
    {
4191
      error_at (elocus, "difference between %qE and %qD does not have integer type",
4192
                TREE_OPERAND (cond, 1), iter);
4193
      return true;
4194
    }
4195
 
4196
  switch (TREE_CODE (incr))
4197
    {
4198
    case PREINCREMENT_EXPR:
4199
    case PREDECREMENT_EXPR:
4200
    case POSTINCREMENT_EXPR:
4201
    case POSTDECREMENT_EXPR:
4202
      if (TREE_OPERAND (incr, 0) != iter)
4203
        {
4204
          incr = error_mark_node;
4205
          break;
4206
        }
4207
      iter_incr = build_x_unary_op (TREE_CODE (incr), iter,
4208
                                    tf_warning_or_error);
4209
      if (error_operand_p (iter_incr))
4210
        return true;
4211
      else if (TREE_CODE (incr) == PREINCREMENT_EXPR
4212
               || TREE_CODE (incr) == POSTINCREMENT_EXPR)
4213
        incr = integer_one_node;
4214
      else
4215
        incr = integer_minus_one_node;
4216
      break;
4217
    case MODIFY_EXPR:
4218
      if (TREE_OPERAND (incr, 0) != iter)
4219
        incr = error_mark_node;
4220
      else if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
4221
               || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
4222
        {
4223
          tree rhs = TREE_OPERAND (incr, 1);
4224
          if (TREE_OPERAND (rhs, 0) == iter)
4225
            {
4226
              if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 1)))
4227
                  != INTEGER_TYPE)
4228
                incr = error_mark_node;
4229
              else
4230
                {
4231
                  iter_incr = build_x_modify_expr (iter, TREE_CODE (rhs),
4232
                                                   TREE_OPERAND (rhs, 1),
4233
                                                   tf_warning_or_error);
4234
                  if (error_operand_p (iter_incr))
4235
                    return true;
4236
                  incr = TREE_OPERAND (rhs, 1);
4237
                  incr = cp_convert (TREE_TYPE (diff), incr);
4238
                  if (TREE_CODE (rhs) == MINUS_EXPR)
4239
                    {
4240
                      incr = build1 (NEGATE_EXPR, TREE_TYPE (diff), incr);
4241
                      incr = fold_if_not_in_template (incr);
4242
                    }
4243
                  if (TREE_CODE (incr) != INTEGER_CST
4244
                      && (TREE_CODE (incr) != NOP_EXPR
4245
                          || (TREE_CODE (TREE_OPERAND (incr, 0))
4246
                              != INTEGER_CST)))
4247
                    iter_incr = NULL;
4248
                }
4249
            }
4250
          else if (TREE_OPERAND (rhs, 1) == iter)
4251
            {
4252
              if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 0))) != INTEGER_TYPE
4253
                  || TREE_CODE (rhs) != PLUS_EXPR)
4254
                incr = error_mark_node;
4255
              else
4256
                {
4257
                  iter_incr = build_x_binary_op (PLUS_EXPR,
4258
                                                 TREE_OPERAND (rhs, 0),
4259
                                                 ERROR_MARK, iter,
4260
                                                 ERROR_MARK, NULL,
4261
                                                 tf_warning_or_error);
4262
                  if (error_operand_p (iter_incr))
4263
                    return true;
4264
                  iter_incr = build_x_modify_expr (iter, NOP_EXPR,
4265
                                                   iter_incr,
4266
                                                   tf_warning_or_error);
4267
                  if (error_operand_p (iter_incr))
4268
                    return true;
4269
                  incr = TREE_OPERAND (rhs, 0);
4270
                  iter_incr = NULL;
4271
                }
4272
            }
4273
          else
4274
            incr = error_mark_node;
4275
        }
4276
      else
4277
        incr = error_mark_node;
4278
      break;
4279
    default:
4280
      incr = error_mark_node;
4281
      break;
4282
    }
4283
 
4284
  if (incr == error_mark_node)
4285
    {
4286
      error_at (elocus, "invalid increment expression");
4287
      return true;
4288
    }
4289
 
4290
  incr = cp_convert (TREE_TYPE (diff), incr);
4291
  for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
4292
    if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
4293
        && OMP_CLAUSE_DECL (c) == iter)
4294
      break;
4295
 
4296
  decl = create_temporary_var (TREE_TYPE (diff));
4297
  pushdecl (decl);
4298
  add_decl_expr (decl);
4299
  last = create_temporary_var (TREE_TYPE (diff));
4300
  pushdecl (last);
4301
  add_decl_expr (last);
4302
  if (c && iter_incr == NULL)
4303
    {
4304
      incr_var = create_temporary_var (TREE_TYPE (diff));
4305
      pushdecl (incr_var);
4306
      add_decl_expr (incr_var);
4307
    }
4308
  gcc_assert (stmts_are_full_exprs_p ());
4309
 
4310
  orig_pre_body = *pre_body;
4311
  *pre_body = push_stmt_list ();
4312
  if (orig_pre_body)
4313
    add_stmt (orig_pre_body);
4314
  if (init != NULL)
4315
    finish_expr_stmt (build_x_modify_expr (iter, NOP_EXPR, init,
4316
                                           tf_warning_or_error));
4317
  init = build_int_cst (TREE_TYPE (diff), 0);
4318
  if (c && iter_incr == NULL)
4319
    {
4320
      finish_expr_stmt (build_x_modify_expr (incr_var, NOP_EXPR,
4321
                                             incr, tf_warning_or_error));
4322
      incr = incr_var;
4323
      iter_incr = build_x_modify_expr (iter, PLUS_EXPR, incr,
4324
                                       tf_warning_or_error);
4325
    }
4326
  finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, init,
4327
                                         tf_warning_or_error));
4328
  *pre_body = pop_stmt_list (*pre_body);
4329
 
4330
  cond = cp_build_binary_op (elocus,
4331
                             TREE_CODE (cond), decl, diff,
4332
                             tf_warning_or_error);
4333
  incr = build_modify_expr (elocus, decl, NULL_TREE, PLUS_EXPR,
4334
                            elocus, incr, NULL_TREE);
4335
 
4336
  orig_body = *body;
4337
  *body = push_stmt_list ();
4338
  iter_init = build2 (MINUS_EXPR, TREE_TYPE (diff), decl, last);
4339
  iter_init = build_x_modify_expr (iter, PLUS_EXPR, iter_init,
4340
                                   tf_warning_or_error);
4341
  iter_init = build1 (NOP_EXPR, void_type_node, iter_init);
4342
  finish_expr_stmt (iter_init);
4343
  finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, decl,
4344
                                         tf_warning_or_error));
4345
  add_stmt (orig_body);
4346
  *body = pop_stmt_list (*body);
4347
 
4348
  if (c)
4349
    {
4350
      OMP_CLAUSE_LASTPRIVATE_STMT (c) = push_stmt_list ();
4351
      finish_expr_stmt (iter_incr);
4352
      OMP_CLAUSE_LASTPRIVATE_STMT (c)
4353
        = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (c));
4354
    }
4355
 
4356
  TREE_VEC_ELT (declv, i) = decl;
4357
  TREE_VEC_ELT (initv, i) = init;
4358
  TREE_VEC_ELT (condv, i) = cond;
4359
  TREE_VEC_ELT (incrv, i) = incr;
4360
 
4361
  return false;
4362
}
4363
 
4364
/* Build and validate an OMP_FOR statement.  CLAUSES, BODY, COND, INCR
4365
   are directly for their associated operands in the statement.  DECL
4366
   and INIT are a combo; if DECL is NULL then INIT ought to be a
4367
   MODIFY_EXPR, and the DECL should be extracted.  PRE_BODY are
4368
   optional statements that need to go before the loop into its
4369
   sk_omp scope.  */
4370
 
4371
tree
4372
finish_omp_for (location_t locus, tree declv, tree initv, tree condv,
4373
                tree incrv, tree body, tree pre_body, tree clauses)
4374
{
4375
  tree omp_for = NULL, orig_incr = NULL;
4376
  tree decl, init, cond, incr;
4377
  location_t elocus;
4378
  int i;
4379
 
4380
  gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (initv));
4381
  gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (condv));
4382
  gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (incrv));
4383
  for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4384
    {
4385
      decl = TREE_VEC_ELT (declv, i);
4386
      init = TREE_VEC_ELT (initv, i);
4387
      cond = TREE_VEC_ELT (condv, i);
4388
      incr = TREE_VEC_ELT (incrv, i);
4389
      elocus = locus;
4390
 
4391
      if (decl == NULL)
4392
        {
4393
          if (init != NULL)
4394
            switch (TREE_CODE (init))
4395
              {
4396
              case MODIFY_EXPR:
4397
                decl = TREE_OPERAND (init, 0);
4398
                init = TREE_OPERAND (init, 1);
4399
                break;
4400
              case MODOP_EXPR:
4401
                if (TREE_CODE (TREE_OPERAND (init, 1)) == NOP_EXPR)
4402
                  {
4403
                    decl = TREE_OPERAND (init, 0);
4404
                    init = TREE_OPERAND (init, 2);
4405
                  }
4406
                break;
4407
              default:
4408
                break;
4409
              }
4410
 
4411
          if (decl == NULL)
4412
            {
4413
              error_at (locus,
4414
                        "expected iteration declaration or initialization");
4415
              return NULL;
4416
            }
4417
        }
4418
 
4419
      if (init && EXPR_HAS_LOCATION (init))
4420
        elocus = EXPR_LOCATION (init);
4421
 
4422
      if (cond == NULL)
4423
        {
4424
          error_at (elocus, "missing controlling predicate");
4425
          return NULL;
4426
        }
4427
 
4428
      if (incr == NULL)
4429
        {
4430
          error_at (elocus, "missing increment expression");
4431
          return NULL;
4432
        }
4433
 
4434
      TREE_VEC_ELT (declv, i) = decl;
4435
      TREE_VEC_ELT (initv, i) = init;
4436
    }
4437
 
4438
  if (dependent_omp_for_p (declv, initv, condv, incrv))
4439
    {
4440
      tree stmt;
4441
 
4442
      stmt = make_node (OMP_FOR);
4443
 
4444
      for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4445
        {
4446
          /* This is really just a place-holder.  We'll be decomposing this
4447
             again and going through the cp_build_modify_expr path below when
4448
             we instantiate the thing.  */
4449
          TREE_VEC_ELT (initv, i)
4450
            = build2 (MODIFY_EXPR, void_type_node, TREE_VEC_ELT (declv, i),
4451
                      TREE_VEC_ELT (initv, i));
4452
        }
4453
 
4454
      TREE_TYPE (stmt) = void_type_node;
4455
      OMP_FOR_INIT (stmt) = initv;
4456
      OMP_FOR_COND (stmt) = condv;
4457
      OMP_FOR_INCR (stmt) = incrv;
4458
      OMP_FOR_BODY (stmt) = body;
4459
      OMP_FOR_PRE_BODY (stmt) = pre_body;
4460
      OMP_FOR_CLAUSES (stmt) = clauses;
4461
 
4462
      SET_EXPR_LOCATION (stmt, locus);
4463
      return add_stmt (stmt);
4464
    }
4465
 
4466
  if (processing_template_decl)
4467
    orig_incr = make_tree_vec (TREE_VEC_LENGTH (incrv));
4468
 
4469
  for (i = 0; i < TREE_VEC_LENGTH (declv); )
4470
    {
4471
      decl = TREE_VEC_ELT (declv, i);
4472
      init = TREE_VEC_ELT (initv, i);
4473
      cond = TREE_VEC_ELT (condv, i);
4474
      incr = TREE_VEC_ELT (incrv, i);
4475
      if (orig_incr)
4476
        TREE_VEC_ELT (orig_incr, i) = incr;
4477
      elocus = locus;
4478
 
4479
      if (init && EXPR_HAS_LOCATION (init))
4480
        elocus = EXPR_LOCATION (init);
4481
 
4482
      if (!DECL_P (decl))
4483
        {
4484
          error_at (elocus, "expected iteration declaration or initialization");
4485
          return NULL;
4486
        }
4487
 
4488
      if (incr && TREE_CODE (incr) == MODOP_EXPR)
4489
        {
4490
          if (orig_incr)
4491
            TREE_VEC_ELT (orig_incr, i) = incr;
4492
          incr = cp_build_modify_expr (TREE_OPERAND (incr, 0),
4493
                                       TREE_CODE (TREE_OPERAND (incr, 1)),
4494
                                       TREE_OPERAND (incr, 2),
4495
                                       tf_warning_or_error);
4496
        }
4497
 
4498
      if (CLASS_TYPE_P (TREE_TYPE (decl)))
4499
        {
4500
          if (handle_omp_for_class_iterator (i, locus, declv, initv, condv,
4501
                                             incrv, &body, &pre_body, clauses))
4502
            return NULL;
4503
          continue;
4504
        }
4505
 
4506
      if (!INTEGRAL_TYPE_P (TREE_TYPE (decl))
4507
          && TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
4508
        {
4509
          error_at (elocus, "invalid type for iteration variable %qE", decl);
4510
          return NULL;
4511
        }
4512
 
4513
      if (!processing_template_decl)
4514
        {
4515
          init = fold_build_cleanup_point_expr (TREE_TYPE (init), init);
4516
          init = cp_build_modify_expr (decl, NOP_EXPR, init, tf_warning_or_error);
4517
        }
4518
      else
4519
        init = build2 (MODIFY_EXPR, void_type_node, decl, init);
4520
      if (cond
4521
          && TREE_SIDE_EFFECTS (cond)
4522
          && COMPARISON_CLASS_P (cond)
4523
          && !processing_template_decl)
4524
        {
4525
          tree t = TREE_OPERAND (cond, 0);
4526
          if (TREE_SIDE_EFFECTS (t)
4527
              && t != decl
4528
              && (TREE_CODE (t) != NOP_EXPR
4529
                  || TREE_OPERAND (t, 0) != decl))
4530
            TREE_OPERAND (cond, 0)
4531
              = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4532
 
4533
          t = TREE_OPERAND (cond, 1);
4534
          if (TREE_SIDE_EFFECTS (t)
4535
              && t != decl
4536
              && (TREE_CODE (t) != NOP_EXPR
4537
                  || TREE_OPERAND (t, 0) != decl))
4538
            TREE_OPERAND (cond, 1)
4539
              = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4540
        }
4541
      if (decl == error_mark_node || init == error_mark_node)
4542
        return NULL;
4543
 
4544
      TREE_VEC_ELT (declv, i) = decl;
4545
      TREE_VEC_ELT (initv, i) = init;
4546
      TREE_VEC_ELT (condv, i) = cond;
4547
      TREE_VEC_ELT (incrv, i) = incr;
4548
      i++;
4549
    }
4550
 
4551
  if (IS_EMPTY_STMT (pre_body))
4552
    pre_body = NULL;
4553
 
4554
  omp_for = c_finish_omp_for (locus, declv, initv, condv, incrv,
4555
                              body, pre_body);
4556
 
4557
  if (omp_for == NULL)
4558
    return NULL;
4559
 
4560
  for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INCR (omp_for)); i++)
4561
    {
4562
      decl = TREE_OPERAND (TREE_VEC_ELT (OMP_FOR_INIT (omp_for), i), 0);
4563
      incr = TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i);
4564
 
4565
      if (TREE_CODE (incr) != MODIFY_EXPR)
4566
        continue;
4567
 
4568
      if (TREE_SIDE_EFFECTS (TREE_OPERAND (incr, 1))
4569
          && BINARY_CLASS_P (TREE_OPERAND (incr, 1))
4570
          && !processing_template_decl)
4571
        {
4572
          tree t = TREE_OPERAND (TREE_OPERAND (incr, 1), 0);
4573
          if (TREE_SIDE_EFFECTS (t)
4574
              && t != decl
4575
              && (TREE_CODE (t) != NOP_EXPR
4576
                  || TREE_OPERAND (t, 0) != decl))
4577
            TREE_OPERAND (TREE_OPERAND (incr, 1), 0)
4578
              = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4579
 
4580
          t = TREE_OPERAND (TREE_OPERAND (incr, 1), 1);
4581
          if (TREE_SIDE_EFFECTS (t)
4582
              && t != decl
4583
              && (TREE_CODE (t) != NOP_EXPR
4584
                  || TREE_OPERAND (t, 0) != decl))
4585
            TREE_OPERAND (TREE_OPERAND (incr, 1), 1)
4586
              = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4587
        }
4588
 
4589
      if (orig_incr)
4590
        TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i) = TREE_VEC_ELT (orig_incr, i);
4591
    }
4592
  if (omp_for != NULL)
4593
    OMP_FOR_CLAUSES (omp_for) = clauses;
4594
  return omp_for;
4595
}
4596
 
4597
void
4598
finish_omp_atomic (enum tree_code code, tree lhs, tree rhs)
4599
{
4600
  tree orig_lhs;
4601
  tree orig_rhs;
4602
  bool dependent_p;
4603
  tree stmt;
4604
 
4605
  orig_lhs = lhs;
4606
  orig_rhs = rhs;
4607
  dependent_p = false;
4608
  stmt = NULL_TREE;
4609
 
4610
  /* Even in a template, we can detect invalid uses of the atomic
4611
     pragma if neither LHS nor RHS is type-dependent.  */
4612
  if (processing_template_decl)
4613
    {
4614
      dependent_p = (type_dependent_expression_p (lhs)
4615
                     || type_dependent_expression_p (rhs));
4616
      if (!dependent_p)
4617
        {
4618
          lhs = build_non_dependent_expr (lhs);
4619
          rhs = build_non_dependent_expr (rhs);
4620
        }
4621
    }
4622
  if (!dependent_p)
4623
    {
4624
      stmt = c_finish_omp_atomic (input_location, code, lhs, rhs);
4625
      if (stmt == error_mark_node)
4626
        return;
4627
    }
4628
  if (processing_template_decl)
4629
    stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node,
4630
                   build2 (code, void_type_node, orig_lhs, orig_rhs));
4631
  add_stmt (stmt);
4632
}
4633
 
4634
void
4635
finish_omp_barrier (void)
4636
{
4637
  tree fn = built_in_decls[BUILT_IN_GOMP_BARRIER];
4638
  VEC(tree,gc) *vec = make_tree_vector ();
4639
  tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4640
  release_tree_vector (vec);
4641
  finish_expr_stmt (stmt);
4642
}
4643
 
4644
void
4645
finish_omp_flush (void)
4646
{
4647
  tree fn = built_in_decls[BUILT_IN_SYNCHRONIZE];
4648
  VEC(tree,gc) *vec = make_tree_vector ();
4649
  tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4650
  release_tree_vector (vec);
4651
  finish_expr_stmt (stmt);
4652
}
4653
 
4654
void
4655
finish_omp_taskwait (void)
4656
{
4657
  tree fn = built_in_decls[BUILT_IN_GOMP_TASKWAIT];
4658
  VEC(tree,gc) *vec = make_tree_vector ();
4659
  tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4660
  release_tree_vector (vec);
4661
  finish_expr_stmt (stmt);
4662
}
4663
 
4664
void
4665
init_cp_semantics (void)
4666
{
4667
}
4668
 
4669
/* Build a STATIC_ASSERT for a static assertion with the condition
4670
   CONDITION and the message text MESSAGE.  LOCATION is the location
4671
   of the static assertion in the source code.  When MEMBER_P, this
4672
   static assertion is a member of a class.  */
4673
void
4674
finish_static_assert (tree condition, tree message, location_t location,
4675
                      bool member_p)
4676
{
4677
  if (check_for_bare_parameter_packs (condition))
4678
    condition = error_mark_node;
4679
 
4680
  if (type_dependent_expression_p (condition)
4681
      || value_dependent_expression_p (condition))
4682
    {
4683
      /* We're in a template; build a STATIC_ASSERT and put it in
4684
         the right place. */
4685
      tree assertion;
4686
 
4687
      assertion = make_node (STATIC_ASSERT);
4688
      STATIC_ASSERT_CONDITION (assertion) = condition;
4689
      STATIC_ASSERT_MESSAGE (assertion) = message;
4690
      STATIC_ASSERT_SOURCE_LOCATION (assertion) = location;
4691
 
4692
      if (member_p)
4693
        maybe_add_class_template_decl_list (current_class_type,
4694
                                            assertion,
4695
                                            /*friend_p=*/0);
4696
      else
4697
        add_stmt (assertion);
4698
 
4699
      return;
4700
    }
4701
 
4702
  /* Fold the expression and convert it to a boolean value. */
4703
  condition = fold_non_dependent_expr (condition);
4704
  condition = cp_convert (boolean_type_node, condition);
4705
 
4706
  if (TREE_CODE (condition) == INTEGER_CST && !integer_zerop (condition))
4707
    /* Do nothing; the condition is satisfied. */
4708
    ;
4709
  else
4710
    {
4711
      location_t saved_loc = input_location;
4712
 
4713
      input_location = location;
4714
      if (TREE_CODE (condition) == INTEGER_CST
4715
          && integer_zerop (condition))
4716
        /* Report the error. */
4717
        error ("static assertion failed: %E", message);
4718
      else if (condition && condition != error_mark_node)
4719
        error ("non-constant condition for static assertion");
4720
      input_location = saved_loc;
4721
    }
4722
}
4723
 
4724
/* Returns the type of EXPR for cases where we can determine it even though
4725
   EXPR is a type-dependent expression.  */
4726
 
4727
tree
4728
describable_type (tree expr)
4729
{
4730
  tree type = NULL_TREE;
4731
 
4732
  if (! type_dependent_expression_p (expr)
4733
      && ! type_unknown_p (expr))
4734
    {
4735
      type = unlowered_expr_type (expr);
4736
      if (real_lvalue_p (expr))
4737
        type = build_reference_type (type);
4738
    }
4739
 
4740
  if (type)
4741
    return type;
4742
 
4743
  switch (TREE_CODE (expr))
4744
    {
4745
    case VAR_DECL:
4746
    case PARM_DECL:
4747
    case RESULT_DECL:
4748
    case FUNCTION_DECL:
4749
      return TREE_TYPE (expr);
4750
      break;
4751
 
4752
    case NEW_EXPR:
4753
    case CONST_DECL:
4754
    case TEMPLATE_PARM_INDEX:
4755
    case CAST_EXPR:
4756
    case STATIC_CAST_EXPR:
4757
    case REINTERPRET_CAST_EXPR:
4758
    case CONST_CAST_EXPR:
4759
    case DYNAMIC_CAST_EXPR:
4760
      type = TREE_TYPE (expr);
4761
      break;
4762
 
4763
    case INDIRECT_REF:
4764
      {
4765
        tree ptrtype = describable_type (TREE_OPERAND (expr, 0));
4766
        if (ptrtype && POINTER_TYPE_P (ptrtype))
4767
          type = build_reference_type (TREE_TYPE (ptrtype));
4768
      }
4769
      break;
4770
 
4771
    default:
4772
      if (TREE_CODE_CLASS (TREE_CODE (expr)) == tcc_constant)
4773
        type = TREE_TYPE (expr);
4774
      break;
4775
    }
4776
 
4777
  if (type && type_uses_auto (type))
4778
    return NULL_TREE;
4779
  else
4780
    return type;
4781
}
4782
 
4783
/* Implements the C++0x decltype keyword. Returns the type of EXPR,
4784
   suitable for use as a type-specifier.
4785
 
4786
   ID_EXPRESSION_OR_MEMBER_ACCESS_P is true when EXPR was parsed as an
4787
   id-expression or a class member access, FALSE when it was parsed as
4788
   a full expression.  */
4789
 
4790
tree
4791
finish_decltype_type (tree expr, bool id_expression_or_member_access_p)
4792
{
4793
  tree orig_expr = expr;
4794
  tree type = NULL_TREE;
4795
 
4796
  if (!expr || error_operand_p (expr))
4797
    return error_mark_node;
4798
 
4799
  if (TYPE_P (expr)
4800
      || TREE_CODE (expr) == TYPE_DECL
4801
      || (TREE_CODE (expr) == BIT_NOT_EXPR
4802
          && TYPE_P (TREE_OPERAND (expr, 0))))
4803
    {
4804
      error ("argument to decltype must be an expression");
4805
      return error_mark_node;
4806
    }
4807
 
4808
  if (type_dependent_expression_p (expr)
4809
      /* In a template, a COMPONENT_REF has an IDENTIFIER_NODE for op1 even
4810
         if it isn't dependent, so that we can check access control at
4811
         instantiation time, so defer the decltype as well (PR 42277).  */
4812
      || (id_expression_or_member_access_p
4813
          && processing_template_decl
4814
          && TREE_CODE (expr) == COMPONENT_REF))
4815
    {
4816
      if (id_expression_or_member_access_p)
4817
        {
4818
          switch (TREE_CODE (expr))
4819
            {
4820
            case VAR_DECL:
4821
            case PARM_DECL:
4822
            case RESULT_DECL:
4823
            case FUNCTION_DECL:
4824
            case CONST_DECL:
4825
            case TEMPLATE_PARM_INDEX:
4826
              type = TREE_TYPE (expr);
4827
              break;
4828
 
4829
            default:
4830
              break;
4831
            }
4832
        }
4833
 
4834
      if (type && !type_uses_auto (type))
4835
        return type;
4836
 
4837
    treat_as_dependent:
4838
      type = cxx_make_type (DECLTYPE_TYPE);
4839
      DECLTYPE_TYPE_EXPR (type) = expr;
4840
      DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type)
4841
        = id_expression_or_member_access_p;
4842
      SET_TYPE_STRUCTURAL_EQUALITY (type);
4843
 
4844
      return type;
4845
    }
4846
 
4847
  /* The type denoted by decltype(e) is defined as follows:  */
4848
 
4849
  expr = resolve_nondeduced_context (expr);
4850
  if (id_expression_or_member_access_p)
4851
    {
4852
      /* If e is an id-expression or a class member access (5.2.5
4853
         [expr.ref]), decltype(e) is defined as the type of the entity
4854
         named by e. If there is no such entity, or e names a set of
4855
         overloaded functions, the program is ill-formed.  */
4856
      if (TREE_CODE (expr) == IDENTIFIER_NODE)
4857
        expr = lookup_name (expr);
4858
 
4859
      if (TREE_CODE (expr) == INDIRECT_REF)
4860
        /* This can happen when the expression is, e.g., "a.b". Just
4861
           look at the underlying operand.  */
4862
        expr = TREE_OPERAND (expr, 0);
4863
 
4864
      if (TREE_CODE (expr) == OFFSET_REF
4865
          || TREE_CODE (expr) == MEMBER_REF)
4866
        /* We're only interested in the field itself. If it is a
4867
           BASELINK, we will need to see through it in the next
4868
           step.  */
4869
        expr = TREE_OPERAND (expr, 1);
4870
 
4871
      if (TREE_CODE (expr) == BASELINK)
4872
        /* See through BASELINK nodes to the underlying functions.  */
4873
        expr = BASELINK_FUNCTIONS (expr);
4874
 
4875
      if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
4876
        expr = TREE_OPERAND (expr, 0);
4877
 
4878
      if (TREE_CODE (expr) == OVERLOAD)
4879
        {
4880
          if (OVL_CHAIN (expr)
4881
              || TREE_CODE (OVL_FUNCTION (expr)) == TEMPLATE_DECL)
4882
            {
4883
              error ("%qE refers to a set of overloaded functions", orig_expr);
4884
              return error_mark_node;
4885
            }
4886
          else
4887
            /* An overload set containing only one function: just look
4888
               at that function.  */
4889
            expr = OVL_FUNCTION (expr);
4890
        }
4891
 
4892
      switch (TREE_CODE (expr))
4893
        {
4894
        case FIELD_DECL:
4895
          if (DECL_BIT_FIELD_TYPE (expr))
4896
            {
4897
              type = DECL_BIT_FIELD_TYPE (expr);
4898
              break;
4899
            }
4900
          /* Fall through for fields that aren't bitfields.  */
4901
 
4902
        case FUNCTION_DECL:
4903
        case VAR_DECL:
4904
        case CONST_DECL:
4905
        case PARM_DECL:
4906
        case RESULT_DECL:
4907
        case TEMPLATE_PARM_INDEX:
4908
          type = TREE_TYPE (expr);
4909
          break;
4910
 
4911
        case ERROR_MARK:
4912
          type = error_mark_node;
4913
          break;
4914
 
4915
        case COMPONENT_REF:
4916
          type = is_bitfield_expr_with_lowered_type (expr);
4917
          if (!type)
4918
            type = TREE_TYPE (TREE_OPERAND (expr, 1));
4919
          break;
4920
 
4921
        case BIT_FIELD_REF:
4922
          gcc_unreachable ();
4923
 
4924
        case INTEGER_CST:
4925
          /* We can get here when the id-expression refers to an
4926
             enumerator.  */
4927
          type = TREE_TYPE (expr);
4928
          break;
4929
 
4930
        default:
4931
          gcc_assert (TYPE_P (expr) || DECL_P (expr)
4932
                      || TREE_CODE (expr) == SCOPE_REF);
4933
          error ("argument to decltype must be an expression");
4934
          return error_mark_node;
4935
        }
4936
    }
4937
  else
4938
    {
4939
      /* Expressions of reference type are sometimes wrapped in
4940
         INDIRECT_REFs.  INDIRECT_REFs are just internal compiler
4941
         representation, not part of the language, so we have to look
4942
         through them.  */
4943
      if (TREE_CODE (expr) == INDIRECT_REF
4944
          && TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0)))
4945
          == REFERENCE_TYPE)
4946
        expr = TREE_OPERAND (expr, 0);
4947
 
4948
      if (TREE_CODE (expr) == CALL_EXPR)
4949
        {
4950
          /* If e is a function call (5.2.2 [expr.call]) or an
4951
           invocation of an overloaded operator (parentheses around e
4952
           are ignored), decltype(e) is defined as the return type of
4953
           that function.  */
4954
          tree fndecl = get_callee_fndecl (expr);
4955
          if (fndecl && fndecl != error_mark_node)
4956
            type = TREE_TYPE (TREE_TYPE (fndecl));
4957
          else
4958
            {
4959
              tree target_type = TREE_TYPE (CALL_EXPR_FN (expr));
4960
              if ((TREE_CODE (target_type) == REFERENCE_TYPE
4961
                   || TREE_CODE (target_type) == POINTER_TYPE)
4962
                  && (TREE_CODE (TREE_TYPE (target_type)) == FUNCTION_TYPE
4963
                      || TREE_CODE (TREE_TYPE (target_type)) == METHOD_TYPE))
4964
                type = TREE_TYPE (TREE_TYPE (target_type));
4965
              else if (processing_template_decl)
4966
                /* Within a template finish_call_expr doesn't resolve
4967
                   CALL_EXPR_FN, so even though this decltype isn't really
4968
                   dependent let's defer resolving it.  */
4969
                goto treat_as_dependent;
4970
              else
4971
                sorry ("unable to determine the declared type of expression %<%E%>",
4972
                       expr);
4973
            }
4974
        }
4975
      else
4976
        {
4977
          type = is_bitfield_expr_with_lowered_type (expr);
4978
          if (type)
4979
            {
4980
              /* Bitfields are special, because their type encodes the
4981
                 number of bits they store.  If the expression referenced a
4982
                 bitfield, TYPE now has the declared type of that
4983
                 bitfield.  */
4984
              type = cp_build_qualified_type (type,
4985
                                              cp_type_quals (TREE_TYPE (expr)));
4986
 
4987
              if (real_lvalue_p (expr))
4988
                type = build_reference_type (type);
4989
            }
4990
          /* Within a lambda-expression:
4991
 
4992
             Every occurrence of decltype((x)) where x is a possibly
4993
             parenthesized id-expression that names an entity of
4994
             automatic storage duration is treated as if x were
4995
             transformed into an access to a corresponding data member
4996
             of the closure type that would have been declared if x
4997
             were a use of the denoted entity.  */
4998
          else if (outer_automatic_var_p (expr)
4999
                   && current_function_decl
5000
                   && LAMBDA_FUNCTION_P (current_function_decl))
5001
            type = capture_decltype (expr);
5002
          else
5003
            {
5004
              /* Otherwise, where T is the type of e, if e is an lvalue,
5005
                 decltype(e) is defined as T&, otherwise decltype(e) is
5006
                 defined as T.  */
5007
              type = TREE_TYPE (expr);
5008
              if (type == error_mark_node)
5009
                return error_mark_node;
5010
              else if (expr == current_class_ptr)
5011
                /* If the expression is just "this", we want the
5012
                   cv-unqualified pointer for the "this" type.  */
5013
                type = TYPE_MAIN_VARIANT (type);
5014
              else if (real_lvalue_p (expr))
5015
                {
5016
                  if (TREE_CODE (type) != REFERENCE_TYPE
5017
                      || TYPE_REF_IS_RVALUE (type))
5018
                    type = build_reference_type (non_reference (type));
5019
                }
5020
              else
5021
                type = non_reference (type);
5022
            }
5023
        }
5024
    }
5025
 
5026
  if (!type || type == unknown_type_node)
5027
    {
5028
      error ("type of %qE is unknown", expr);
5029
      return error_mark_node;
5030
    }
5031
 
5032
  return type;
5033
}
5034
 
5035
/* Called from trait_expr_value to evaluate either __has_nothrow_assign or
5036
   __has_nothrow_copy, depending on assign_p.  */
5037
 
5038
static bool
5039
classtype_has_nothrow_assign_or_copy_p (tree type, bool assign_p)
5040
{
5041
  tree fns;
5042
 
5043
  if (assign_p)
5044
    {
5045
      int ix;
5046
      ix = lookup_fnfields_1 (type, ansi_assopname (NOP_EXPR));
5047
      if (ix < 0)
5048
        return false;
5049
      fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), ix);
5050
    }
5051
  else if (TYPE_HAS_INIT_REF (type))
5052
    {
5053
      /* If construction of the copy constructor was postponed, create
5054
         it now.  */
5055
      if (CLASSTYPE_LAZY_COPY_CTOR (type))
5056
        lazily_declare_fn (sfk_copy_constructor, type);
5057
      if (CLASSTYPE_LAZY_MOVE_CTOR (type))
5058
        lazily_declare_fn (sfk_move_constructor, type);
5059
      fns = CLASSTYPE_CONSTRUCTORS (type);
5060
    }
5061
  else
5062
    return false;
5063
 
5064
  for (; fns; fns = OVL_NEXT (fns))
5065
    {
5066
      tree fn = OVL_CURRENT (fns);
5067
 
5068
      if (assign_p)
5069
        {
5070
          if (copy_fn_p (fn) == 0)
5071
            continue;
5072
        }
5073
      else if (copy_fn_p (fn) <= 0)
5074
        continue;
5075
 
5076
      if (!TYPE_NOTHROW_P (TREE_TYPE (fn)))
5077
        return false;
5078
    }
5079
 
5080
  return true;
5081
}
5082
 
5083
/* Actually evaluates the trait.  */
5084
 
5085
static bool
5086
trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
5087
{
5088
  enum tree_code type_code1;
5089
  tree t;
5090
 
5091
  type_code1 = TREE_CODE (type1);
5092
 
5093
  switch (kind)
5094
    {
5095
    case CPTK_HAS_NOTHROW_ASSIGN:
5096
      type1 = strip_array_types (type1);
5097
      return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5098
              && (trait_expr_value (CPTK_HAS_TRIVIAL_ASSIGN, type1, type2)
5099
                  || (CLASS_TYPE_P (type1)
5100
                      && classtype_has_nothrow_assign_or_copy_p (type1,
5101
                                                                 true))));
5102
 
5103
    case CPTK_HAS_TRIVIAL_ASSIGN:
5104
      /* ??? The standard seems to be missing the "or array of such a class
5105
         type" wording for this trait.  */
5106
      type1 = strip_array_types (type1);
5107
      return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5108
              && (trivial_type_p (type1)
5109
                    || (CLASS_TYPE_P (type1)
5110
                        && TYPE_HAS_TRIVIAL_ASSIGN_REF (type1))));
5111
 
5112
    case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5113
      type1 = strip_array_types (type1);
5114
      return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2)
5115
              || (CLASS_TYPE_P (type1)
5116
                  && (t = locate_ctor (type1, NULL))
5117
                  && TYPE_NOTHROW_P (TREE_TYPE (t))));
5118
 
5119
    case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5120
      type1 = strip_array_types (type1);
5121
      return (trivial_type_p (type1)
5122
              || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_DFLT (type1)));
5123
 
5124
    case CPTK_HAS_NOTHROW_COPY:
5125
      type1 = strip_array_types (type1);
5126
      return (trait_expr_value (CPTK_HAS_TRIVIAL_COPY, type1, type2)
5127
              || (CLASS_TYPE_P (type1)
5128
                  && classtype_has_nothrow_assign_or_copy_p (type1, false)));
5129
 
5130
    case CPTK_HAS_TRIVIAL_COPY:
5131
      /* ??? The standard seems to be missing the "or array of such a class
5132
         type" wording for this trait.  */
5133
      type1 = strip_array_types (type1);
5134
      return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5135
              || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_INIT_REF (type1)));
5136
 
5137
    case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5138
      type1 = strip_array_types (type1);
5139
      return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
5140
              || (CLASS_TYPE_P (type1)
5141
                  && TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
5142
 
5143
    case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5144
      return (CLASS_TYPE_P (type1)
5145
              && (t = locate_dtor (type1, NULL)) && DECL_VIRTUAL_P (t));
5146
 
5147
    case CPTK_IS_ABSTRACT:
5148
      return (CLASS_TYPE_P (type1) && CLASSTYPE_PURE_VIRTUALS (type1));
5149
 
5150
    case CPTK_IS_BASE_OF:
5151
      return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5152
              && DERIVED_FROM_P (type1, type2));
5153
 
5154
    case CPTK_IS_CLASS:
5155
      return (NON_UNION_CLASS_TYPE_P (type1));
5156
 
5157
    case CPTK_IS_CONVERTIBLE_TO:
5158
      /* TODO  */
5159
      return false;
5160
 
5161
    case CPTK_IS_EMPTY:
5162
      return (NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1));
5163
 
5164
    case CPTK_IS_ENUM:
5165
      return (type_code1 == ENUMERAL_TYPE);
5166
 
5167
    case CPTK_IS_POD:
5168
      return (pod_type_p (type1));
5169
 
5170
    case CPTK_IS_POLYMORPHIC:
5171
      return (CLASS_TYPE_P (type1) && TYPE_POLYMORPHIC_P (type1));
5172
 
5173
    case CPTK_IS_STD_LAYOUT:
5174
      return (std_layout_type_p (type1));
5175
 
5176
    case CPTK_IS_TRIVIAL:
5177
      return (trivial_type_p (type1));
5178
 
5179
    case CPTK_IS_UNION:
5180
      return (type_code1 == UNION_TYPE);
5181
 
5182
    default:
5183
      gcc_unreachable ();
5184
      return false;
5185
    }
5186
}
5187
 
5188
/* Returns true if TYPE is a complete type, an array of unknown bound,
5189
   or (possibly cv-qualified) void, returns false otherwise.  */
5190
 
5191
static bool
5192
check_trait_type (tree type)
5193
{
5194
  if (COMPLETE_TYPE_P (type))
5195
    return true;
5196
 
5197
  if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
5198
    return true;
5199
 
5200
  if (VOID_TYPE_P (type))
5201
    return true;
5202
 
5203
  return false;
5204
}
5205
 
5206
/* Process a trait expression.  */
5207
 
5208
tree
5209
finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
5210
{
5211
  gcc_assert (kind == CPTK_HAS_NOTHROW_ASSIGN
5212
              || kind == CPTK_HAS_NOTHROW_CONSTRUCTOR
5213
              || kind == CPTK_HAS_NOTHROW_COPY
5214
              || kind == CPTK_HAS_TRIVIAL_ASSIGN
5215
              || kind == CPTK_HAS_TRIVIAL_CONSTRUCTOR
5216
              || kind == CPTK_HAS_TRIVIAL_COPY
5217
              || kind == CPTK_HAS_TRIVIAL_DESTRUCTOR
5218
              || kind == CPTK_HAS_VIRTUAL_DESTRUCTOR
5219
              || kind == CPTK_IS_ABSTRACT
5220
              || kind == CPTK_IS_BASE_OF
5221
              || kind == CPTK_IS_CLASS
5222
              || kind == CPTK_IS_CONVERTIBLE_TO
5223
              || kind == CPTK_IS_EMPTY
5224
              || kind == CPTK_IS_ENUM
5225
              || kind == CPTK_IS_POD
5226
              || kind == CPTK_IS_POLYMORPHIC
5227
              || kind == CPTK_IS_STD_LAYOUT
5228
              || kind == CPTK_IS_TRIVIAL
5229
              || kind == CPTK_IS_UNION);
5230
 
5231
  if (kind == CPTK_IS_CONVERTIBLE_TO)
5232
    {
5233
      sorry ("__is_convertible_to");
5234
      return error_mark_node;
5235
    }
5236
 
5237
  if (type1 == error_mark_node
5238
      || ((kind == CPTK_IS_BASE_OF || kind == CPTK_IS_CONVERTIBLE_TO)
5239
          && type2 == error_mark_node))
5240
    return error_mark_node;
5241
 
5242
  if (processing_template_decl)
5243
    {
5244
      tree trait_expr = make_node (TRAIT_EXPR);
5245
      TREE_TYPE (trait_expr) = boolean_type_node;
5246
      TRAIT_EXPR_TYPE1 (trait_expr) = type1;
5247
      TRAIT_EXPR_TYPE2 (trait_expr) = type2;
5248
      TRAIT_EXPR_KIND (trait_expr) = kind;
5249
      return trait_expr;
5250
    }
5251
 
5252
  complete_type (type1);
5253
  if (type2)
5254
    complete_type (type2);
5255
 
5256
  switch (kind)
5257
    {
5258
    case CPTK_HAS_NOTHROW_ASSIGN:
5259
    case CPTK_HAS_TRIVIAL_ASSIGN:
5260
    case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5261
    case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5262
    case CPTK_HAS_NOTHROW_COPY:
5263
    case CPTK_HAS_TRIVIAL_COPY:
5264
    case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5265
    case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5266
    case CPTK_IS_ABSTRACT:
5267
    case CPTK_IS_EMPTY:
5268
    case CPTK_IS_POD:
5269
    case CPTK_IS_POLYMORPHIC:
5270
    case CPTK_IS_STD_LAYOUT:
5271
    case CPTK_IS_TRIVIAL:
5272
      if (!check_trait_type (type1))
5273
        {
5274
          error ("incomplete type %qT not allowed", type1);
5275
          return error_mark_node;
5276
        }
5277
      break;
5278
 
5279
    case CPTK_IS_BASE_OF:
5280
      if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5281
          && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
5282
          && !COMPLETE_TYPE_P (type2))
5283
        {
5284
          error ("incomplete type %qT not allowed", type2);
5285
          return error_mark_node;
5286
        }
5287
      break;
5288
 
5289
    case CPTK_IS_CLASS:
5290
    case CPTK_IS_ENUM:
5291
    case CPTK_IS_UNION:
5292
      break;
5293
 
5294
    case CPTK_IS_CONVERTIBLE_TO:
5295
    default:
5296
      gcc_unreachable ();
5297
    }
5298
 
5299
  return (trait_expr_value (kind, type1, type2)
5300
          ? boolean_true_node : boolean_false_node);
5301
}
5302
 
5303
/* Do-nothing variants of functions to handle pragma FLOAT_CONST_DECIMAL64,
5304
   which is ignored for C++.  */
5305
 
5306
void
5307
set_float_const_decimal64 (void)
5308
{
5309
}
5310
 
5311
void
5312
clear_float_const_decimal64 (void)
5313
{
5314
}
5315
 
5316
bool
5317
float_const_decimal64_p (void)
5318
{
5319
  return 0;
5320
}
5321
 
5322
/* Return true if T is a literal type.   */
5323
 
5324
bool
5325
literal_type_p (tree t)
5326
{
5327
  if (SCALAR_TYPE_P (t))
5328
    return true;
5329
  if (CLASS_TYPE_P (t))
5330
    return CLASSTYPE_LITERAL_P (t);
5331
  if (TREE_CODE (t) == ARRAY_TYPE)
5332
    return literal_type_p (strip_array_types (t));
5333
  return false;
5334
}
5335
 
5336
 
5337
/* If DECL is a variable declared `constexpr', require its type
5338
   be literal.  Return the DECL if OK, otherwise NULL.  */
5339
 
5340
tree
5341
ensure_literal_type_for_constexpr_object (tree decl)
5342
{
5343
  tree type = TREE_TYPE (decl);
5344
  if (TREE_CODE (decl) == VAR_DECL && DECL_DECLARED_CONSTEXPR_P (decl)
5345
      && !processing_template_decl && !literal_type_p (type))
5346
    {
5347
      error ("the type %qT of constexpr variable %qD is not literal",
5348
             type, decl);
5349
      return NULL;
5350
    }
5351
  return decl;
5352
}
5353
 
5354
/* Return non-null if FUN certainly designates a valid constexpr function
5355
   declaration.  Otherwise return NULL.  Issue appropriate diagnostics
5356
   if necessary.  Note that we only check the declaration, not the body
5357
   of the function.  */
5358
 
5359
tree
5360
validate_constexpr_fundecl (tree fun)
5361
{
5362
  tree rettype = NULL;
5363
  tree parm = NULL;
5364
 
5365
  /* Don't bother if FUN is not marked constexpr.  */
5366
  if (!DECL_DECLARED_CONSTEXPR_P (fun))
5367
    return NULL;
5368
 
5369
  /* For a function template, we have absolutely no guarantee that all
5370
     instantiations will be constexpr.  */
5371
  if (TREE_CODE (fun) == TEMPLATE_DECL)
5372
    return NULL;
5373
 
5374
  parm = FUNCTION_FIRST_USER_PARM (fun);
5375
  for (; parm != NULL; parm = TREE_CHAIN (parm))
5376
    {
5377
      tree type = TREE_TYPE (parm);
5378
      if (dependent_type_p (type))
5379
        return NULL;
5380
      if (!literal_type_p (type))
5381
        {
5382
           error ("parameter %q#D is not of literal type", parm);
5383
          return NULL;
5384
        }
5385
    }
5386
 
5387
  if (DECL_CONSTRUCTOR_P (fun))
5388
    return fun;
5389
 
5390
  rettype = TREE_TYPE (TREE_TYPE (fun));
5391
  if (dependent_type_p (rettype))
5392
    return NULL;
5393
  if (!literal_type_p (rettype))
5394
    {
5395
      error ("return type %qT of function %qD is not a literal type",
5396
             TREE_TYPE (TREE_TYPE (fun)), fun);
5397
      return NULL;
5398
    }
5399
  return fun;
5400
}
5401
 
5402
 
5403
/* Constructor for a lambda expression.  */
5404
 
5405
tree
5406
build_lambda_expr (void)
5407
{
5408
  tree lambda = make_node (LAMBDA_EXPR);
5409
  LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) = CPLD_NONE;
5410
  LAMBDA_EXPR_CAPTURE_LIST         (lambda) = NULL_TREE;
5411
  LAMBDA_EXPR_THIS_CAPTURE         (lambda) = NULL_TREE;
5412
  LAMBDA_EXPR_RETURN_TYPE          (lambda) = NULL_TREE;
5413
  LAMBDA_EXPR_MUTABLE_P            (lambda) = false;
5414
  return lambda;
5415
}
5416
 
5417
/* Create the closure object for a LAMBDA_EXPR.  */
5418
 
5419
tree
5420
build_lambda_object (tree lambda_expr)
5421
{
5422
  /* Build aggregate constructor call.
5423
     - cp_parser_braced_list
5424
     - cp_parser_functional_cast  */
5425
  VEC(constructor_elt,gc) *elts = NULL;
5426
  tree node, expr, type;
5427
  location_t saved_loc;
5428
 
5429
  if (processing_template_decl)
5430
    return lambda_expr;
5431
 
5432
  /* Make sure any error messages refer to the lambda-introducer.  */
5433
  saved_loc = input_location;
5434
  input_location = LAMBDA_EXPR_LOCATION (lambda_expr);
5435
 
5436
  for (node = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
5437
       node;
5438
       node = TREE_CHAIN (node))
5439
    {
5440
      tree field = TREE_PURPOSE (node);
5441
      tree val = TREE_VALUE (node);
5442
 
5443
      if (DECL_P (val))
5444
        mark_used (val);
5445
 
5446
      /* Mere mortals can't copy arrays with aggregate initialization, so
5447
         do some magic to make it work here.  */
5448
      if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
5449
        val = build_array_copy (val);
5450
      else if (DECL_NORMAL_CAPTURE_P (field)
5451
               && TREE_CODE (TREE_TYPE (field)) != REFERENCE_TYPE)
5452
        {
5453
          /* "the entities that are captured by copy are used to
5454
             direct-initialize each corresponding non-static data
5455
             member of the resulting closure object."
5456
 
5457
             There's normally no way to express direct-initialization
5458
             from an element of a CONSTRUCTOR, so we build up a special
5459
             TARGET_EXPR to bypass the usual copy-initialization.  */
5460
          val = force_rvalue (val);
5461
          if (TREE_CODE (val) == TARGET_EXPR)
5462
            TARGET_EXPR_DIRECT_INIT_P (val) = true;
5463
        }
5464
 
5465
      CONSTRUCTOR_APPEND_ELT (elts, DECL_NAME (field), val);
5466
    }
5467
 
5468
  expr = build_constructor (init_list_type_node, elts);
5469
  CONSTRUCTOR_IS_DIRECT_INIT (expr) = 1;
5470
 
5471
  /* N2927: "[The closure] class type is not an aggregate."
5472
     But we briefly treat it as an aggregate to make this simpler.  */
5473
  type = TREE_TYPE (lambda_expr);
5474
  CLASSTYPE_NON_AGGREGATE (type) = 0;
5475
  expr = finish_compound_literal (type, expr);
5476
  CLASSTYPE_NON_AGGREGATE (type) = 1;
5477
 
5478
  input_location = saved_loc;
5479
  return expr;
5480
}
5481
 
5482
/* Return an initialized RECORD_TYPE for LAMBDA.
5483
   LAMBDA must have its explicit captures already.  */
5484
 
5485
tree
5486
begin_lambda_type (tree lambda)
5487
{
5488
  tree type;
5489
 
5490
  {
5491
    /* Unique name.  This is just like an unnamed class, but we cannot use
5492
       make_anon_name because of certain checks against TYPE_ANONYMOUS_P.  */
5493
    tree name;
5494
    name = make_lambda_name ();
5495
 
5496
    /* Create the new RECORD_TYPE for this lambda.  */
5497
    type = xref_tag (/*tag_code=*/record_type,
5498
                     name,
5499
                     /*scope=*/ts_within_enclosing_non_class,
5500
                     /*template_header_p=*/false);
5501
  }
5502
 
5503
  /* Designate it as a struct so that we can use aggregate initialization.  */
5504
  CLASSTYPE_DECLARED_CLASS (type) = false;
5505
 
5506
  /* Clear base types.  */
5507
  xref_basetypes (type, /*bases=*/NULL_TREE);
5508
 
5509
  /* Start the class.  */
5510
  type = begin_class_definition (type, /*attributes=*/NULL_TREE);
5511
 
5512
  /* Cross-reference the expression and the type.  */
5513
  TREE_TYPE (lambda) = type;
5514
  CLASSTYPE_LAMBDA_EXPR (type) = lambda;
5515
 
5516
  return type;
5517
}
5518
 
5519
/* Returns the type to use for the return type of the operator() of a
5520
   closure class.  */
5521
 
5522
tree
5523
lambda_return_type (tree expr)
5524
{
5525
  tree type;
5526
  if (BRACE_ENCLOSED_INITIALIZER_P (expr))
5527
    {
5528
      warning (0, "cannot deduce lambda return type from a braced-init-list");
5529
      return void_type_node;
5530
    }
5531
  if (type_dependent_expression_p (expr))
5532
    {
5533
      type = cxx_make_type (DECLTYPE_TYPE);
5534
      DECLTYPE_TYPE_EXPR (type) = expr;
5535
      DECLTYPE_FOR_LAMBDA_RETURN (type) = true;
5536
      SET_TYPE_STRUCTURAL_EQUALITY (type);
5537
    }
5538
  else
5539
    type = type_decays_to (unlowered_expr_type (expr));
5540
  return type;
5541
}
5542
 
5543
/* Given a LAMBDA_EXPR or closure type LAMBDA, return the op() of the
5544
   closure type.  */
5545
 
5546
tree
5547
lambda_function (tree lambda)
5548
{
5549
  tree type;
5550
  if (TREE_CODE (lambda) == LAMBDA_EXPR)
5551
    type = TREE_TYPE (lambda);
5552
  else
5553
    type = lambda;
5554
  gcc_assert (LAMBDA_TYPE_P (type));
5555
  /* Don't let debug_tree cause instantiation.  */
5556
  if (CLASSTYPE_TEMPLATE_INSTANTIATION (type) && !COMPLETE_TYPE_P (type))
5557
    return NULL_TREE;
5558
  lambda = lookup_member (type, ansi_opname (CALL_EXPR),
5559
                          /*protect=*/0, /*want_type=*/false);
5560
  if (lambda)
5561
    lambda = BASELINK_FUNCTIONS (lambda);
5562
  return lambda;
5563
}
5564
 
5565
/* Returns the type to use for the FIELD_DECL corresponding to the
5566
   capture of EXPR.
5567
   The caller should add REFERENCE_TYPE for capture by reference.  */
5568
 
5569
tree
5570
lambda_capture_field_type (tree expr)
5571
{
5572
  tree type;
5573
  if (type_dependent_expression_p (expr))
5574
    {
5575
      type = cxx_make_type (DECLTYPE_TYPE);
5576
      DECLTYPE_TYPE_EXPR (type) = expr;
5577
      DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true;
5578
      SET_TYPE_STRUCTURAL_EQUALITY (type);
5579
    }
5580
  else
5581
    type = non_reference (unlowered_expr_type (expr));
5582
  return type;
5583
}
5584
 
5585
/* Recompute the return type for LAMBDA with body of the form:
5586
     { return EXPR ; }  */
5587
 
5588
void
5589
apply_lambda_return_type (tree lambda, tree return_type)
5590
{
5591
  tree fco = lambda_function (lambda);
5592
  tree result;
5593
 
5594
  LAMBDA_EXPR_RETURN_TYPE (lambda) = return_type;
5595
 
5596
  /* If we got a DECLTYPE_TYPE, don't stick it in the function yet,
5597
     it would interfere with instantiating the closure type.  */
5598
  if (dependent_type_p (return_type))
5599
    return;
5600
  if (return_type == error_mark_node)
5601
    return;
5602
 
5603
  /* TREE_TYPE (FUNCTION_DECL) == METHOD_TYPE
5604
     TREE_TYPE (METHOD_TYPE)   == return-type  */
5605
  TREE_TYPE (fco) = change_return_type (return_type, TREE_TYPE (fco));
5606
 
5607
  result = DECL_RESULT (fco);
5608
  if (result == NULL_TREE)
5609
    return;
5610
 
5611
  /* We already have a DECL_RESULT from start_preparsed_function.
5612
     Now we need to redo the work it and allocate_struct_function
5613
     did to reflect the new type.  */
5614
  result = build_decl (input_location, RESULT_DECL, NULL_TREE,
5615
                       TYPE_MAIN_VARIANT (return_type));
5616
  DECL_ARTIFICIAL (result) = 1;
5617
  DECL_IGNORED_P (result) = 1;
5618
  cp_apply_type_quals_to_decl (cp_type_quals (return_type),
5619
                               result);
5620
 
5621
  DECL_RESULT (fco) = result;
5622
 
5623
  if (!processing_template_decl && aggregate_value_p (result, fco))
5624
    {
5625
#ifdef PCC_STATIC_STRUCT_RETURN
5626
      cfun->returns_pcc_struct = 1;
5627
#endif
5628
      cfun->returns_struct = 1;
5629
    }
5630
 
5631
}
5632
 
5633
/* DECL is a local variable or parameter from the surrounding scope of a
5634
   lambda-expression.  Returns the decltype for a use of the capture field
5635
   for DECL even if it hasn't been captured yet.  */
5636
 
5637
static tree
5638
capture_decltype (tree decl)
5639
{
5640
  tree lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
5641
  /* FIXME do lookup instead of list walk? */
5642
  tree cap = value_member (decl, LAMBDA_EXPR_CAPTURE_LIST (lam));
5643
  tree type;
5644
 
5645
  if (cap)
5646
    type = TREE_TYPE (TREE_PURPOSE (cap));
5647
  else
5648
    switch (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam))
5649
      {
5650
      case CPLD_NONE:
5651
        error ("%qD is not captured", decl);
5652
        return error_mark_node;
5653
 
5654
      case CPLD_COPY:
5655
        type = TREE_TYPE (decl);
5656
        if (TREE_CODE (type) == REFERENCE_TYPE
5657
            && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
5658
          type = TREE_TYPE (type);
5659
        break;
5660
 
5661
      case CPLD_REFERENCE:
5662
        type = TREE_TYPE (decl);
5663
        if (TREE_CODE (type) != REFERENCE_TYPE)
5664
          type = build_reference_type (TREE_TYPE (decl));
5665
        break;
5666
 
5667
      default:
5668
        gcc_unreachable ();
5669
      }
5670
 
5671
  if (TREE_CODE (type) != REFERENCE_TYPE)
5672
    {
5673
      if (!LAMBDA_EXPR_MUTABLE_P (lam))
5674
        type = cp_build_qualified_type (type, (TYPE_QUALS (type)
5675
                                               |TYPE_QUAL_CONST));
5676
      type = build_reference_type (type);
5677
    }
5678
  return type;
5679
}
5680
 
5681
/* From an ID and INITIALIZER, create a capture (by reference if
5682
   BY_REFERENCE_P is true), add it to the capture-list for LAMBDA,
5683
   and return it.  */
5684
 
5685
tree
5686
add_capture (tree lambda, tree id, tree initializer, bool by_reference_p,
5687
             bool explicit_init_p)
5688
{
5689
  tree type;
5690
  tree member;
5691
 
5692
  type = lambda_capture_field_type (initializer);
5693
  if (by_reference_p)
5694
    {
5695
      type = build_reference_type (type);
5696
      if (!real_lvalue_p (initializer))
5697
        error ("cannot capture %qE by reference", initializer);
5698
    }
5699
 
5700
  /* Make member variable.  */
5701
  member = build_lang_decl (FIELD_DECL, id, type);
5702
  if (!explicit_init_p)
5703
    /* Normal captures are invisible to name lookup but uses are replaced
5704
       with references to the capture field; we implement this by only
5705
       really making them invisible in unevaluated context; see
5706
       qualify_lookup.  For now, let's make explicitly initialized captures
5707
       always visible.  */
5708
    DECL_NORMAL_CAPTURE_P (member) = true;
5709
 
5710
  /* Add it to the appropriate closure class if we've started it.  */
5711
  if (current_class_type && current_class_type == TREE_TYPE (lambda))
5712
    finish_member_declaration (member);
5713
 
5714
  LAMBDA_EXPR_CAPTURE_LIST (lambda)
5715
    = tree_cons (member, initializer, LAMBDA_EXPR_CAPTURE_LIST (lambda));
5716
 
5717
  if (id == get_identifier ("__this"))
5718
    {
5719
      if (LAMBDA_EXPR_CAPTURES_THIS_P (lambda))
5720
        error ("already captured %<this%> in lambda expression");
5721
      LAMBDA_EXPR_THIS_CAPTURE (lambda) = member;
5722
    }
5723
 
5724
  return member;
5725
}
5726
 
5727
/* Register all the capture members on the list CAPTURES, which is the
5728
   LAMBDA_EXPR_CAPTURE_LIST for the lambda after the introducer.  */
5729
 
5730
void register_capture_members (tree captures)
5731
{
5732
  if (captures)
5733
    {
5734
      register_capture_members (TREE_CHAIN (captures));
5735
      finish_member_declaration (TREE_PURPOSE (captures));
5736
    }
5737
}
5738
 
5739
/* Given a FIELD_DECL decl belonging to a closure type, return a
5740
   COMPONENT_REF of it relative to the 'this' parameter of the op() for
5741
   that type.  */
5742
 
5743
static tree
5744
thisify_lambda_field (tree decl)
5745
{
5746
  tree context = lambda_function (DECL_CONTEXT (decl));
5747
  tree object = cp_build_indirect_ref (DECL_ARGUMENTS (context),
5748
                                       RO_NULL,
5749
                                       tf_warning_or_error);
5750
  return finish_non_static_data_member (decl, object,
5751
                                        /*qualifying_scope*/NULL_TREE);
5752
}
5753
 
5754
/* Similar to add_capture, except this works on a stack of nested lambdas.
5755
   BY_REFERENCE_P in this case is derived from the default capture mode.
5756
   Returns the capture for the lambda at the bottom of the stack.  */
5757
 
5758
tree
5759
add_default_capture (tree lambda_stack, tree id, tree initializer)
5760
{
5761
  bool this_capture_p = (id == get_identifier ("__this"));
5762
 
5763
  tree member = NULL_TREE;
5764
 
5765
  tree saved_class_type = current_class_type;
5766
 
5767
  tree node;
5768
 
5769
  for (node = lambda_stack;
5770
       node;
5771
       node = TREE_CHAIN (node))
5772
    {
5773
      tree lambda = TREE_VALUE (node);
5774
 
5775
      current_class_type = TREE_TYPE (lambda);
5776
      member = add_capture (lambda,
5777
                            id,
5778
                            initializer,
5779
                            /*by_reference_p=*/
5780
                            (!this_capture_p
5781
                             && (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda)
5782
                                 == CPLD_REFERENCE)),
5783
                            /*explicit_init_p=*/false);
5784
      initializer = thisify_lambda_field (member);
5785
    }
5786
 
5787
  current_class_type = saved_class_type;
5788
 
5789
  return member;
5790
}
5791
 
5792
/* Return the capture pertaining to a use of 'this' in LAMBDA, in the form of an
5793
   INDIRECT_REF, possibly adding it through default capturing.  */
5794
 
5795
tree
5796
lambda_expr_this_capture (tree lambda)
5797
{
5798
  tree result;
5799
 
5800
  tree this_capture = LAMBDA_EXPR_THIS_CAPTURE (lambda);
5801
 
5802
  /* Try to default capture 'this' if we can.  */
5803
  if (!this_capture
5804
      && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE)
5805
    {
5806
      tree containing_function = TYPE_CONTEXT (TREE_TYPE (lambda));
5807
      tree lambda_stack = tree_cons (NULL_TREE, lambda, NULL_TREE);
5808
      tree init = NULL_TREE;
5809
 
5810
      /* If we are in a lambda function, we can move out until we hit:
5811
           1. a non-lambda function,
5812
           2. a lambda function capturing 'this', or
5813
           3. a non-default capturing lambda function.  */
5814
      while (LAMBDA_FUNCTION_P (containing_function))
5815
        {
5816
          tree lambda
5817
            = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (containing_function));
5818
 
5819
          if (LAMBDA_EXPR_THIS_CAPTURE (lambda))
5820
            {
5821
              /* An outer lambda has already captured 'this'.  */
5822
              tree cap = LAMBDA_EXPR_THIS_CAPTURE (lambda);
5823
              init = thisify_lambda_field (cap);
5824
              break;
5825
            }
5826
 
5827
          if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_NONE)
5828
            /* An outer lambda won't let us capture 'this'.  */
5829
            break;
5830
 
5831
          lambda_stack = tree_cons (NULL_TREE,
5832
                                    lambda,
5833
                                    lambda_stack);
5834
 
5835
          containing_function = decl_function_context (containing_function);
5836
        }
5837
 
5838
      if (!init && DECL_NONSTATIC_MEMBER_FUNCTION_P (containing_function)
5839
          && !LAMBDA_FUNCTION_P (containing_function))
5840
        /* First parameter is 'this'.  */
5841
        init = DECL_ARGUMENTS (containing_function);
5842
 
5843
      if (init)
5844
        this_capture = add_default_capture (lambda_stack,
5845
                                            /*id=*/get_identifier ("__this"),
5846
                                            init);
5847
    }
5848
 
5849
  if (!this_capture)
5850
    {
5851
      error ("%<this%> was not captured for this lambda function");
5852
      result = error_mark_node;
5853
    }
5854
  else
5855
    {
5856
      /* To make sure that current_class_ref is for the lambda.  */
5857
      gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)) == TREE_TYPE (lambda));
5858
 
5859
      result = finish_non_static_data_member (this_capture,
5860
                                              current_class_ref,
5861
                                              /*qualifying_scope=*/NULL_TREE);
5862
 
5863
      /* If 'this' is captured, each use of 'this' is transformed into an
5864
         access to the corresponding unnamed data member of the closure
5865
         type cast (_expr.cast_ 5.4) to the type of 'this'. [ The cast
5866
         ensures that the transformed expression is an rvalue. ] */
5867
      result = rvalue (result);
5868
    }
5869
 
5870
  return result;
5871
}
5872
 
5873
/* Returns the method basetype of the innermost non-lambda function, or
5874
   NULL_TREE if none.  */
5875
 
5876
tree
5877
nonlambda_method_basetype (void)
5878
{
5879
  tree fn, type;
5880
  if (!current_class_ref)
5881
    return NULL_TREE;
5882
 
5883
  type = current_class_type;
5884
  if (!LAMBDA_TYPE_P (type))
5885
    return type;
5886
 
5887
  /* Find the nearest enclosing non-lambda function.  */
5888
  fn = TYPE_NAME (type);
5889
  do
5890
    fn = decl_function_context (fn);
5891
  while (fn && LAMBDA_FUNCTION_P (fn));
5892
 
5893
  if (!fn || !DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
5894
    return NULL_TREE;
5895
 
5896
  return TYPE_METHOD_BASETYPE (TREE_TYPE (fn));
5897
}
5898
 
5899
/* If the closure TYPE has a static op(), also add a conversion to function
5900
   pointer.  */
5901
 
5902
void
5903
maybe_add_lambda_conv_op (tree type)
5904
{
5905
  bool nested = (current_function_decl != NULL_TREE);
5906
  tree callop = lambda_function (type);
5907
  tree rettype, name, fntype, fn, body, compound_stmt;
5908
  tree thistype, stattype, statfn, convfn, call, arg;
5909
  VEC (tree, gc) *argvec;
5910
 
5911
  if (LAMBDA_EXPR_CAPTURE_LIST (CLASSTYPE_LAMBDA_EXPR (type)) != NULL_TREE)
5912
    return;
5913
 
5914
  stattype = build_function_type (TREE_TYPE (TREE_TYPE (callop)),
5915
                                  FUNCTION_ARG_CHAIN (callop));
5916
 
5917
  /* First build up the conversion op.  */
5918
 
5919
  rettype = build_pointer_type (stattype);
5920
  name = mangle_conv_op_name_for_type (rettype);
5921
  thistype = cp_build_qualified_type (type, TYPE_QUAL_CONST);
5922
  fntype = build_method_type_directly (thistype, rettype, void_list_node);
5923
  fn = convfn = build_lang_decl (FUNCTION_DECL, name, fntype);
5924
  DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
5925
 
5926
  if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
5927
      && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
5928
    DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
5929
 
5930
  SET_OVERLOADED_OPERATOR_CODE (fn, TYPE_EXPR);
5931
  grokclassfn (type, fn, NO_SPECIAL);
5932
  set_linkage_according_to_type (type, fn);
5933
  rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
5934
  DECL_IN_AGGR_P (fn) = 1;
5935
  DECL_ARTIFICIAL (fn) = 1;
5936
  DECL_NOT_REALLY_EXTERN (fn) = 1;
5937
  DECL_DECLARED_INLINE_P (fn) = 1;
5938
  DECL_ARGUMENTS (fn) = build_this_parm (fntype, TYPE_QUAL_CONST);
5939
  if (nested)
5940
    DECL_INTERFACE_KNOWN (fn) = 1;
5941
 
5942
  add_method (type, fn, NULL_TREE);
5943
 
5944
  /* Generic thunk code fails for varargs; we'll complain in mark_used if
5945
     the conversion op is used.  */
5946
  if (varargs_function_p (callop))
5947
    {
5948
      DECL_DELETED_FN (fn) = 1;
5949
      return;
5950
    }
5951
 
5952
  /* Now build up the thunk to be returned.  */
5953
 
5954
  name = get_identifier ("_FUN");
5955
  fn = statfn = build_lang_decl (FUNCTION_DECL, name, stattype);
5956
  DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
5957
  if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
5958
      && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
5959
    DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
5960
  grokclassfn (type, fn, NO_SPECIAL);
5961
  set_linkage_according_to_type (type, fn);
5962
  rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
5963
  DECL_IN_AGGR_P (fn) = 1;
5964
  DECL_ARTIFICIAL (fn) = 1;
5965
  DECL_NOT_REALLY_EXTERN (fn) = 1;
5966
  DECL_DECLARED_INLINE_P (fn) = 1;
5967
  DECL_STATIC_FUNCTION_P (fn) = 1;
5968
  DECL_ARGUMENTS (fn) = copy_list (TREE_CHAIN (DECL_ARGUMENTS (callop)));
5969
  for (arg = DECL_ARGUMENTS (fn); arg; arg = TREE_CHAIN (arg))
5970
    DECL_CONTEXT (arg) = fn;
5971
  if (nested)
5972
    DECL_INTERFACE_KNOWN (fn) = 1;
5973
 
5974
  add_method (type, fn, NULL_TREE);
5975
 
5976
  if (nested)
5977
    push_function_context ();
5978
 
5979
  /* Generate the body of the thunk.  */
5980
 
5981
  start_preparsed_function (statfn, NULL_TREE,
5982
                            SF_PRE_PARSED | SF_INCLASS_INLINE);
5983
  if (DECL_ONE_ONLY (statfn))
5984
    {
5985
      /* Put the thunk in the same comdat group as the call op.  */
5986
      struct cgraph_node *callop_node, *thunk_node;
5987
      DECL_COMDAT_GROUP (statfn) = DECL_COMDAT_GROUP (callop);
5988
      callop_node = cgraph_node (callop);
5989
      thunk_node = cgraph_node (statfn);
5990
      gcc_assert (callop_node->same_comdat_group == NULL);
5991
      gcc_assert (thunk_node->same_comdat_group == NULL);
5992
      callop_node->same_comdat_group = thunk_node;
5993
      thunk_node->same_comdat_group = callop_node;
5994
    }
5995
  body = begin_function_body ();
5996
  compound_stmt = begin_compound_stmt (0);
5997
 
5998
  arg = build1 (NOP_EXPR, TREE_TYPE (DECL_ARGUMENTS (callop)),
5999
                null_pointer_node);
6000
  argvec = make_tree_vector ();
6001
  VEC_quick_push (tree, argvec, arg);
6002
  for (arg = DECL_ARGUMENTS (statfn); arg; arg = TREE_CHAIN (arg))
6003
    VEC_safe_push (tree, gc, argvec, arg);
6004
  call = build_call_a (callop, VEC_length (tree, argvec),
6005
                       VEC_address (tree, argvec));
6006
  CALL_FROM_THUNK_P (call) = 1;
6007
  if (MAYBE_CLASS_TYPE_P (TREE_TYPE (call)))
6008
    call = build_cplus_new (TREE_TYPE (call), call);
6009
  call = convert_from_reference (call);
6010
  finish_return_stmt (call);
6011
 
6012
  finish_compound_stmt (compound_stmt);
6013
  finish_function_body (body);
6014
 
6015
  expand_or_defer_fn (finish_function (2));
6016
 
6017
  /* Generate the body of the conversion op.  */
6018
 
6019
  start_preparsed_function (convfn, NULL_TREE,
6020
                            SF_PRE_PARSED | SF_INCLASS_INLINE);
6021
  body = begin_function_body ();
6022
  compound_stmt = begin_compound_stmt (0);
6023
 
6024
  finish_return_stmt (decay_conversion (statfn));
6025
 
6026
  finish_compound_stmt (compound_stmt);
6027
  finish_function_body (body);
6028
 
6029
  expand_or_defer_fn (finish_function (2));
6030
 
6031
  if (nested)
6032
    pop_function_context ();
6033
}
6034
#include "gt-cp-semantics.h"

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.