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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [cp/] [semantics.c] - Blame information for rev 710

Details | Compare with Previous | View Log

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