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

Subversion Repositories openrisc

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 710 jeremybenn
/* Report error messages, build initializers, and perform
2
   some front-end optimizations for C++ compiler.
3
   Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
4
   1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
5
   Free Software Foundation, Inc.
6
   Hacked by Michael Tiemann (tiemann@cygnus.com)
7
 
8
This file is part of GCC.
9
 
10
GCC is free software; you can redistribute it and/or modify
11
it under the terms of the GNU General Public License as published by
12
the Free Software Foundation; either version 3, or (at your option)
13
any later version.
14
 
15
GCC is distributed in the hope that it will be useful,
16
but WITHOUT ANY WARRANTY; without even the implied warranty of
17
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
GNU General Public License for more details.
19
 
20
You should have received a copy of the GNU General Public License
21
along with GCC; see the file COPYING3.  If not see
22
<http://www.gnu.org/licenses/>.  */
23
 
24
 
25
/* This file is part of the C++ front end.
26
   It contains routines to build C++ expressions given their operands,
27
   including computing the types of the result, C and C++ specific error
28
   checks, and some optimization.  */
29
 
30
#include "config.h"
31
#include "system.h"
32
#include "coretypes.h"
33
#include "tm.h"
34
#include "tree.h"
35
#include "intl.h"
36
#include "cp-tree.h"
37
#include "flags.h"
38
#include "output.h"
39
#include "diagnostic-core.h"
40
 
41
static tree
42
process_init_constructor (tree type, tree init, tsubst_flags_t complain);
43
 
44
 
45
/* Print an error message stemming from an attempt to use
46
   BASETYPE as a base class for TYPE.  */
47
 
48
tree
49
error_not_base_type (tree basetype, tree type)
50
{
51
  if (TREE_CODE (basetype) == FUNCTION_DECL)
52
    basetype = DECL_CONTEXT (basetype);
53
  error ("type %qT is not a base type for type %qT", basetype, type);
54
  return error_mark_node;
55
}
56
 
57
tree
58
binfo_or_else (tree base, tree type)
59
{
60
  tree binfo = lookup_base (type, base, ba_unique, NULL);
61
 
62
  if (binfo == error_mark_node)
63
    return NULL_TREE;
64
  else if (!binfo)
65
    error_not_base_type (base, type);
66
  return binfo;
67
}
68
 
69
/* According to ARM $7.1.6, "A `const' object may be initialized, but its
70
   value may not be changed thereafter.  */
71
 
72
void
73
cxx_readonly_error (tree arg, enum lvalue_use errstring)
74
{
75
 
76
/* This macro is used to emit diagnostics to ensure that all format
77
   strings are complete sentences, visible to gettext and checked at
78
   compile time.  */
79
 
80
#define ERROR_FOR_ASSIGNMENT(AS, ASM, IN, DE, ARG)                      \
81
  do {                                                                  \
82
    switch (errstring)                                                  \
83
      {                                                                 \
84
      case lv_assign:                                                   \
85
        error(AS, ARG);                                                 \
86
        break;                                                          \
87
      case lv_asm:                                                      \
88
        error(ASM, ARG);                                                \
89
        break;                                                          \
90
      case lv_increment:                                                \
91
        error (IN, ARG);                                                \
92
        break;                                                          \
93
      case lv_decrement:                                               \
94
        error (DE, ARG);                                                \
95
        break;                                                          \
96
      default:                                                          \
97
        gcc_unreachable ();                                             \
98
      }                                                                 \
99
  } while (0)
100
 
101
  /* Handle C++-specific things first.  */
102
 
103
  if (TREE_CODE (arg) == VAR_DECL
104
      && DECL_LANG_SPECIFIC (arg)
105
      && DECL_IN_AGGR_P (arg)
106
      && !TREE_STATIC (arg))
107
    ERROR_FOR_ASSIGNMENT (G_("assignment of "
108
                             "constant field %qD"),
109
                          G_("constant field %qD "
110
                             "used as %<asm%> output"),
111
                          G_("increment of "
112
                             "constant field %qD"),
113
                          G_("decrement of "
114
                             "constant field %qD"),
115
                          arg);
116
  else if (TREE_CODE (arg) == INDIRECT_REF
117
           && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
118
           && (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL
119
               || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
120
    ERROR_FOR_ASSIGNMENT (G_("assignment of "
121
                             "read-only reference %qD"),
122
                          G_("read-only reference %qD "
123
                             "used as %<asm%> output"),
124
                          G_("increment of "
125
                             "read-only reference %qD"),
126
                          G_("decrement of "
127
                             "read-only reference %qD"),
128
                          TREE_OPERAND (arg, 0));
129
  else
130
    readonly_error (arg, errstring);
131
}
132
 
133
 
134
/* Structure that holds information about declarations whose type was
135
   incomplete and we could not check whether it was abstract or not.  */
136
 
137
struct GTY((chain_next ("%h.next"))) pending_abstract_type {
138
  /* Declaration which we are checking for abstractness. It is either
139
     a DECL node, or an IDENTIFIER_NODE if we do not have a full
140
     declaration available.  */
141
  tree decl;
142
 
143
  /* Type which will be checked for abstractness.  */
144
  tree type;
145
 
146
  /* Position of the declaration. This is only needed for IDENTIFIER_NODEs,
147
     because DECLs already carry locus information.  */
148
  location_t locus;
149
 
150
  /* Link to the next element in list.  */
151
  struct pending_abstract_type* next;
152
};
153
 
154
 
155
/* Compute the hash value of the node VAL. This function is used by the
156
   hash table abstract_pending_vars.  */
157
 
158
static hashval_t
159
pat_calc_hash (const void* val)
160
{
161
  const struct pending_abstract_type *pat =
162
     (const struct pending_abstract_type *) val;
163
  return (hashval_t) TYPE_UID (pat->type);
164
}
165
 
166
 
167
/* Compare node VAL1 with the type VAL2. This function is used by the
168
   hash table abstract_pending_vars.  */
169
 
170
static int
171
pat_compare (const void* val1, const void* val2)
172
{
173
  const struct pending_abstract_type *const pat1 =
174
     (const struct pending_abstract_type *) val1;
175
  const_tree const type2 = (const_tree)val2;
176
 
177
  return (pat1->type == type2);
178
}
179
 
180
/* Hash table that maintains pending_abstract_type nodes, for which we still
181
   need to check for type abstractness.  The key of the table is the type
182
   of the declaration.  */
183
static GTY ((param_is (struct pending_abstract_type)))
184
htab_t abstract_pending_vars = NULL;
185
 
186
 
187
/* This function is called after TYPE is completed, and will check if there
188
   are pending declarations for which we still need to verify the abstractness
189
   of TYPE, and emit a diagnostic (through abstract_virtuals_error) if TYPE
190
   turned out to be incomplete.  */
191
 
192
void
193
complete_type_check_abstract (tree type)
194
{
195
  void **slot;
196
  struct pending_abstract_type *pat;
197
  location_t cur_loc = input_location;
198
 
199
  gcc_assert (COMPLETE_TYPE_P (type));
200
 
201
  if (!abstract_pending_vars)
202
    return;
203
 
204
  /* Retrieve the list of pending declarations for this type.  */
205
  slot = htab_find_slot_with_hash (abstract_pending_vars, type,
206
                                   (hashval_t)TYPE_UID (type), NO_INSERT);
207
  if (!slot)
208
    return;
209
  pat = (struct pending_abstract_type*)*slot;
210
  gcc_assert (pat);
211
 
212
  /* If the type is not abstract, do not do anything.  */
213
  if (CLASSTYPE_PURE_VIRTUALS (type))
214
    {
215
      struct pending_abstract_type *prev = 0, *next;
216
 
217
      /* Reverse the list to emit the errors in top-down order.  */
218
      for (; pat; pat = next)
219
        {
220
          next = pat->next;
221
          pat->next = prev;
222
          prev = pat;
223
        }
224
      pat = prev;
225
 
226
      /* Go through the list, and call abstract_virtuals_error for each
227
        element: it will issue a diagnostic if the type is abstract.  */
228
      while (pat)
229
        {
230
          gcc_assert (type == pat->type);
231
 
232
          /* Tweak input_location so that the diagnostic appears at the correct
233
            location. Notice that this is only needed if the decl is an
234
            IDENTIFIER_NODE.  */
235
          input_location = pat->locus;
236
          abstract_virtuals_error (pat->decl, pat->type);
237
          pat = pat->next;
238
        }
239
    }
240
 
241
  htab_clear_slot (abstract_pending_vars, slot);
242
 
243
  input_location = cur_loc;
244
}
245
 
246
 
247
/* If TYPE has abstract virtual functions, issue an error about trying
248
   to create an object of that type.  DECL is the object declared, or
249
   NULL_TREE if the declaration is unavailable.  Returns 1 if an error
250
   occurred; zero if all was well.  */
251
 
252
int
253
abstract_virtuals_error_sfinae (tree decl, tree type, tsubst_flags_t complain)
254
{
255
  VEC(tree,gc) *pure;
256
 
257
  /* This function applies only to classes. Any other entity can never
258
     be abstract.  */
259
  if (!CLASS_TYPE_P (type))
260
    return 0;
261
  type = TYPE_MAIN_VARIANT (type);
262
 
263
  /* If the type is incomplete, we register it within a hash table,
264
     so that we can check again once it is completed. This makes sense
265
     only for objects for which we have a declaration or at least a
266
     name.  */
267
  if (!COMPLETE_TYPE_P (type))
268
    {
269
      void **slot;
270
      struct pending_abstract_type *pat;
271
 
272
      gcc_assert (!decl || DECL_P (decl)
273
                  || TREE_CODE (decl) == IDENTIFIER_NODE);
274
 
275
      if (!abstract_pending_vars)
276
        abstract_pending_vars = htab_create_ggc (31, &pat_calc_hash,
277
                                                &pat_compare, NULL);
278
 
279
      slot = htab_find_slot_with_hash (abstract_pending_vars, type,
280
                                      (hashval_t)TYPE_UID (type), INSERT);
281
 
282
      pat = ggc_alloc_pending_abstract_type ();
283
      pat->type = type;
284
      pat->decl = decl;
285
      pat->locus = ((decl && DECL_P (decl))
286
                    ? DECL_SOURCE_LOCATION (decl)
287
                    : input_location);
288
 
289
      pat->next = (struct pending_abstract_type *) *slot;
290
      *slot = pat;
291
 
292
      return 0;
293
    }
294
 
295
  if (!TYPE_SIZE (type))
296
    /* TYPE is being defined, and during that time
297
       CLASSTYPE_PURE_VIRTUALS holds the inline friends.  */
298
    return 0;
299
 
300
  pure = CLASSTYPE_PURE_VIRTUALS (type);
301
  if (!pure)
302
    return 0;
303
 
304
  if (!(complain & tf_error))
305
    return 1;
306
 
307
  if (decl)
308
    {
309
      if (TREE_CODE (decl) == VAR_DECL)
310
        error ("cannot declare variable %q+D to be of abstract "
311
               "type %qT", decl, type);
312
      else if (TREE_CODE (decl) == PARM_DECL)
313
        error ("cannot declare parameter %q+D to be of abstract type %qT",
314
               decl, type);
315
      else if (TREE_CODE (decl) == FIELD_DECL)
316
        error ("cannot declare field %q+D to be of abstract type %qT",
317
               decl, type);
318
      else if (TREE_CODE (decl) == FUNCTION_DECL
319
               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
320
        error ("invalid abstract return type for member function %q+#D", decl);
321
      else if (TREE_CODE (decl) == FUNCTION_DECL)
322
        error ("invalid abstract return type for function %q+#D", decl);
323
      else if (TREE_CODE (decl) == IDENTIFIER_NODE)
324
        /* Here we do not have location information.  */
325
        error ("invalid abstract type %qT for %qE", type, decl);
326
      else
327
        error ("invalid abstract type for %q+D", decl);
328
    }
329
  else
330
    error ("cannot allocate an object of abstract type %qT", type);
331
 
332
  /* Only go through this once.  */
333
  if (VEC_length (tree, pure))
334
    {
335
      unsigned ix;
336
      tree fn;
337
 
338
      inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
339
              "  because the following virtual functions are pure within %qT:",
340
              type);
341
 
342
      FOR_EACH_VEC_ELT (tree, pure, ix, fn)
343
        if (! DECL_CLONED_FUNCTION_P (fn)
344
            || DECL_COMPLETE_DESTRUCTOR_P (fn))
345
          inform (input_location, "\t%+#D", fn);
346
 
347
      /* Now truncate the vector.  This leaves it non-null, so we know
348
         there are pure virtuals, but empty so we don't list them out
349
         again.  */
350
      VEC_truncate (tree, pure, 0);
351
    }
352
  else
353
    inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
354
            "  since type %qT has pure virtual functions",
355
            type);
356
 
357
  return 1;
358
}
359
 
360
/* Wrapper for the above function in the common case of wanting errors.  */
361
 
362
int
363
abstract_virtuals_error (tree decl, tree type)
364
{
365
  return abstract_virtuals_error_sfinae (decl, type, tf_warning_or_error);
366
}
367
 
368
/* Print an error message for invalid use of an incomplete type.
369
   VALUE is the expression that was used (or 0 if that isn't known)
370
   and TYPE is the type that was invalid.  DIAG_KIND indicates the
371
   type of diagnostic (see diagnostic.def).  */
372
 
373
void
374
cxx_incomplete_type_diagnostic (const_tree value, const_tree type,
375
                                diagnostic_t diag_kind)
376
{
377
  int decl = 0;
378
 
379
  gcc_assert (diag_kind == DK_WARNING
380
              || diag_kind == DK_PEDWARN
381
              || diag_kind == DK_ERROR);
382
 
383
  /* Avoid duplicate error message.  */
384
  if (TREE_CODE (type) == ERROR_MARK)
385
    return;
386
 
387
  if (value != 0 && (TREE_CODE (value) == VAR_DECL
388
                     || TREE_CODE (value) == PARM_DECL
389
                     || TREE_CODE (value) == FIELD_DECL))
390
    {
391
      emit_diagnostic (diag_kind, input_location, 0,
392
                       "%q+D has incomplete type", value);
393
      decl = 1;
394
    }
395
 retry:
396
  /* We must print an error message.  Be clever about what it says.  */
397
 
398
  switch (TREE_CODE (type))
399
    {
400
    case RECORD_TYPE:
401
    case UNION_TYPE:
402
    case ENUMERAL_TYPE:
403
      if (!decl)
404
        emit_diagnostic (diag_kind, input_location, 0,
405
                         "invalid use of incomplete type %q#T", type);
406
      if (!TYPE_TEMPLATE_INFO (type))
407
        emit_diagnostic (diag_kind, input_location, 0,
408
                         "forward declaration of %q+#T", type);
409
      else
410
        emit_diagnostic (diag_kind, input_location, 0,
411
                         "declaration of %q+#T", type);
412
      break;
413
 
414
    case VOID_TYPE:
415
      emit_diagnostic (diag_kind, input_location, 0,
416
                       "invalid use of %qT", type);
417
      break;
418
 
419
    case ARRAY_TYPE:
420
      if (TYPE_DOMAIN (type))
421
        {
422
          type = TREE_TYPE (type);
423
          goto retry;
424
        }
425
      emit_diagnostic (diag_kind, input_location, 0,
426
                       "invalid use of array with unspecified bounds");
427
      break;
428
 
429
    case OFFSET_TYPE:
430
    bad_member:
431
      {
432
        tree member = TREE_OPERAND (value, 1);
433
        if (is_overloaded_fn (member))
434
          member = get_first_fn (member);
435
        if (DECL_FUNCTION_MEMBER_P (member)
436
            && ! flag_ms_extensions)
437
          emit_diagnostic (diag_kind, input_location, 0,
438
                           "invalid use of member function "
439
                           "(did you forget the %<()%> ?)");
440
        else
441
          emit_diagnostic (diag_kind, input_location, 0,
442
                           "invalid use of member "
443
                           "(did you forget the %<&%> ?)");
444
      }
445
      break;
446
 
447
    case TEMPLATE_TYPE_PARM:
448
      if (is_auto (type))
449
        emit_diagnostic (diag_kind, input_location, 0,
450
                         "invalid use of %<auto%>");
451
      else
452
        emit_diagnostic (diag_kind, input_location, 0,
453
                         "invalid use of template type parameter %qT", type);
454
      break;
455
 
456
    case BOUND_TEMPLATE_TEMPLATE_PARM:
457
      emit_diagnostic (diag_kind, input_location, 0,
458
                       "invalid use of template template parameter %qT",
459
                       TYPE_NAME (type));
460
      break;
461
 
462
    case TYPENAME_TYPE:
463
      emit_diagnostic (diag_kind, input_location, 0,
464
                       "invalid use of dependent type %qT", type);
465
      break;
466
 
467
    case LANG_TYPE:
468
      if (type == init_list_type_node)
469
        {
470
          emit_diagnostic (diag_kind, input_location, 0,
471
                           "invalid use of brace-enclosed initializer list");
472
          break;
473
        }
474
      gcc_assert (type == unknown_type_node);
475
      if (value && TREE_CODE (value) == COMPONENT_REF)
476
        goto bad_member;
477
      else if (value && TREE_CODE (value) == ADDR_EXPR)
478
        emit_diagnostic (diag_kind, input_location, 0,
479
                         "address of overloaded function with no contextual "
480
                         "type information");
481
      else if (value && TREE_CODE (value) == OVERLOAD)
482
        emit_diagnostic (diag_kind, input_location, 0,
483
                         "overloaded function with no contextual type information");
484
      else
485
        emit_diagnostic (diag_kind, input_location, 0,
486
                         "insufficient contextual information to determine type");
487
      break;
488
 
489
    default:
490
      gcc_unreachable ();
491
    }
492
}
493
 
494
/* Backward-compatibility interface to incomplete_type_diagnostic;
495
   required by ../tree.c.  */
496
#undef cxx_incomplete_type_error
497
void
498
cxx_incomplete_type_error (const_tree value, const_tree type)
499
{
500
  cxx_incomplete_type_diagnostic (value, type, DK_ERROR);
501
}
502
 
503
 
504
/* The recursive part of split_nonconstant_init.  DEST is an lvalue
505
   expression to which INIT should be assigned.  INIT is a CONSTRUCTOR.
506
   Return true if the whole of the value was initialized by the
507
   generated statements.  */
508
 
509
static bool
510
split_nonconstant_init_1 (tree dest, tree init)
511
{
512
  unsigned HOST_WIDE_INT idx;
513
  tree field_index, value;
514
  tree type = TREE_TYPE (dest);
515
  tree inner_type = NULL;
516
  bool array_type_p = false;
517
  bool complete_p = true;
518
  HOST_WIDE_INT num_split_elts = 0;
519
 
520
  switch (TREE_CODE (type))
521
    {
522
    case ARRAY_TYPE:
523
      inner_type = TREE_TYPE (type);
524
      array_type_p = true;
525
      /* FALLTHRU */
526
 
527
    case RECORD_TYPE:
528
    case UNION_TYPE:
529
    case QUAL_UNION_TYPE:
530
      FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init), idx,
531
                                field_index, value)
532
        {
533
          /* The current implementation of this algorithm assumes that
534
             the field was set for all the elements. This is usually done
535
             by process_init_constructor.  */
536
          gcc_assert (field_index);
537
 
538
          if (!array_type_p)
539
            inner_type = TREE_TYPE (field_index);
540
 
541
          if (TREE_CODE (value) == CONSTRUCTOR)
542
            {
543
              tree sub;
544
 
545
              if (array_type_p)
546
                sub = build4 (ARRAY_REF, inner_type, dest, field_index,
547
                              NULL_TREE, NULL_TREE);
548
              else
549
                sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
550
                              NULL_TREE);
551
 
552
              if (!split_nonconstant_init_1 (sub, value))
553
                complete_p = false;
554
              num_split_elts++;
555
            }
556
          else if (!initializer_constant_valid_p (value, inner_type))
557
            {
558
              tree code;
559
              tree sub;
560
 
561
              /* FIXME: Ordered removal is O(1) so the whole function is
562
                 worst-case quadratic. This could be fixed using an aside
563
                 bitmap to record which elements must be removed and remove
564
                 them all at the same time. Or by merging
565
                 split_non_constant_init into process_init_constructor_array,
566
                 that is separating constants from non-constants while building
567
                 the vector.  */
568
              VEC_ordered_remove (constructor_elt, CONSTRUCTOR_ELTS (init),
569
                                  idx);
570
              --idx;
571
 
572
              if (array_type_p)
573
                sub = build4 (ARRAY_REF, inner_type, dest, field_index,
574
                              NULL_TREE, NULL_TREE);
575
              else
576
                sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
577
                              NULL_TREE);
578
 
579
              code = build2 (INIT_EXPR, inner_type, sub, value);
580
              code = build_stmt (input_location, EXPR_STMT, code);
581
              code = maybe_cleanup_point_expr_void (code);
582
              add_stmt (code);
583
              if (!TYPE_HAS_TRIVIAL_DESTRUCTOR (inner_type))
584
                {
585
                  code = (build_special_member_call
586
                          (sub, complete_dtor_identifier, NULL, inner_type,
587
                           LOOKUP_NORMAL, tf_warning_or_error));
588
                  finish_eh_cleanup (code);
589
                }
590
 
591
              num_split_elts++;
592
            }
593
        }
594
      break;
595
 
596
    case VECTOR_TYPE:
597
      if (!initializer_constant_valid_p (init, type))
598
        {
599
          tree code;
600
          tree cons = copy_node (init);
601
          CONSTRUCTOR_ELTS (init) = NULL;
602
          code = build2 (MODIFY_EXPR, type, dest, cons);
603
          code = build_stmt (input_location, EXPR_STMT, code);
604
          add_stmt (code);
605
          num_split_elts += CONSTRUCTOR_NELTS (init);
606
        }
607
      break;
608
 
609
    default:
610
      gcc_unreachable ();
611
    }
612
 
613
  /* The rest of the initializer is now a constant. */
614
  TREE_CONSTANT (init) = 1;
615
  return complete_p && complete_ctor_at_level_p (TREE_TYPE (init),
616
                                                 num_split_elts, inner_type);
617
}
618
 
619
/* A subroutine of store_init_value.  Splits non-constant static
620
   initializer INIT into a constant part and generates code to
621
   perform the non-constant part of the initialization to DEST.
622
   Returns the code for the runtime init.  */
623
 
624
static tree
625
split_nonconstant_init (tree dest, tree init)
626
{
627
  tree code;
628
 
629
  if (TREE_CODE (init) == CONSTRUCTOR)
630
    {
631
      code = push_stmt_list ();
632
      if (split_nonconstant_init_1 (dest, init))
633
        init = NULL_TREE;
634
      code = pop_stmt_list (code);
635
      DECL_INITIAL (dest) = init;
636
      TREE_READONLY (dest) = 0;
637
    }
638
  else
639
    code = build2 (INIT_EXPR, TREE_TYPE (dest), dest, init);
640
 
641
  return code;
642
}
643
 
644
/* Perform appropriate conversions on the initial value of a variable,
645
   store it in the declaration DECL,
646
   and print any error messages that are appropriate.
647
   If the init is invalid, store an ERROR_MARK.
648
 
649
   C++: Note that INIT might be a TREE_LIST, which would mean that it is
650
   a base class initializer for some aggregate type, hopefully compatible
651
   with DECL.  If INIT is a single element, and DECL is an aggregate
652
   type, we silently convert INIT into a TREE_LIST, allowing a constructor
653
   to be called.
654
 
655
   If INIT is a TREE_LIST and there is no constructor, turn INIT
656
   into a CONSTRUCTOR and use standard initialization techniques.
657
   Perhaps a warning should be generated?
658
 
659
   Returns code to be executed if initialization could not be performed
660
   for static variable.  In that case, caller must emit the code.  */
661
 
662
tree
663
store_init_value (tree decl, tree init, VEC(tree,gc)** cleanups, int flags)
664
{
665
  tree value, type;
666
 
667
  /* If variable's type was invalidly declared, just ignore it.  */
668
 
669
  type = TREE_TYPE (decl);
670
  if (TREE_CODE (type) == ERROR_MARK)
671
    return NULL_TREE;
672
 
673
  if (MAYBE_CLASS_TYPE_P (type))
674
    {
675
      if (TREE_CODE (init) == TREE_LIST)
676
        {
677
          error ("constructor syntax used, but no constructor declared "
678
                 "for type %qT", type);
679
          init = build_constructor_from_list (init_list_type_node, nreverse (init));
680
        }
681
    }
682
  else if (TREE_CODE (init) == TREE_LIST
683
           && TREE_TYPE (init) != unknown_type_node)
684
    {
685
      gcc_assert (TREE_CODE (decl) != RESULT_DECL);
686
 
687
      if (TREE_CODE (init) == TREE_LIST
688
               && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
689
        {
690
          error ("cannot initialize arrays using this syntax");
691
          return NULL_TREE;
692
        }
693
      else
694
        /* We get here with code like `int a (2);' */
695
        init = build_x_compound_expr_from_list (init, ELK_INIT,
696
                                                tf_warning_or_error);
697
    }
698
 
699
  /* End of special C++ code.  */
700
 
701
  if (flags & LOOKUP_ALREADY_DIGESTED)
702
    value = init;
703
  else
704
    /* Digest the specified initializer into an expression.  */
705
    value = digest_init_flags (type, init, flags);
706
 
707
  value = extend_ref_init_temps (decl, value, cleanups);
708
 
709
  /* In C++0x constant expression is a semantic, not syntactic, property.
710
     In C++98, make sure that what we thought was a constant expression at
711
     template definition time is still constant.  */
712
  if ((cxx_dialect >= cxx0x
713
       || DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl))
714
      && (decl_maybe_constant_var_p (decl)
715
          || TREE_STATIC (decl)))
716
    {
717
      bool const_init;
718
      value = fold_non_dependent_expr (value);
719
      value = maybe_constant_init (value);
720
      if (DECL_DECLARED_CONSTEXPR_P (decl))
721
        {
722
          /* Diagnose a non-constant initializer for constexpr.  */
723
          if (processing_template_decl
724
              && !require_potential_constant_expression (value))
725
            value = error_mark_node;
726
          else
727
            value = cxx_constant_value (value);
728
        }
729
      const_init = (reduced_constant_expression_p (value)
730
                    || error_operand_p (value));
731
      DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = const_init;
732
      TREE_CONSTANT (decl) = const_init && decl_maybe_constant_var_p (decl);
733
    }
734
 
735
  /* If the initializer is not a constant, fill in DECL_INITIAL with
736
     the bits that are constant, and then return an expression that
737
     will perform the dynamic initialization.  */
738
  if (value != error_mark_node
739
      && (TREE_SIDE_EFFECTS (value)
740
           || ! initializer_constant_valid_p (value, TREE_TYPE (value))))
741
    {
742
      if (TREE_CODE (type) == ARRAY_TYPE
743
          && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (type)))
744
        /* For an array, we only need/want a single cleanup region rather
745
           than one per element.  */
746
        return build_vec_init (decl, NULL_TREE, value, false, 1,
747
                               tf_warning_or_error);
748
      else
749
        return split_nonconstant_init (decl, value);
750
    }
751
  /* If the value is a constant, just put it in DECL_INITIAL.  If DECL
752
     is an automatic variable, the middle end will turn this into a
753
     dynamic initialization later.  */
754
  DECL_INITIAL (decl) = value;
755
  return NULL_TREE;
756
}
757
 
758
 
759
/* Give errors about narrowing conversions within { }.  */
760
 
761
void
762
check_narrowing (tree type, tree init)
763
{
764
  tree ftype = unlowered_expr_type (init);
765
  bool ok = true;
766
  REAL_VALUE_TYPE d;
767
 
768
  if (!warn_narrowing || !ARITHMETIC_TYPE_P (type))
769
    return;
770
 
771
  if (BRACE_ENCLOSED_INITIALIZER_P (init)
772
      && TREE_CODE (type) == COMPLEX_TYPE)
773
    {
774
      tree elttype = TREE_TYPE (type);
775
      check_narrowing (elttype, CONSTRUCTOR_ELT (init, 0)->value);
776
      if (CONSTRUCTOR_NELTS (init) > 1)
777
        check_narrowing (elttype, CONSTRUCTOR_ELT (init, 1)->value);
778
      return;
779
    }
780
 
781
  init = maybe_constant_value (init);
782
 
783
  if (TREE_CODE (type) == INTEGER_TYPE
784
      && TREE_CODE (ftype) == REAL_TYPE)
785
    ok = false;
786
  else if (INTEGRAL_OR_ENUMERATION_TYPE_P (ftype)
787
           && CP_INTEGRAL_TYPE_P (type))
788
    {
789
      if ((tree_int_cst_lt (TYPE_MAX_VALUE (type),
790
                            TYPE_MAX_VALUE (ftype))
791
           || tree_int_cst_lt (TYPE_MIN_VALUE (ftype),
792
                               TYPE_MIN_VALUE (type)))
793
          && (TREE_CODE (init) != INTEGER_CST
794
              || !int_fits_type_p (init, type)))
795
        ok = false;
796
    }
797
  else if (TREE_CODE (ftype) == REAL_TYPE
798
           && TREE_CODE (type) == REAL_TYPE)
799
    {
800
      if (TYPE_PRECISION (type) < TYPE_PRECISION (ftype))
801
        {
802
          if (TREE_CODE (init) == REAL_CST)
803
            {
804
              /* Issue 703: Loss of precision is OK as long as the value is
805
                 within the representable range of the new type.  */
806
              REAL_VALUE_TYPE r;
807
              d = TREE_REAL_CST (init);
808
              real_convert (&r, TYPE_MODE (type), &d);
809
              if (real_isinf (&r))
810
                ok = false;
811
            }
812
          else
813
            ok = false;
814
        }
815
    }
816
  else if (INTEGRAL_OR_ENUMERATION_TYPE_P (ftype)
817
           && TREE_CODE (type) == REAL_TYPE)
818
    {
819
      ok = false;
820
      if (TREE_CODE (init) == INTEGER_CST)
821
        {
822
          d = real_value_from_int_cst (0, init);
823
          if (exact_real_truncate (TYPE_MODE (type), &d))
824
            ok = true;
825
        }
826
    }
827
 
828
  if (!ok)
829
    {
830
      if (cxx_dialect >= cxx0x)
831
        pedwarn (EXPR_LOC_OR_HERE (init), OPT_Wnarrowing,
832
                 "narrowing conversion of %qE from %qT to %qT inside { }",
833
                 init, ftype, type);
834
      else
835
        warning_at (EXPR_LOC_OR_HERE (init), OPT_Wnarrowing,
836
                    "narrowing conversion of %qE from %qT to %qT inside { } "
837
                    "is ill-formed in C++11", init, ftype, type);
838
    }
839
}
840
 
841
/* Process the initializer INIT for a variable of type TYPE, emitting
842
   diagnostics for invalid initializers and converting the initializer as
843
   appropriate.
844
 
845
   For aggregate types, it assumes that reshape_init has already run, thus the
846
   initializer will have the right shape (brace elision has been undone).
847
 
848
   NESTED is true iff we are being called for an element of a CONSTRUCTOR.  */
849
 
850
static tree
851
digest_init_r (tree type, tree init, bool nested, int flags,
852
               tsubst_flags_t complain)
853
{
854
  enum tree_code code = TREE_CODE (type);
855
 
856
  if (error_operand_p (init))
857
    return error_mark_node;
858
 
859
  gcc_assert (init);
860
 
861
  /* We must strip the outermost array type when completing the type,
862
     because the its bounds might be incomplete at the moment.  */
863
  if (!complete_type_or_maybe_complain (TREE_CODE (type) == ARRAY_TYPE
864
                                        ? TREE_TYPE (type) : type, NULL_TREE,
865
                                        complain))
866
    return error_mark_node;
867
 
868
  /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue
869
     (g++.old-deja/g++.law/casts2.C).  */
870
  if (TREE_CODE (init) == NON_LVALUE_EXPR)
871
    init = TREE_OPERAND (init, 0);
872
 
873
  /* Initialization of an array of chars from a string constant. The initializer
874
     can be optionally enclosed in braces, but reshape_init has already removed
875
     them if they were present.  */
876
  if (code == ARRAY_TYPE)
877
    {
878
      tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
879
      if (char_type_p (typ1)
880
          /*&& init */
881
          && TREE_CODE (init) == STRING_CST)
882
        {
883
          tree char_type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (init)));
884
 
885
          if (TYPE_PRECISION (typ1) == BITS_PER_UNIT)
886
            {
887
              if (char_type != char_type_node)
888
                {
889
                  if (complain & tf_error)
890
                    error ("char-array initialized from wide string");
891
                  return error_mark_node;
892
                }
893
            }
894
          else
895
            {
896
              if (char_type == char_type_node)
897
                {
898
                  if (complain & tf_error)
899
                    error ("int-array initialized from non-wide string");
900
                  return error_mark_node;
901
                }
902
              else if (char_type != typ1)
903
                {
904
                  if (complain & tf_error)
905
                    error ("int-array initialized from incompatible "
906
                           "wide string");
907
                  return error_mark_node;
908
                }
909
            }
910
 
911
          if (type != TREE_TYPE (init))
912
            {
913
              init = copy_node (init);
914
              TREE_TYPE (init) = type;
915
            }
916
          if (TYPE_DOMAIN (type) != 0 && TREE_CONSTANT (TYPE_SIZE (type)))
917
            {
918
              int size = TREE_INT_CST_LOW (TYPE_SIZE (type));
919
              size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
920
              /* In C it is ok to subtract 1 from the length of the string
921
                 because it's ok to ignore the terminating null char that is
922
                 counted in the length of the constant, but in C++ this would
923
                 be invalid.  */
924
              if (size < TREE_STRING_LENGTH (init))
925
                permerror (input_location, "initializer-string for array "
926
                           "of chars is too long");
927
            }
928
          return init;
929
        }
930
    }
931
 
932
  /* Handle scalar types (including conversions) and references.  */
933
  if ((TREE_CODE (type) != COMPLEX_TYPE
934
       || BRACE_ENCLOSED_INITIALIZER_P (init))
935
      && (SCALAR_TYPE_P (type) || code == REFERENCE_TYPE))
936
    {
937
      tree *exp;
938
 
939
      if (nested)
940
        check_narrowing (type, init);
941
      init = convert_for_initialization (0, type, init, flags,
942
                                         ICR_INIT, NULL_TREE, 0,
943
                                         complain);
944
      exp = &init;
945
 
946
      /* Skip any conversions since we'll be outputting the underlying
947
         constant.  */
948
      while (CONVERT_EXPR_P (*exp)
949
             || TREE_CODE (*exp) == NON_LVALUE_EXPR)
950
        exp = &TREE_OPERAND (*exp, 0);
951
 
952
      *exp = cplus_expand_constant (*exp);
953
 
954
      return init;
955
    }
956
 
957
  /* Come here only for aggregates: records, arrays, unions, complex numbers
958
     and vectors.  */
959
  gcc_assert (TREE_CODE (type) == ARRAY_TYPE
960
              || TREE_CODE (type) == VECTOR_TYPE
961
              || TREE_CODE (type) == RECORD_TYPE
962
              || TREE_CODE (type) == UNION_TYPE
963
              || TREE_CODE (type) == COMPLEX_TYPE);
964
 
965
  if (BRACE_ENCLOSED_INITIALIZER_P (init)
966
      && !TYPE_NON_AGGREGATE_CLASS (type))
967
    return process_init_constructor (type, init, complain);
968
  else
969
    {
970
      if (COMPOUND_LITERAL_P (init) && TREE_CODE (type) == ARRAY_TYPE)
971
        {
972
          if (complain & tf_error)
973
            error ("cannot initialize aggregate of type %qT with "
974
                   "a compound literal", type);
975
 
976
          return error_mark_node;
977
        }
978
 
979
      if (TREE_CODE (type) == ARRAY_TYPE
980
          && !BRACE_ENCLOSED_INITIALIZER_P (init))
981
        {
982
          /* Allow the result of build_array_copy and of
983
             build_value_init_noctor.  */
984
          if ((TREE_CODE (init) == VEC_INIT_EXPR
985
               || TREE_CODE (init) == CONSTRUCTOR)
986
              && (same_type_ignoring_top_level_qualifiers_p
987
                  (type, TREE_TYPE (init))))
988
            return init;
989
 
990
          if (complain & tf_error)
991
            error ("array must be initialized with a brace-enclosed"
992
                   " initializer");
993
          return error_mark_node;
994
        }
995
 
996
      return convert_for_initialization (NULL_TREE, type, init,
997
                                         flags,
998
                                         ICR_INIT, NULL_TREE, 0,
999
                                         complain);
1000
    }
1001
}
1002
 
1003
tree
1004
digest_init (tree type, tree init, tsubst_flags_t complain)
1005
{
1006
  return digest_init_r (type, init, false, LOOKUP_IMPLICIT, complain);
1007
}
1008
 
1009
tree
1010
digest_init_flags (tree type, tree init, int flags)
1011
{
1012
  return digest_init_r (type, init, false, flags, tf_warning_or_error);
1013
}
1014
 
1015
/* Set of flags used within process_init_constructor to describe the
1016
   initializers.  */
1017
#define PICFLAG_ERRONEOUS 1
1018
#define PICFLAG_NOT_ALL_CONSTANT 2
1019
#define PICFLAG_NOT_ALL_SIMPLE 4
1020
 
1021
/* Given an initializer INIT, return the flag (PICFLAG_*) which better
1022
   describe it.  */
1023
 
1024
static int
1025
picflag_from_initializer (tree init)
1026
{
1027
  if (init == error_mark_node)
1028
    return PICFLAG_ERRONEOUS;
1029
  else if (!TREE_CONSTANT (init))
1030
    return PICFLAG_NOT_ALL_CONSTANT;
1031
  else if (!initializer_constant_valid_p (init, TREE_TYPE (init)))
1032
    return PICFLAG_NOT_ALL_SIMPLE;
1033
  return 0;
1034
}
1035
 
1036
/* Subroutine of process_init_constructor, which will process an initializer
1037
   INIT for an array or vector of type TYPE. Returns the flags (PICFLAG_*)
1038
   which describe the initializers.  */
1039
 
1040
static int
1041
process_init_constructor_array (tree type, tree init,
1042
                                tsubst_flags_t complain)
1043
{
1044
  unsigned HOST_WIDE_INT i, len = 0;
1045
  int flags = 0;
1046
  bool unbounded = false;
1047
  constructor_elt *ce;
1048
  VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (init);
1049
 
1050
  gcc_assert (TREE_CODE (type) == ARRAY_TYPE
1051
              || TREE_CODE (type) == VECTOR_TYPE);
1052
 
1053
  if (TREE_CODE (type) == ARRAY_TYPE)
1054
    {
1055
      tree domain = TYPE_DOMAIN (type);
1056
      if (domain)
1057
        len = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (domain))
1058
              - TREE_INT_CST_LOW (TYPE_MIN_VALUE (domain))
1059
              + 1);
1060
      else
1061
        unbounded = true;  /* Take as many as there are.  */
1062
    }
1063
  else
1064
    /* Vectors are like simple fixed-size arrays.  */
1065
    len = TYPE_VECTOR_SUBPARTS (type);
1066
 
1067
  /* There must not be more initializers than needed.  */
1068
  if (!unbounded && VEC_length (constructor_elt, v)  > len)
1069
    {
1070
      if (complain & tf_error)
1071
        error ("too many initializers for %qT", type);
1072
      else
1073
        return PICFLAG_ERRONEOUS;
1074
    }
1075
 
1076
  FOR_EACH_VEC_ELT (constructor_elt, v, i, ce)
1077
    {
1078
      if (ce->index)
1079
        {
1080
          gcc_assert (TREE_CODE (ce->index) == INTEGER_CST);
1081
          if (compare_tree_int (ce->index, i) != 0)
1082
            {
1083
              ce->value = error_mark_node;
1084
              sorry ("non-trivial designated initializers not supported");
1085
            }
1086
        }
1087
      else
1088
        ce->index = size_int (i);
1089
      gcc_assert (ce->value);
1090
      ce->value = digest_init_r (TREE_TYPE (type), ce->value, true,
1091
                                 LOOKUP_IMPLICIT, complain);
1092
 
1093
      if (ce->value != error_mark_node)
1094
        gcc_assert (same_type_ignoring_top_level_qualifiers_p
1095
                      (TREE_TYPE (type), TREE_TYPE (ce->value)));
1096
 
1097
      flags |= picflag_from_initializer (ce->value);
1098
    }
1099
 
1100
  /* No more initializers. If the array is unbounded, we are done. Otherwise,
1101
     we must add initializers ourselves.  */
1102
  if (!unbounded)
1103
    for (; i < len; ++i)
1104
      {
1105
        tree next;
1106
 
1107
        if (type_build_ctor_call (TREE_TYPE (type)))
1108
          {
1109
            /* If this type needs constructors run for default-initialization,
1110
              we can't rely on the back end to do it for us, so make the
1111
              initialization explicit by list-initializing from {}.  */
1112
            next = build_constructor (init_list_type_node, NULL);
1113
            next = digest_init (TREE_TYPE (type), next, complain);
1114
          }
1115
        else if (!zero_init_p (TREE_TYPE (type)))
1116
          next = build_zero_init (TREE_TYPE (type),
1117
                                  /*nelts=*/NULL_TREE,
1118
                                  /*static_storage_p=*/false);
1119
        else
1120
          /* The default zero-initialization is fine for us; don't
1121
             add anything to the CONSTRUCTOR.  */
1122
          break;
1123
 
1124
        flags |= picflag_from_initializer (next);
1125
        CONSTRUCTOR_APPEND_ELT (v, size_int (i), next);
1126
      }
1127
 
1128
  CONSTRUCTOR_ELTS (init) = v;
1129
  return flags;
1130
}
1131
 
1132
/* Subroutine of process_init_constructor, which will process an initializer
1133
   INIT for a class of type TYPE. Returns the flags (PICFLAG_*) which describe
1134
   the initializers.  */
1135
 
1136
static int
1137
process_init_constructor_record (tree type, tree init,
1138
                                 tsubst_flags_t complain)
1139
{
1140
  VEC(constructor_elt,gc) *v = NULL;
1141
  int flags = 0;
1142
  tree field;
1143
  unsigned HOST_WIDE_INT idx = 0;
1144
 
1145
  gcc_assert (TREE_CODE (type) == RECORD_TYPE);
1146
  gcc_assert (!CLASSTYPE_VBASECLASSES (type));
1147
  gcc_assert (!TYPE_BINFO (type)
1148
              || !BINFO_N_BASE_BINFOS (TYPE_BINFO (type)));
1149
  gcc_assert (!TYPE_POLYMORPHIC_P (type));
1150
 
1151
  /* Generally, we will always have an index for each initializer (which is
1152
     a FIELD_DECL, put by reshape_init), but compound literals don't go trough
1153
     reshape_init. So we need to handle both cases.  */
1154
  for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
1155
    {
1156
      tree next;
1157
      tree type;
1158
 
1159
      if (!DECL_NAME (field) && DECL_C_BIT_FIELD (field))
1160
        {
1161
          flags |= picflag_from_initializer (integer_zero_node);
1162
          CONSTRUCTOR_APPEND_ELT (v, field, integer_zero_node);
1163
          continue;
1164
        }
1165
 
1166
      if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
1167
        continue;
1168
 
1169
      /* If this is a bitfield, first convert to the declared type.  */
1170
      type = TREE_TYPE (field);
1171
      if (DECL_BIT_FIELD_TYPE (field))
1172
        type = DECL_BIT_FIELD_TYPE (field);
1173
 
1174
      if (idx < VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)))
1175
        {
1176
          constructor_elt *ce = VEC_index (constructor_elt,
1177
                                           CONSTRUCTOR_ELTS (init), idx);
1178
          if (ce->index)
1179
            {
1180
              /* We can have either a FIELD_DECL or an IDENTIFIER_NODE. The
1181
                 latter case can happen in templates where lookup has to be
1182
                 deferred.  */
1183
              gcc_assert (TREE_CODE (ce->index) == FIELD_DECL
1184
                          || TREE_CODE (ce->index) == IDENTIFIER_NODE);
1185
              if (ce->index != field
1186
                  && ce->index != DECL_NAME (field))
1187
                {
1188
                  ce->value = error_mark_node;
1189
                  sorry ("non-trivial designated initializers not supported");
1190
                }
1191
            }
1192
 
1193
          gcc_assert (ce->value);
1194
          next = digest_init_r (type, ce->value, true,
1195
                                LOOKUP_IMPLICIT, complain);
1196
          ++idx;
1197
        }
1198
      else if (type_build_ctor_call (TREE_TYPE (field)))
1199
        {
1200
          /* If this type needs constructors run for
1201
             default-initialization, we can't rely on the back end to do it
1202
             for us, so build up TARGET_EXPRs.  If the type in question is
1203
             a class, just build one up; if it's an array, recurse.  */
1204
          next = build_constructor (init_list_type_node, NULL);
1205
          if (MAYBE_CLASS_TYPE_P (TREE_TYPE (field)))
1206
            {
1207
              next = finish_compound_literal (TREE_TYPE (field), next,
1208
                                              complain);
1209
              /* direct-initialize the target. No temporary is going
1210
                  to be involved.  */
1211
              if (TREE_CODE (next) == TARGET_EXPR)
1212
                TARGET_EXPR_DIRECT_INIT_P (next) = true;
1213
            }
1214
 
1215
          next = digest_init_r (TREE_TYPE (field), next, true,
1216
                                LOOKUP_IMPLICIT, complain);
1217
 
1218
          /* Warn when some struct elements are implicitly initialized.  */
1219
          warning (OPT_Wmissing_field_initializers,
1220
                   "missing initializer for member %qD", field);
1221
        }
1222
      else
1223
        {
1224
          if (TREE_READONLY (field))
1225
            {
1226
              if (complain & tf_error)
1227
                error ("uninitialized const member %qD", field);
1228
              else
1229
                return PICFLAG_ERRONEOUS;
1230
            }
1231
          else if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
1232
            {
1233
              if (complain & tf_error)
1234
                error ("member %qD with uninitialized const fields", field);
1235
              else
1236
                return PICFLAG_ERRONEOUS;
1237
            }
1238
          else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
1239
            {
1240
              if (complain & tf_error)
1241
                error ("member %qD is uninitialized reference", field);
1242
              else
1243
                return PICFLAG_ERRONEOUS;
1244
            }
1245
 
1246
          /* Warn when some struct elements are implicitly initialized
1247
             to zero.  */
1248
          warning (OPT_Wmissing_field_initializers,
1249
                   "missing initializer for member %qD", field);
1250
 
1251
          if (!zero_init_p (TREE_TYPE (field)))
1252
            next = build_zero_init (TREE_TYPE (field), /*nelts=*/NULL_TREE,
1253
                                    /*static_storage_p=*/false);
1254
          else
1255
            /* The default zero-initialization is fine for us; don't
1256
            add anything to the CONSTRUCTOR.  */
1257
            continue;
1258
        }
1259
 
1260
      /* If this is a bitfield, now convert to the lowered type.  */
1261
      if (type != TREE_TYPE (field))
1262
        next = cp_convert_and_check (TREE_TYPE (field), next);
1263
      flags |= picflag_from_initializer (next);
1264
      CONSTRUCTOR_APPEND_ELT (v, field, next);
1265
    }
1266
 
1267
  if (idx < VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)))
1268
    {
1269
      if (complain & tf_error)
1270
        error ("too many initializers for %qT", type);
1271
      else
1272
        return PICFLAG_ERRONEOUS;
1273
    }
1274
 
1275
  CONSTRUCTOR_ELTS (init) = v;
1276
  return flags;
1277
}
1278
 
1279
/* Subroutine of process_init_constructor, which will process a single
1280
   initializer INIT for a union of type TYPE. Returns the flags (PICFLAG_*)
1281
   which describe the initializer.  */
1282
 
1283
static int
1284
process_init_constructor_union (tree type, tree init,
1285
                                tsubst_flags_t complain)
1286
{
1287
  constructor_elt *ce;
1288
  int len;
1289
 
1290
  /* If the initializer was empty, use default zero initialization.  */
1291
  if (VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (init)))
1292
    return 0;
1293
 
1294
  len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
1295
  if (len > 1)
1296
    {
1297
      if (!(complain & tf_error))
1298
        return PICFLAG_ERRONEOUS;
1299
      error ("too many initializers for %qT", type);
1300
      VEC_block_remove (constructor_elt, CONSTRUCTOR_ELTS (init), 1, len-1);
1301
    }
1302
 
1303
  ce = VEC_index (constructor_elt, CONSTRUCTOR_ELTS (init), 0);
1304
 
1305
  /* If this element specifies a field, initialize via that field.  */
1306
  if (ce->index)
1307
    {
1308
      if (TREE_CODE (ce->index) == FIELD_DECL)
1309
        ;
1310
      else if (TREE_CODE (ce->index) == IDENTIFIER_NODE)
1311
        {
1312
          /* This can happen within a cast, see g++.dg/opt/cse2.C.  */
1313
          tree name = ce->index;
1314
          tree field;
1315
          for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1316
            if (DECL_NAME (field) == name)
1317
              break;
1318
          if (!field)
1319
            {
1320
              if (complain & tf_error)
1321
                error ("no field %qD found in union being initialized",
1322
                       field);
1323
              ce->value = error_mark_node;
1324
            }
1325
          ce->index = field;
1326
        }
1327
      else
1328
        {
1329
          gcc_assert (TREE_CODE (ce->index) == INTEGER_CST
1330
                      || TREE_CODE (ce->index) == RANGE_EXPR);
1331
          if (complain & tf_error)
1332
            error ("index value instead of field name in union initializer");
1333
          ce->value = error_mark_node;
1334
        }
1335
    }
1336
  else
1337
    {
1338
      /* Find the first named field.  ANSI decided in September 1990
1339
         that only named fields count here.  */
1340
      tree field = TYPE_FIELDS (type);
1341
      while (field && (!DECL_NAME (field) || TREE_CODE (field) != FIELD_DECL))
1342
        field = TREE_CHAIN (field);
1343
      if (field == NULL_TREE)
1344
        {
1345
          if (complain & tf_error)
1346
            error ("too many initializers for %qT", type);
1347
          ce->value = error_mark_node;
1348
        }
1349
      ce->index = field;
1350
    }
1351
 
1352
  if (ce->value && ce->value != error_mark_node)
1353
    ce->value = digest_init_r (TREE_TYPE (ce->index), ce->value,
1354
                               true, LOOKUP_IMPLICIT, complain);
1355
 
1356
  return picflag_from_initializer (ce->value);
1357
}
1358
 
1359
/* Process INIT, a constructor for a variable of aggregate type TYPE. The
1360
   constructor is a brace-enclosed initializer, and will be modified in-place.
1361
 
1362
   Each element is converted to the right type through digest_init, and
1363
   missing initializers are added following the language rules (zero-padding,
1364
   etc.).
1365
 
1366
   After the execution, the initializer will have TREE_CONSTANT if all elts are
1367
   constant, and TREE_STATIC set if, in addition, all elts are simple enough
1368
   constants that the assembler and linker can compute them.
1369
 
1370
   The function returns the initializer itself, or error_mark_node in case
1371
   of error.  */
1372
 
1373
static tree
1374
process_init_constructor (tree type, tree init, tsubst_flags_t complain)
1375
{
1376
  int flags;
1377
 
1378
  gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
1379
 
1380
  if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
1381
    flags = process_init_constructor_array (type, init, complain);
1382
  else if (TREE_CODE (type) == RECORD_TYPE)
1383
    flags = process_init_constructor_record (type, init, complain);
1384
  else if (TREE_CODE (type) == UNION_TYPE)
1385
    flags = process_init_constructor_union (type, init, complain);
1386
  else
1387
    gcc_unreachable ();
1388
 
1389
  if (flags & PICFLAG_ERRONEOUS)
1390
    return error_mark_node;
1391
 
1392
  TREE_TYPE (init) = type;
1393
  if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE)
1394
    cp_complete_array_type (&TREE_TYPE (init), init, /*do_default=*/0);
1395
  if (!(flags & PICFLAG_NOT_ALL_CONSTANT))
1396
    {
1397
      TREE_CONSTANT (init) = 1;
1398
      if (!(flags & PICFLAG_NOT_ALL_SIMPLE))
1399
        TREE_STATIC (init) = 1;
1400
    }
1401
  return init;
1402
}
1403
 
1404
/* Given a structure or union value DATUM, construct and return
1405
   the structure or union component which results from narrowing
1406
   that value to the base specified in BASETYPE.  For example, given the
1407
   hierarchy
1408
 
1409
   class L { int ii; };
1410
   class A : L { ... };
1411
   class B : L { ... };
1412
   class C : A, B { ... };
1413
 
1414
   and the declaration
1415
 
1416
   C x;
1417
 
1418
   then the expression
1419
 
1420
   x.A::ii refers to the ii member of the L part of
1421
   the A part of the C object named by X.  In this case,
1422
   DATUM would be x, and BASETYPE would be A.
1423
 
1424
   I used to think that this was nonconformant, that the standard specified
1425
   that first we look up ii in A, then convert x to an L& and pull out the
1426
   ii part.  But in fact, it does say that we convert x to an A&; A here
1427
   is known as the "naming class".  (jason 2000-12-19)
1428
 
1429
   BINFO_P points to a variable initialized either to NULL_TREE or to the
1430
   binfo for the specific base subobject we want to convert to.  */
1431
 
1432
tree
1433
build_scoped_ref (tree datum, tree basetype, tree* binfo_p)
1434
{
1435
  tree binfo;
1436
 
1437
  if (datum == error_mark_node)
1438
    return error_mark_node;
1439
  if (*binfo_p)
1440
    binfo = *binfo_p;
1441
  else
1442
    binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check, NULL);
1443
 
1444
  if (!binfo || binfo == error_mark_node)
1445
    {
1446
      *binfo_p = NULL_TREE;
1447
      if (!binfo)
1448
        error_not_base_type (basetype, TREE_TYPE (datum));
1449
      return error_mark_node;
1450
    }
1451
 
1452
  *binfo_p = binfo;
1453
  return build_base_path (PLUS_EXPR, datum, binfo, 1,
1454
                          tf_warning_or_error);
1455
}
1456
 
1457
/* Build a reference to an object specified by the C++ `->' operator.
1458
   Usually this just involves dereferencing the object, but if the
1459
   `->' operator is overloaded, then such overloads must be
1460
   performed until an object which does not have the `->' operator
1461
   overloaded is found.  An error is reported when circular pointer
1462
   delegation is detected.  */
1463
 
1464
tree
1465
build_x_arrow (tree expr)
1466
{
1467
  tree orig_expr = expr;
1468
  tree type = TREE_TYPE (expr);
1469
  tree last_rval = NULL_TREE;
1470
  VEC(tree,gc) *types_memoized = NULL;
1471
 
1472
  if (type == error_mark_node)
1473
    return error_mark_node;
1474
 
1475
  if (processing_template_decl)
1476
    {
1477
      if (type_dependent_expression_p (expr))
1478
        return build_min_nt (ARROW_EXPR, expr);
1479
      expr = build_non_dependent_expr (expr);
1480
    }
1481
 
1482
  if (MAYBE_CLASS_TYPE_P (type))
1483
    {
1484
      struct tinst_level *actual_inst = current_instantiation ();
1485
      tree fn = NULL;
1486
 
1487
      while ((expr = build_new_op (COMPONENT_REF, LOOKUP_NORMAL, expr,
1488
                                   NULL_TREE, NULL_TREE,
1489
                                   &fn, tf_warning_or_error)))
1490
        {
1491
          if (expr == error_mark_node)
1492
            return error_mark_node;
1493
 
1494
          if (fn && DECL_USE_TEMPLATE (fn))
1495
            push_tinst_level (fn);
1496
          fn = NULL;
1497
 
1498
          if (vec_member (TREE_TYPE (expr), types_memoized))
1499
            {
1500
              error ("circular pointer delegation detected");
1501
              return error_mark_node;
1502
            }
1503
 
1504
          VEC_safe_push (tree, gc, types_memoized, TREE_TYPE (expr));
1505
          last_rval = expr;
1506
        }
1507
 
1508
      while (current_instantiation () != actual_inst)
1509
        pop_tinst_level ();
1510
 
1511
      if (last_rval == NULL_TREE)
1512
        {
1513
          error ("base operand of %<->%> has non-pointer type %qT", type);
1514
          return error_mark_node;
1515
        }
1516
 
1517
      if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1518
        last_rval = convert_from_reference (last_rval);
1519
    }
1520
  else
1521
    last_rval = decay_conversion (expr);
1522
 
1523
  if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1524
    {
1525
      if (processing_template_decl)
1526
        {
1527
          expr = build_min (ARROW_EXPR, TREE_TYPE (TREE_TYPE (last_rval)),
1528
                            orig_expr);
1529
          TREE_SIDE_EFFECTS (expr) = TREE_SIDE_EFFECTS (last_rval);
1530
          return expr;
1531
        }
1532
 
1533
      return cp_build_indirect_ref (last_rval, RO_NULL, tf_warning_or_error);
1534
    }
1535
 
1536
  if (types_memoized)
1537
    error ("result of %<operator->()%> yields non-pointer result");
1538
  else
1539
    error ("base operand of %<->%> is not a pointer");
1540
  return error_mark_node;
1541
}
1542
 
1543
/* Return an expression for "DATUM .* COMPONENT".  DATUM has not
1544
   already been checked out to be of aggregate type.  */
1545
 
1546
tree
1547
build_m_component_ref (tree datum, tree component)
1548
{
1549
  tree ptrmem_type;
1550
  tree objtype;
1551
  tree type;
1552
  tree binfo;
1553
  tree ctype;
1554
 
1555
  if (error_operand_p (datum) || error_operand_p (component))
1556
    return error_mark_node;
1557
 
1558
  datum = mark_lvalue_use (datum);
1559
  component = mark_rvalue_use (component);
1560
 
1561
  ptrmem_type = TREE_TYPE (component);
1562
  if (!TYPE_PTR_TO_MEMBER_P (ptrmem_type))
1563
    {
1564
      error ("%qE cannot be used as a member pointer, since it is of "
1565
             "type %qT",
1566
             component, ptrmem_type);
1567
      return error_mark_node;
1568
    }
1569
 
1570
  objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
1571
  if (! MAYBE_CLASS_TYPE_P (objtype))
1572
    {
1573
      error ("cannot apply member pointer %qE to %qE, which is of "
1574
             "non-class type %qT",
1575
             component, datum, objtype);
1576
      return error_mark_node;
1577
    }
1578
 
1579
  type = TYPE_PTRMEM_POINTED_TO_TYPE (ptrmem_type);
1580
  ctype = complete_type (TYPE_PTRMEM_CLASS_TYPE (ptrmem_type));
1581
 
1582
  if (!COMPLETE_TYPE_P (ctype))
1583
    {
1584
      if (!same_type_p (ctype, objtype))
1585
        goto mismatch;
1586
      binfo = NULL;
1587
    }
1588
  else
1589
    {
1590
      binfo = lookup_base (objtype, ctype, ba_check, NULL);
1591
 
1592
      if (!binfo)
1593
        {
1594
        mismatch:
1595
          error ("pointer to member type %qT incompatible with object "
1596
                 "type %qT",
1597
                 type, objtype);
1598
          return error_mark_node;
1599
        }
1600
      else if (binfo == error_mark_node)
1601
        return error_mark_node;
1602
    }
1603
 
1604
  if (TYPE_PTRMEM_P (ptrmem_type))
1605
    {
1606
      bool is_lval = real_lvalue_p (datum);
1607
      tree ptype;
1608
 
1609
      /* Compute the type of the field, as described in [expr.ref].
1610
         There's no such thing as a mutable pointer-to-member, so
1611
         things are not as complex as they are for references to
1612
         non-static data members.  */
1613
      type = cp_build_qualified_type (type,
1614
                                      (cp_type_quals (type)
1615
                                       | cp_type_quals (TREE_TYPE (datum))));
1616
 
1617
      datum = build_address (datum);
1618
 
1619
      /* Convert object to the correct base.  */
1620
      if (binfo)
1621
        datum = build_base_path (PLUS_EXPR, datum, binfo, 1,
1622
                                 tf_warning_or_error);
1623
 
1624
      /* Build an expression for "object + offset" where offset is the
1625
         value stored in the pointer-to-data-member.  */
1626
      ptype = build_pointer_type (type);
1627
      datum = fold_build_pointer_plus (fold_convert (ptype, datum), component);
1628
      datum = cp_build_indirect_ref (datum, RO_NULL, tf_warning_or_error);
1629
      /* If the object expression was an rvalue, return an rvalue.  */
1630
      if (!is_lval)
1631
        datum = move (datum);
1632
      return datum;
1633
    }
1634
  else
1635
    return build2 (OFFSET_REF, type, datum, component);
1636
}
1637
 
1638
/* Return a tree node for the expression TYPENAME '(' PARMS ')'.  */
1639
 
1640
tree
1641
build_functional_cast (tree exp, tree parms, tsubst_flags_t complain)
1642
{
1643
  /* This is either a call to a constructor,
1644
     or a C cast in C++'s `functional' notation.  */
1645
 
1646
  /* The type to which we are casting.  */
1647
  tree type;
1648
  VEC(tree,gc) *parmvec;
1649
 
1650
  if (exp == error_mark_node || parms == error_mark_node)
1651
    return error_mark_node;
1652
 
1653
  if (TREE_CODE (exp) == TYPE_DECL)
1654
    type = TREE_TYPE (exp);
1655
  else
1656
    type = exp;
1657
 
1658
  /* We need to check this explicitly, since value-initialization of
1659
     arrays is allowed in other situations.  */
1660
  if (TREE_CODE (type) == ARRAY_TYPE)
1661
    {
1662
      if (complain & tf_error)
1663
        error ("functional cast to array type %qT", type);
1664
      return error_mark_node;
1665
    }
1666
 
1667
  if (type_uses_auto (type))
1668
    {
1669
      if (complain & tf_error)
1670
        error ("invalid use of %<auto%>");
1671
      return error_mark_node;
1672
    }
1673
 
1674
  if (processing_template_decl)
1675
    {
1676
      tree t;
1677
 
1678
      /* Diagnose this even in a template.  We could also try harder
1679
         to give all the usual errors when the type and args are
1680
         non-dependent...  */
1681
      if (TREE_CODE (type) == REFERENCE_TYPE && !parms)
1682
        {
1683
          if (complain & tf_error)
1684
            error ("invalid value-initialization of reference type");
1685
          return error_mark_node;
1686
        }
1687
 
1688
      t = build_min (CAST_EXPR, type, parms);
1689
      /* We don't know if it will or will not have side effects.  */
1690
      TREE_SIDE_EFFECTS (t) = 1;
1691
      return t;
1692
    }
1693
 
1694
  if (! MAYBE_CLASS_TYPE_P (type))
1695
    {
1696
      if (parms == NULL_TREE)
1697
        {
1698
          if (VOID_TYPE_P (type))
1699
            return void_zero_node;
1700
          return build_value_init (cv_unqualified (type), complain);
1701
        }
1702
 
1703
      /* This must build a C cast.  */
1704
      parms = build_x_compound_expr_from_list (parms, ELK_FUNC_CAST, complain);
1705
      return cp_build_c_cast (type, parms, complain);
1706
    }
1707
 
1708
  /* Prepare to evaluate as a call to a constructor.  If this expression
1709
     is actually used, for example,
1710
 
1711
     return X (arg1, arg2, ...);
1712
 
1713
     then the slot being initialized will be filled in.  */
1714
 
1715
  if (!complete_type_or_maybe_complain (type, NULL_TREE, complain))
1716
    return error_mark_node;
1717
  if (abstract_virtuals_error_sfinae (NULL_TREE, type, complain))
1718
    return error_mark_node;
1719
 
1720
  /* [expr.type.conv]
1721
 
1722
     If the expression list is a single-expression, the type
1723
     conversion is equivalent (in definedness, and if defined in
1724
     meaning) to the corresponding cast expression.  */
1725
  if (parms && TREE_CHAIN (parms) == NULL_TREE)
1726
    return cp_build_c_cast (type, TREE_VALUE (parms), complain);
1727
 
1728
  /* [expr.type.conv]
1729
 
1730
     The expression T(), where T is a simple-type-specifier for a
1731
     non-array complete object type or the (possibly cv-qualified)
1732
     void type, creates an rvalue of the specified type, which is
1733
     value-initialized.  */
1734
 
1735
  if (parms == NULL_TREE)
1736
    {
1737
      exp = build_value_init (type, complain);
1738
      exp = get_target_expr_sfinae (exp, complain);
1739
      return exp;
1740
    }
1741
 
1742
  /* Call the constructor.  */
1743
  parmvec = make_tree_vector ();
1744
  for (; parms != NULL_TREE; parms = TREE_CHAIN (parms))
1745
    VEC_safe_push (tree, gc, parmvec, TREE_VALUE (parms));
1746
  exp = build_special_member_call (NULL_TREE, complete_ctor_identifier,
1747
                                   &parmvec, type, LOOKUP_NORMAL, complain);
1748
  release_tree_vector (parmvec);
1749
 
1750
  if (exp == error_mark_node)
1751
    return error_mark_node;
1752
 
1753
  return build_cplus_new (type, exp, complain);
1754
}
1755
 
1756
 
1757
/* Add new exception specifier SPEC, to the LIST we currently have.
1758
   If it's already in LIST then do nothing.
1759
   Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1760
   know what we're doing.  */
1761
 
1762
tree
1763
add_exception_specifier (tree list, tree spec, int complain)
1764
{
1765
  bool ok;
1766
  tree core = spec;
1767
  bool is_ptr;
1768
  diagnostic_t diag_type = DK_UNSPECIFIED; /* none */
1769
 
1770
  if (spec == error_mark_node)
1771
    return list;
1772
 
1773
  gcc_assert (spec && (!list || TREE_VALUE (list)));
1774
 
1775
  /* [except.spec] 1, type in an exception specifier shall not be
1776
     incomplete, or pointer or ref to incomplete other than pointer
1777
     to cv void.  */
1778
  is_ptr = TREE_CODE (core) == POINTER_TYPE;
1779
  if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1780
    core = TREE_TYPE (core);
1781
  if (complain < 0)
1782
    ok = true;
1783
  else if (VOID_TYPE_P (core))
1784
    ok = is_ptr;
1785
  else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1786
    ok = true;
1787
  else if (processing_template_decl)
1788
    ok = true;
1789
  else
1790
    {
1791
      ok = true;
1792
      /* 15.4/1 says that types in an exception specifier must be complete,
1793
         but it seems more reasonable to only require this on definitions
1794
         and calls.  So just give a pedwarn at this point; we will give an
1795
         error later if we hit one of those two cases.  */
1796
      if (!COMPLETE_TYPE_P (complete_type (core)))
1797
        diag_type = DK_PEDWARN; /* pedwarn */
1798
    }
1799
 
1800
  if (ok)
1801
    {
1802
      tree probe;
1803
 
1804
      for (probe = list; probe; probe = TREE_CHAIN (probe))
1805
        if (same_type_p (TREE_VALUE (probe), spec))
1806
          break;
1807
      if (!probe)
1808
        list = tree_cons (NULL_TREE, spec, list);
1809
    }
1810
  else
1811
    diag_type = DK_ERROR; /* error */
1812
 
1813
  if (diag_type != DK_UNSPECIFIED && complain)
1814
    cxx_incomplete_type_diagnostic (NULL_TREE, core, diag_type);
1815
 
1816
  return list;
1817
}
1818
 
1819
/* Like nothrow_spec_p, but don't abort on deferred noexcept.  */
1820
 
1821
static bool
1822
nothrow_spec_p_uninst (const_tree spec)
1823
{
1824
  if (DEFERRED_NOEXCEPT_SPEC_P (spec))
1825
    return false;
1826
  return nothrow_spec_p (spec);
1827
}
1828
 
1829
/* Combine the two exceptions specifier lists LIST and ADD, and return
1830
   their union.  If FN is non-null, it's the source of ADD.  */
1831
 
1832
tree
1833
merge_exception_specifiers (tree list, tree add, tree fn)
1834
{
1835
  tree noex, orig_list;
1836
 
1837
  /* No exception-specifier or noexcept(false) are less strict than
1838
     anything else.  Prefer the newer variant (LIST).  */
1839
  if (!list || list == noexcept_false_spec)
1840
    return list;
1841
  else if (!add || add == noexcept_false_spec)
1842
    return add;
1843
 
1844
  /* noexcept(true) and throw() are stricter than anything else.
1845
     As above, prefer the more recent one (LIST).  */
1846
  if (nothrow_spec_p_uninst (add))
1847
    return list;
1848
 
1849
  noex = TREE_PURPOSE (list);
1850
  if (DEFERRED_NOEXCEPT_SPEC_P (add))
1851
    {
1852
      /* If ADD is a deferred noexcept, we must have been called from
1853
         process_subob_fn.  For implicitly declared functions, we build up
1854
         a list of functions to consider at instantiation time.  */
1855
      if (noex == boolean_true_node)
1856
        noex = NULL_TREE;
1857
      gcc_assert (fn && (!noex || is_overloaded_fn (noex)));
1858
      noex = build_overload (fn, noex);
1859
    }
1860
  else if (nothrow_spec_p_uninst (list))
1861
    return add;
1862
  else
1863
    gcc_checking_assert (!TREE_PURPOSE (add)
1864
                         || cp_tree_equal (noex, TREE_PURPOSE (add)));
1865
 
1866
  /* Combine the dynamic-exception-specifiers, if any.  */
1867
  orig_list = list;
1868
  for (; add && TREE_VALUE (add); add = TREE_CHAIN (add))
1869
    {
1870
      tree spec = TREE_VALUE (add);
1871
      tree probe;
1872
 
1873
      for (probe = orig_list; probe && TREE_VALUE (probe);
1874
           probe = TREE_CHAIN (probe))
1875
        if (same_type_p (TREE_VALUE (probe), spec))
1876
          break;
1877
      if (!probe)
1878
        {
1879
          spec = build_tree_list (NULL_TREE, spec);
1880
          TREE_CHAIN (spec) = list;
1881
          list = spec;
1882
        }
1883
    }
1884
 
1885
  /* Keep the noexcept-specifier at the beginning of the list.  */
1886
  if (noex != TREE_PURPOSE (list))
1887
    list = tree_cons (noex, TREE_VALUE (list), TREE_CHAIN (list));
1888
 
1889
  return list;
1890
}
1891
 
1892
/* Subroutine of build_call.  Ensure that each of the types in the
1893
   exception specification is complete.  Technically, 15.4/1 says that
1894
   they need to be complete when we see a declaration of the function,
1895
   but we should be able to get away with only requiring this when the
1896
   function is defined or called.  See also add_exception_specifier.  */
1897
 
1898
void
1899
require_complete_eh_spec_types (tree fntype, tree decl)
1900
{
1901
  tree raises;
1902
  /* Don't complain about calls to op new.  */
1903
  if (decl && DECL_ARTIFICIAL (decl))
1904
    return;
1905
  for (raises = TYPE_RAISES_EXCEPTIONS (fntype); raises;
1906
       raises = TREE_CHAIN (raises))
1907
    {
1908
      tree type = TREE_VALUE (raises);
1909
      if (type && !COMPLETE_TYPE_P (type))
1910
        {
1911
          if (decl)
1912
            error
1913
              ("call to function %qD which throws incomplete type %q#T",
1914
               decl, type);
1915
          else
1916
            error ("call to function which throws incomplete type %q#T",
1917
                   decl);
1918
        }
1919
    }
1920
}
1921
 
1922
 
1923
#include "gt-cp-typeck2.h"

powered by: WebSVN 2.1.0

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