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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [cp/] [typeck2.c] - Blame information for rev 12

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 jlechner
/* 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
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 2, 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 COPYING.  If not, write to
22
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
23
Boston, MA 02110-1301, USA.  */
24
 
25
 
26
/* This file is part of the C++ front end.
27
   It contains routines to build C++ expressions given their operands,
28
   including computing the types of the result, C and C++ specific error
29
   checks, and some optimization.  */
30
 
31
#include "config.h"
32
#include "system.h"
33
#include "coretypes.h"
34
#include "tm.h"
35
#include "tree.h"
36
#include "cp-tree.h"
37
#include "flags.h"
38
#include "toplev.h"
39
#include "output.h"
40
#include "diagnostic.h"
41
 
42
static tree
43
process_init_constructor (tree type, tree init);
44
 
45
 
46
/* Print an error message stemming from an attempt to use
47
   BASETYPE as a base class for TYPE.  */
48
 
49
tree
50
error_not_base_type (tree basetype, tree type)
51
{
52
  if (TREE_CODE (basetype) == FUNCTION_DECL)
53
    basetype = DECL_CONTEXT (basetype);
54
  error ("type %qT is not a base type for type %qT", basetype, type);
55
  return error_mark_node;
56
}
57
 
58
tree
59
binfo_or_else (tree base, tree type)
60
{
61
  tree binfo = lookup_base (type, base, ba_unique, NULL);
62
 
63
  if (binfo == error_mark_node)
64
    return NULL_TREE;
65
  else if (!binfo)
66
    error_not_base_type (base, type);
67
  return binfo;
68
}
69
 
70
/* According to ARM $7.1.6, "A `const' object may be initialized, but its
71
   value may not be changed thereafter.  Thus, we emit hard errors for these,
72
   rather than just pedwarns.  If `SOFT' is 1, then we just pedwarn.  (For
73
   example, conversions to references.)  */
74
 
75
void
76
readonly_error (tree arg, const char* string, int soft)
77
{
78
  const char *fmt;
79
  void (*fn) (const char *, ...) ATTRIBUTE_GCC_CXXDIAG(1,2);
80
 
81
  if (soft)
82
    fn = pedwarn;
83
  else
84
    fn = error;
85
 
86
  if (TREE_CODE (arg) == COMPONENT_REF)
87
    {
88
      if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
89
        fmt = "%s of data-member %qD in read-only structure";
90
      else
91
        fmt = "%s of read-only data-member %qD";
92
      (*fn) (fmt, string, TREE_OPERAND (arg, 1));
93
    }
94
  else if (TREE_CODE (arg) == VAR_DECL)
95
    {
96
      if (DECL_LANG_SPECIFIC (arg)
97
          && DECL_IN_AGGR_P (arg)
98
          && !TREE_STATIC (arg))
99
        fmt = "%s of constant field %qD";
100
      else
101
        fmt = "%s of read-only variable %qD";
102
      (*fn) (fmt, string, arg);
103
    }
104
  else if (TREE_CODE (arg) == PARM_DECL)
105
    (*fn) ("%s of read-only parameter %qD", string, arg);
106
  else if (TREE_CODE (arg) == INDIRECT_REF
107
           && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
108
           && (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL
109
               || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
110
    (*fn) ("%s of read-only reference %qD", string, TREE_OPERAND (arg, 0));
111
  else if (TREE_CODE (arg) == RESULT_DECL)
112
    (*fn) ("%s of read-only named return value %qD", string, arg);
113
  else if (TREE_CODE (arg) == FUNCTION_DECL)
114
    (*fn) ("%s of function %qD", string, arg);
115
  else
116
    (*fn) ("%s of read-only location", string);
117
}
118
 
119
 
120
/* Structure that holds information about declarations whose type was
121
   incomplete and we could not check whether it was abstract or not.  */
122
 
123
struct pending_abstract_type GTY((chain_next ("%h.next")))
124
{
125
  /* Declaration which we are checking for abstractness. It is either
126
     a DECL node, or an IDENTIFIER_NODE if we do not have a full
127
     declaration available.  */
128
  tree decl;
129
 
130
  /* Type which will be checked for abstractness.  */
131
  tree type;
132
 
133
  /* Position of the declaration. This is only needed for IDENTIFIER_NODEs,
134
     because DECLs already carry locus information.  */
135
  location_t locus;
136
 
137
  /* Link to the next element in list.  */
138
  struct pending_abstract_type* next;
139
};
140
 
141
 
142
/* Compute the hash value of the node VAL. This function is used by the
143
   hash table abstract_pending_vars.  */
144
 
145
static hashval_t
146
pat_calc_hash (const void* val)
147
{
148
  const struct pending_abstract_type* pat = val;
149
  return (hashval_t) TYPE_UID (pat->type);
150
}
151
 
152
 
153
/* Compare node VAL1 with the type VAL2. This function is used by the
154
   hash table abstract_pending_vars.  */
155
 
156
static int
157
pat_compare (const void* val1, const void* val2)
158
{
159
  const struct pending_abstract_type* pat1 = val1;
160
  tree type2 = (tree)val2;
161
 
162
  return (pat1->type == type2);
163
}
164
 
165
/* Hash table that maintains pending_abstract_type nodes, for which we still
166
   need to check for type abstractness.  The key of the table is the type
167
   of the declaration.  */
168
static GTY ((param_is (struct pending_abstract_type)))
169
htab_t abstract_pending_vars = NULL;
170
 
171
 
172
/* This function is called after TYPE is completed, and will check if there
173
   are pending declarations for which we still need to verify the abstractness
174
   of TYPE, and emit a diagnostic (through abstract_virtuals_error) if TYPE
175
   turned out to be incomplete.  */
176
 
177
void
178
complete_type_check_abstract (tree type)
179
{
180
  void **slot;
181
  struct pending_abstract_type *pat;
182
  location_t cur_loc = input_location;
183
 
184
  gcc_assert (COMPLETE_TYPE_P (type));
185
 
186
  if (!abstract_pending_vars)
187
    return;
188
 
189
  /* Retrieve the list of pending declarations for this type.  */
190
  slot = htab_find_slot_with_hash (abstract_pending_vars, type,
191
                                   (hashval_t)TYPE_UID (type), NO_INSERT);
192
  if (!slot)
193
    return;
194
  pat = (struct pending_abstract_type*)*slot;
195
  gcc_assert (pat);
196
 
197
  /* If the type is not abstract, do not do anything.  */
198
  if (CLASSTYPE_PURE_VIRTUALS (type))
199
    {
200
      struct pending_abstract_type *prev = 0, *next;
201
 
202
      /* Reverse the list to emit the errors in top-down order.  */
203
      for (; pat; pat = next)
204
        {
205
          next = pat->next;
206
          pat->next = prev;
207
          prev = pat;
208
        }
209
      pat = prev;
210
 
211
      /* Go through the list, and call abstract_virtuals_error for each
212
        element: it will issue a diagnostic if the type is abstract.  */
213
      while (pat)
214
        {
215
          gcc_assert (type == pat->type);
216
 
217
          /* Tweak input_location so that the diagnostic appears at the correct
218
            location. Notice that this is only needed if the decl is an
219
            IDENTIFIER_NODE.  */
220
          input_location = pat->locus;
221
          abstract_virtuals_error (pat->decl, pat->type);
222
          pat = pat->next;
223
        }
224
    }
225
 
226
  htab_clear_slot (abstract_pending_vars, slot);
227
 
228
  input_location = cur_loc;
229
}
230
 
231
 
232
/* If TYPE has abstract virtual functions, issue an error about trying
233
   to create an object of that type.  DECL is the object declared, or
234
   NULL_TREE if the declaration is unavailable.  Returns 1 if an error
235
   occurred; zero if all was well.  */
236
 
237
int
238
abstract_virtuals_error (tree decl, tree type)
239
{
240
  VEC(tree,gc) *pure;
241
 
242
  /* This function applies only to classes. Any other entity can never
243
     be abstract.  */
244
  if (!CLASS_TYPE_P (type))
245
    return 0;
246
 
247
  /* If the type is incomplete, we register it within a hash table,
248
     so that we can check again once it is completed. This makes sense
249
     only for objects for which we have a declaration or at least a
250
     name.  */
251
  if (!COMPLETE_TYPE_P (type))
252
    {
253
      void **slot;
254
      struct pending_abstract_type *pat;
255
 
256
      gcc_assert (!decl || DECL_P (decl)
257
                  || TREE_CODE (decl) == IDENTIFIER_NODE);
258
 
259
      if (!abstract_pending_vars)
260
        abstract_pending_vars = htab_create_ggc (31, &pat_calc_hash,
261
                                                &pat_compare, NULL);
262
 
263
      slot = htab_find_slot_with_hash (abstract_pending_vars, type,
264
                                      (hashval_t)TYPE_UID (type), INSERT);
265
 
266
      pat = GGC_NEW (struct pending_abstract_type);
267
      pat->type = type;
268
      pat->decl = decl;
269
      pat->locus = ((decl && DECL_P (decl))
270
                    ? DECL_SOURCE_LOCATION (decl)
271
                    : input_location);
272
 
273
      pat->next = *slot;
274
      *slot = pat;
275
 
276
      return 0;
277
    }
278
 
279
  if (!TYPE_SIZE (type))
280
    /* TYPE is being defined, and during that time
281
       CLASSTYPE_PURE_VIRTUALS holds the inline friends.  */
282
    return 0;
283
 
284
  pure = CLASSTYPE_PURE_VIRTUALS (type);
285
  if (!pure)
286
    return 0;
287
 
288
  if (decl)
289
    {
290
      if (TREE_CODE (decl) == RESULT_DECL)
291
        return 0;
292
 
293
      if (TREE_CODE (decl) == VAR_DECL)
294
        error ("cannot declare variable %q+D to be of abstract "
295
               "type %qT", decl, type);
296
      else if (TREE_CODE (decl) == PARM_DECL)
297
        error ("cannot declare parameter %q+D to be of abstract type %qT",
298
               decl, type);
299
      else if (TREE_CODE (decl) == FIELD_DECL)
300
        error ("cannot declare field %q+D to be of abstract type %qT",
301
               decl, type);
302
      else if (TREE_CODE (decl) == FUNCTION_DECL
303
               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
304
        error ("invalid abstract return type for member function %q+#D", decl);
305
      else if (TREE_CODE (decl) == FUNCTION_DECL)
306
        error ("invalid abstract return type for function %q+#D", decl);
307
      else if (TREE_CODE (decl) == IDENTIFIER_NODE)
308
        /* Here we do not have location information.  */
309
        error ("invalid abstract type %qT for %qE", type, decl);
310
      else
311
        error ("invalid abstract type for %q+D", decl);
312
    }
313
  else
314
    error ("cannot allocate an object of abstract type %qT", type);
315
 
316
  /* Only go through this once.  */
317
  if (VEC_length (tree, pure))
318
    {
319
      unsigned ix;
320
      tree fn;
321
 
322
      inform ("%J  because the following virtual functions are pure "
323
              "within %qT:", TYPE_MAIN_DECL (type), type);
324
 
325
      for (ix = 0; VEC_iterate (tree, pure, ix, fn); ix++)
326
        inform ("\t%+#D", fn);
327
      /* Now truncate the vector.  This leaves it non-null, so we know
328
         there are pure virtuals, but empty so we don't list them out
329
         again.  */
330
      VEC_truncate (tree, pure, 0);
331
    }
332
  else
333
    inform ("%J  since type %qT has pure virtual functions",
334
            TYPE_MAIN_DECL (type), type);
335
 
336
  return 1;
337
}
338
 
339
/* Print an error message for invalid use of an incomplete type.
340
   VALUE is the expression that was used (or 0 if that isn't known)
341
   and TYPE is the type that was invalid.  DIAG_TYPE indicates the
342
   type of diagnostic:  0 for an error, 1 for a warning, 2 for a
343
   pedwarn.  */
344
 
345
void
346
cxx_incomplete_type_diagnostic (tree value, tree type, int diag_type)
347
{
348
  int decl = 0;
349
  void (*p_msg) (const char *, ...) ATTRIBUTE_GCC_CXXDIAG(1,2);
350
 
351
  if (diag_type == 1)
352
    p_msg = warning0;
353
  else if (diag_type == 2)
354
    p_msg = pedwarn;
355
  else
356
    p_msg = error;
357
 
358
  /* Avoid duplicate error message.  */
359
  if (TREE_CODE (type) == ERROR_MARK)
360
    return;
361
 
362
  if (value != 0 && (TREE_CODE (value) == VAR_DECL
363
                     || TREE_CODE (value) == PARM_DECL
364
                     || TREE_CODE (value) == FIELD_DECL))
365
    {
366
      p_msg ("%q+D has incomplete type", value);
367
      decl = 1;
368
    }
369
 retry:
370
  /* We must print an error message.  Be clever about what it says.  */
371
 
372
  switch (TREE_CODE (type))
373
    {
374
    case RECORD_TYPE:
375
    case UNION_TYPE:
376
    case ENUMERAL_TYPE:
377
      if (!decl)
378
        p_msg ("invalid use of undefined type %q#T", type);
379
      if (!TYPE_TEMPLATE_INFO (type))
380
        p_msg ("forward declaration of %q+#T", type);
381
      else
382
        p_msg ("declaration of %q+#T", type);
383
      break;
384
 
385
    case VOID_TYPE:
386
      p_msg ("invalid use of %qT", type);
387
      break;
388
 
389
    case ARRAY_TYPE:
390
      if (TYPE_DOMAIN (type))
391
        {
392
          type = TREE_TYPE (type);
393
          goto retry;
394
        }
395
      p_msg ("invalid use of array with unspecified bounds");
396
      break;
397
 
398
    case OFFSET_TYPE:
399
    bad_member:
400
      p_msg ("invalid use of member (did you forget the %<&%> ?)");
401
      break;
402
 
403
    case TEMPLATE_TYPE_PARM:
404
      p_msg ("invalid use of template type parameter");
405
      break;
406
 
407
    case UNKNOWN_TYPE:
408
      if (value && TREE_CODE (value) == COMPONENT_REF)
409
        goto bad_member;
410
      else if (value && TREE_CODE (value) == ADDR_EXPR)
411
        p_msg ("address of overloaded function with no contextual "
412
               "type information");
413
      else if (value && TREE_CODE (value) == OVERLOAD)
414
        p_msg ("overloaded function with no contextual type information");
415
      else
416
        p_msg ("insufficient contextual information to determine type");
417
      break;
418
 
419
    default:
420
      gcc_unreachable ();
421
    }
422
}
423
 
424
/* Backward-compatibility interface to incomplete_type_diagnostic;
425
   required by ../tree.c.  */
426
#undef cxx_incomplete_type_error
427
void
428
cxx_incomplete_type_error (tree value, tree type)
429
{
430
  cxx_incomplete_type_diagnostic (value, type, 0);
431
}
432
 
433
 
434
/* The recursive part of split_nonconstant_init.  DEST is an lvalue
435
   expression to which INIT should be assigned.  INIT is a CONSTRUCTOR.  */
436
 
437
static void
438
split_nonconstant_init_1 (tree dest, tree init)
439
{
440
  unsigned HOST_WIDE_INT idx;
441
  tree field_index, value;
442
  tree type = TREE_TYPE (dest);
443
  tree inner_type = NULL;
444
  bool array_type_p = false;
445
 
446
  switch (TREE_CODE (type))
447
    {
448
    case ARRAY_TYPE:
449
      inner_type = TREE_TYPE (type);
450
      array_type_p = true;
451
      /* FALLTHRU */
452
 
453
    case RECORD_TYPE:
454
    case UNION_TYPE:
455
    case QUAL_UNION_TYPE:
456
      FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init), idx,
457
                                field_index, value)
458
        {
459
          /* The current implementation of this algorithm assumes that
460
             the field was set for all the elements. This is usually done
461
             by process_init_constructor.  */
462
          gcc_assert (field_index);
463
 
464
          if (!array_type_p)
465
            inner_type = TREE_TYPE (field_index);
466
 
467
          if (TREE_CODE (value) == CONSTRUCTOR)
468
            {
469
              tree sub;
470
 
471
              if (array_type_p)
472
                sub = build4 (ARRAY_REF, inner_type, dest, field_index,
473
                              NULL_TREE, NULL_TREE);
474
              else
475
                sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
476
                              NULL_TREE);
477
 
478
              split_nonconstant_init_1 (sub, value);
479
            }
480
          else if (!initializer_constant_valid_p (value, inner_type))
481
            {
482
              tree code;
483
              tree sub;
484
 
485
              /* FIXME: Ordered removal is O(1) so the whole function is
486
                 worst-case quadratic. This could be fixed using an aside
487
                 bitmap to record which elements must be removed and remove
488
                 them all at the same time. Or by merging
489
                 split_non_constant_init into process_init_constructor_array,
490
                 that is separating constants from non-constants while building
491
                 the vector.  */
492
              VEC_ordered_remove (constructor_elt, CONSTRUCTOR_ELTS (init),
493
                                  idx);
494
              --idx;
495
 
496
              if (array_type_p)
497
                sub = build4 (ARRAY_REF, inner_type, dest, field_index,
498
                              NULL_TREE, NULL_TREE);
499
              else
500
                sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
501
                              NULL_TREE);
502
 
503
              code = build2 (INIT_EXPR, inner_type, sub, value);
504
              code = build_stmt (EXPR_STMT, code);
505
              add_stmt (code);
506
              continue;
507
            }
508
        }
509
      break;
510
 
511
    case VECTOR_TYPE:
512
      if (!initializer_constant_valid_p (init, type))
513
        {
514
          tree code;
515
          tree cons = copy_node (init);
516
          CONSTRUCTOR_ELTS (init) = NULL;
517
          code = build2 (MODIFY_EXPR, type, dest, cons);
518
          code = build_stmt (EXPR_STMT, code);
519
          add_stmt (code);
520
        }
521
      break;
522
 
523
    default:
524
      gcc_unreachable ();
525
    }
526
}
527
 
528
/* A subroutine of store_init_value.  Splits non-constant static
529
   initializer INIT into a constant part and generates code to
530
   perform the non-constant part of the initialization to DEST.
531
   Returns the code for the runtime init.  */
532
 
533
static tree
534
split_nonconstant_init (tree dest, tree init)
535
{
536
  tree code;
537
 
538
  if (TREE_CODE (init) == CONSTRUCTOR)
539
    {
540
      code = push_stmt_list ();
541
      split_nonconstant_init_1 (dest, init);
542
      code = pop_stmt_list (code);
543
      DECL_INITIAL (dest) = init;
544
      TREE_READONLY (dest) = 0;
545
    }
546
  else
547
    code = build2 (INIT_EXPR, TREE_TYPE (dest), dest, init);
548
 
549
  return code;
550
}
551
 
552
/* Perform appropriate conversions on the initial value of a variable,
553
   store it in the declaration DECL,
554
   and print any error messages that are appropriate.
555
   If the init is invalid, store an ERROR_MARK.
556
 
557
   C++: Note that INIT might be a TREE_LIST, which would mean that it is
558
   a base class initializer for some aggregate type, hopefully compatible
559
   with DECL.  If INIT is a single element, and DECL is an aggregate
560
   type, we silently convert INIT into a TREE_LIST, allowing a constructor
561
   to be called.
562
 
563
   If INIT is a TREE_LIST and there is no constructor, turn INIT
564
   into a CONSTRUCTOR and use standard initialization techniques.
565
   Perhaps a warning should be generated?
566
 
567
   Returns code to be executed if initialization could not be performed
568
   for static variable.  In that case, caller must emit the code.  */
569
 
570
tree
571
store_init_value (tree decl, tree init)
572
{
573
  tree value, type;
574
 
575
  /* If variable's type was invalidly declared, just ignore it.  */
576
 
577
  type = TREE_TYPE (decl);
578
  if (TREE_CODE (type) == ERROR_MARK)
579
    return NULL_TREE;
580
 
581
  if (IS_AGGR_TYPE (type))
582
    {
583
      gcc_assert (TYPE_HAS_TRIVIAL_INIT_REF (type)
584
                  || TREE_CODE (init) == CONSTRUCTOR);
585
 
586
      if (TREE_CODE (init) == TREE_LIST)
587
        {
588
          error ("constructor syntax used, but no constructor declared "
589
                 "for type %qT", type);
590
          init = build_constructor_from_list (NULL_TREE, nreverse (init));
591
        }
592
    }
593
  else if (TREE_CODE (init) == TREE_LIST
594
           && TREE_TYPE (init) != unknown_type_node)
595
    {
596
      if (TREE_CODE (decl) == RESULT_DECL)
597
        init = build_x_compound_expr_from_list (init,
598
                                                "return value initializer");
599
      else if (TREE_CODE (init) == TREE_LIST
600
               && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
601
        {
602
          error ("cannot initialize arrays using this syntax");
603
          return NULL_TREE;
604
        }
605
      else
606
        /* We get here with code like `int a (2);' */
607
        init = build_x_compound_expr_from_list (init, "initializer");
608
    }
609
 
610
  /* End of special C++ code.  */
611
 
612
  /* Digest the specified initializer into an expression.  */
613
  value = digest_init (type, init);
614
  /* If the initializer is not a constant, fill in DECL_INITIAL with
615
     the bits that are constant, and then return an expression that
616
     will perform the dynamic initialization.  */
617
  if (value != error_mark_node
618
      && (TREE_SIDE_EFFECTS (value)
619
           || ! initializer_constant_valid_p (value, TREE_TYPE (value))))
620
    return split_nonconstant_init (decl, value);
621
  /* If the value is a constant, just put it in DECL_INITIAL.  If DECL
622
     is an automatic variable, the middle end will turn this into a
623
     dynamic initialization later.  */
624
  DECL_INITIAL (decl) = value;
625
  return NULL_TREE;
626
}
627
 
628
 
629
/* Process the initializer INIT for a variable of type TYPE, emitting
630
   diagnostics for invalid initializers and converting the initializer as
631
   appropriate.
632
 
633
   For aggregate types, it assumes that reshape_init has already run, thus the
634
   initializer will have the right shape (brace elision has been undone).  */
635
 
636
tree
637
digest_init (tree type, tree init)
638
{
639
  enum tree_code code = TREE_CODE (type);
640
 
641
  if (init == error_mark_node)
642
    return error_mark_node;
643
 
644
  gcc_assert (init);
645
 
646
  /* We must strip the outermost array type when completing the type,
647
     because the its bounds might be incomplete at the moment.  */
648
  if (!complete_type_or_else (TREE_CODE (type) == ARRAY_TYPE
649
                              ? TREE_TYPE (type) : type, NULL_TREE))
650
    return error_mark_node;
651
 
652
  /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue
653
     (g++.old-deja/g++.law/casts2.C).  */
654
  if (TREE_CODE (init) == NON_LVALUE_EXPR)
655
    init = TREE_OPERAND (init, 0);
656
 
657
  /* Initialization of an array of chars from a string constant. The initializer
658
     can be optionally enclosed in braces, but reshape_init has already removed
659
     them if they were present.  */
660
  if (code == ARRAY_TYPE)
661
    {
662
      tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
663
      if (char_type_p (typ1)
664
          /*&& init */
665
          && TREE_CODE (init) == STRING_CST)
666
        {
667
          tree char_type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (init)));
668
 
669
          if (char_type != char_type_node
670
              && TYPE_PRECISION (typ1) == BITS_PER_UNIT)
671
            {
672
              error ("char-array initialized from wide string");
673
              return error_mark_node;
674
            }
675
          if (char_type == char_type_node
676
              && TYPE_PRECISION (typ1) != BITS_PER_UNIT)
677
            {
678
              error ("int-array initialized from non-wide string");
679
              return error_mark_node;
680
            }
681
 
682
          TREE_TYPE (init) = type;
683
          if (TYPE_DOMAIN (type) != 0 && TREE_CONSTANT (TYPE_SIZE (type)))
684
            {
685
              int size = TREE_INT_CST_LOW (TYPE_SIZE (type));
686
              size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
687
              /* In C it is ok to subtract 1 from the length of the string
688
                 because it's ok to ignore the terminating null char that is
689
                 counted in the length of the constant, but in C++ this would
690
                 be invalid.  */
691
              if (size < TREE_STRING_LENGTH (init))
692
                pedwarn ("initializer-string for array of chars is too long");
693
            }
694
          return init;
695
        }
696
    }
697
 
698
  /* Handle scalar types (including conversions) and references.  */
699
  if (SCALAR_TYPE_P (type) || code == REFERENCE_TYPE)
700
    return convert_for_initialization (0, type, init, LOOKUP_NORMAL,
701
                                       "initialization", NULL_TREE, 0);
702
 
703
  /* Come here only for aggregates: records, arrays, unions, complex numbers
704
     and vectors.  */
705
  gcc_assert (TREE_CODE (type) == ARRAY_TYPE
706
              || TREE_CODE (type) == VECTOR_TYPE
707
              || TREE_CODE (type) == RECORD_TYPE
708
              || TREE_CODE (type) == UNION_TYPE
709
              || TREE_CODE (type) == COMPLEX_TYPE);
710
 
711
  if (BRACE_ENCLOSED_INITIALIZER_P (init))
712
      return process_init_constructor (type, init);
713
  else
714
    {
715
      if (COMPOUND_LITERAL_P (init) && TREE_CODE (type) == ARRAY_TYPE)
716
        {
717
          error ("cannot initialize aggregate of type %qT with "
718
                 "a compound literal", type);
719
 
720
          return error_mark_node;
721
        }
722
      return convert_for_initialization (NULL_TREE, type, init,
723
                                         LOOKUP_NORMAL | LOOKUP_ONLYCONVERTING,
724
                                         "initialization", NULL_TREE, 0);
725
    }
726
}
727
 
728
 
729
/* Set of flags used within process_init_constructor to describe the
730
   initializers.  */
731
#define PICFLAG_ERRONEOUS 1
732
#define PICFLAG_NOT_ALL_CONSTANT 2
733
#define PICFLAG_NOT_ALL_SIMPLE 4
734
 
735
/* Given an initializer INIT, return the flag (PICFLAG_*) which better
736
   describe it.  */
737
 
738
static int
739
picflag_from_initializer (tree init)
740
{
741
  if (init == error_mark_node)
742
    return PICFLAG_ERRONEOUS;
743
  else if (!TREE_CONSTANT (init))
744
    return PICFLAG_NOT_ALL_CONSTANT;
745
  else if (!initializer_constant_valid_p (init, TREE_TYPE (init)))
746
    return PICFLAG_NOT_ALL_SIMPLE;
747
  return 0;
748
}
749
 
750
/* Subroutine of process_init_constructor, which will process an initializer
751
   INIT for a array or vector of type TYPE. Returns the flags (PICFLAG_*) which
752
   describe the initializers.  */
753
 
754
static int
755
process_init_constructor_array (tree type, tree init)
756
{
757
  unsigned HOST_WIDE_INT i, len = 0;
758
  int flags = 0;
759
  bool unbounded = false;
760
  constructor_elt *ce;
761
  VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (init);
762
 
763
  gcc_assert (TREE_CODE (type) == ARRAY_TYPE
764
              || TREE_CODE (type) == VECTOR_TYPE);
765
 
766
  if (TREE_CODE (type) == ARRAY_TYPE)
767
    {
768
      tree domain = TYPE_DOMAIN (type);
769
      if (domain)
770
        len = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (domain))
771
              - TREE_INT_CST_LOW (TYPE_MIN_VALUE (domain))
772
              + 1);
773
      else
774
        unbounded = true;  /* Take as many as there are.  */
775
    }
776
  else
777
    /* Vectors are like simple fixed-size arrays.  */
778
    len = TYPE_VECTOR_SUBPARTS (type);
779
 
780
  /* There cannot be more initializers than needed (or reshape_init would
781
     detect this before we do.  */
782
  if (!unbounded)
783
    gcc_assert (VEC_length (constructor_elt, v) <= len);
784
 
785
  for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
786
    {
787
      if (ce->index)
788
        {
789
          gcc_assert (TREE_CODE (ce->index) == INTEGER_CST);
790
          if (compare_tree_int (ce->index, i) != 0)
791
            sorry ("non-trivial designated initializers not supported");
792
        }
793
      else
794
        ce->index = size_int (i);
795
      gcc_assert (ce->value);
796
      ce->value = digest_init (TREE_TYPE (type), ce->value);
797
 
798
      if (ce->value != error_mark_node)
799
        gcc_assert (same_type_ignoring_top_level_qualifiers_p
800
                      (TREE_TYPE (type), TREE_TYPE (ce->value)));
801
 
802
      flags |= picflag_from_initializer (ce->value);
803
    }
804
 
805
  /* No more initializers. If the array is unbounded, we are done. Otherwise,
806
     we must add initializers ourselves.  */
807
  if (!unbounded)
808
    for (; i < len; ++i)
809
      {
810
        tree next;
811
 
812
        if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (type)))
813
          {
814
            /* If this type needs constructors run for default-initialization,
815
              we can't rely on the backend to do it for us, so build up
816
              TARGET_EXPRs.  If the type in question is a class, just build
817
              one up; if it's an array, recurse.  */
818
            if (IS_AGGR_TYPE (TREE_TYPE (type)))
819
                next = build_functional_cast (TREE_TYPE (type), NULL_TREE);
820
            else
821
                next = build_constructor (NULL_TREE, NULL);
822
            next = digest_init (TREE_TYPE (type), next);
823
          }
824
        else if (!zero_init_p (TREE_TYPE (type)))
825
          next = build_zero_init (TREE_TYPE (type),
826
                                  /*nelts=*/NULL_TREE,
827
                                  /*static_storage_p=*/false);
828
        else
829
          /* The default zero-initialization is fine for us; don't
830
             add anything to the CONSTRUCTOR.  */
831
          break;
832
 
833
        flags |= picflag_from_initializer (next);
834
        CONSTRUCTOR_APPEND_ELT (v, size_int (i), next);
835
      }
836
 
837
  CONSTRUCTOR_ELTS (init) = v;
838
  return flags;
839
}
840
 
841
/* INIT is the initializer for FIELD.  If FIELD is a bitfield, mask
842
   INIT so that its range is bounded by that of FIELD.  Returns the
843
   (possibly adjusted) initializer.  */
844
 
845
tree
846
adjust_bitfield_initializer (tree field, tree init)
847
{
848
  int width;
849
  tree mask;
850
 
851
  if (!DECL_C_BIT_FIELD (field))
852
    return init;
853
 
854
  width = tree_low_cst (DECL_SIZE (field), /*pos=*/1);
855
  if (width < TYPE_PRECISION (TREE_TYPE (field)))
856
    {
857
      mask = build_low_bits_mask (TREE_TYPE (field), width);
858
      init = cp_build_binary_op (BIT_AND_EXPR, init, mask);
859
    }
860
  return init;
861
}
862
 
863
/* Subroutine of process_init_constructor, which will process an initializer
864
   INIT for a class of type TYPE. Returns the flags (PICFLAG_*) which describe
865
   the initializers.  */
866
 
867
static int
868
process_init_constructor_record (tree type, tree init)
869
{
870
  VEC(constructor_elt,gc) *v = NULL;
871
  int flags = 0;
872
  tree field;
873
  unsigned HOST_WIDE_INT idx = 0;
874
 
875
  gcc_assert (TREE_CODE (type) == RECORD_TYPE);
876
  gcc_assert (!CLASSTYPE_VBASECLASSES (type));
877
  gcc_assert (!TYPE_BINFO (type)
878
              || !BINFO_N_BASE_BINFOS (TYPE_BINFO (type)));
879
  gcc_assert (!TYPE_POLYMORPHIC_P (type));
880
 
881
  /* Generally, we will always have an index for each initializer (which is
882
     a FIELD_DECL, put by reshape_init), but compound literals don't go trough
883
     reshape_init. So we need to handle both cases.  */
884
  for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
885
    {
886
      tree next;
887
 
888
      if (!DECL_NAME (field) && DECL_C_BIT_FIELD (field))
889
        {
890
          flags |= picflag_from_initializer (integer_zero_node);
891
          CONSTRUCTOR_APPEND_ELT (v, field, integer_zero_node);
892
          continue;
893
        }
894
 
895
      if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
896
        continue;
897
 
898
      if (idx < VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)))
899
        {
900
          constructor_elt *ce = VEC_index (constructor_elt,
901
                                           CONSTRUCTOR_ELTS (init), idx);
902
          if (ce->index)
903
            {
904
              /* We can have either a FIELD_DECL or an IDENTIFIER_NODE. The
905
                 latter case can happen in templates where lookup has to be
906
                 deferred.  */
907
              gcc_assert (TREE_CODE (ce->index) == FIELD_DECL
908
                          || TREE_CODE (ce->index) == IDENTIFIER_NODE);
909
              if (ce->index != field
910
                  && ce->index != DECL_NAME (field))
911
                sorry ("non-trivial designated initializers not supported");
912
            }
913
 
914
          gcc_assert (ce->value);
915
          next = digest_init (TREE_TYPE (field), ce->value);
916
          next = adjust_bitfield_initializer (field, next);
917
          ++idx;
918
        }
919
      else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (field)))
920
        {
921
          /* If this type needs constructors run for
922
             default-initialization, we can't rely on the backend to do it
923
             for us, so build up TARGET_EXPRs.  If the type in question is
924
             a class, just build one up; if it's an array, recurse.  */
925
          if (IS_AGGR_TYPE (TREE_TYPE (field)))
926
            next = build_functional_cast (TREE_TYPE (field), NULL_TREE);
927
          else
928
            next = build_constructor (NULL_TREE, NULL);
929
 
930
          next = digest_init (TREE_TYPE (field), next);
931
 
932
          /* Warn when some struct elements are implicitly initialized.  */
933
          warning (OPT_Wmissing_field_initializers,
934
                   "missing initializer for member %qD", field);
935
        }
936
      else
937
        {
938
          if (TREE_READONLY (field))
939
            error ("uninitialized const member %qD", field);
940
          else if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
941
            error ("member %qD with uninitialized const fields", field);
942
          else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
943
            error ("member %qD is uninitialized reference", field);
944
 
945
          /* Warn when some struct elements are implicitly initialized
946
             to zero.  */
947
          warning (OPT_Wmissing_field_initializers,
948
                   "missing initializer for member %qD", field);
949
 
950
          if (!zero_init_p (TREE_TYPE (field)))
951
            next = build_zero_init (TREE_TYPE (field), /*nelts=*/NULL_TREE,
952
                                    /*static_storage_p=*/false);
953
          else
954
            /* The default zero-initialization is fine for us; don't
955
            add anything to the CONSTRUCTOR.  */
956
            continue;
957
        }
958
 
959
      flags |= picflag_from_initializer (next);
960
      CONSTRUCTOR_APPEND_ELT (v, field, next);
961
    }
962
 
963
  CONSTRUCTOR_ELTS (init) = v;
964
  return flags;
965
}
966
 
967
/* Subroutine of process_init_constructor, which will process a single
968
   initializer INIT for a union of type TYPE. Returns the flags (PICFLAG_*)
969
   which describe the initializer.  */
970
 
971
static int
972
process_init_constructor_union (tree type, tree init)
973
{
974
  constructor_elt *ce;
975
 
976
  /* If the initializer was empty, use default zero initialization.  */
977
  if (VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (init)))
978
    return 0;
979
 
980
  gcc_assert (VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)) == 1);
981
  ce = VEC_index (constructor_elt, CONSTRUCTOR_ELTS (init), 0);
982
 
983
  /* If this element specifies a field, initialize via that field.  */
984
  if (ce->index)
985
    {
986
      if (TREE_CODE (ce->index) == FIELD_DECL)
987
        ;
988
      else if (TREE_CODE (ce->index) == IDENTIFIER_NODE)
989
        {
990
          /* This can happen within a cast, see g++.dg/opt/cse2.C.  */
991
          tree name = ce->index;
992
          tree field;
993
          for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
994
            if (DECL_NAME (field) == name)
995
              break;
996
          if (!field)
997
            {
998
              error ("no field %qD found in union being initialized", field);
999
              ce->value = error_mark_node;
1000
            }
1001
          ce->index = field;
1002
        }
1003
      else
1004
        {
1005
          gcc_assert (TREE_CODE (ce->index) == INTEGER_CST
1006
                      || TREE_CODE (ce->index) == RANGE_EXPR);
1007
          error ("index value instead of field name in union initializer");
1008
          ce->value = error_mark_node;
1009
        }
1010
    }
1011
  else
1012
    {
1013
      /* Find the first named field.  ANSI decided in September 1990
1014
         that only named fields count here.  */
1015
      tree field = TYPE_FIELDS (type);
1016
      while (field && (!DECL_NAME (field) || TREE_CODE (field) != FIELD_DECL))
1017
        field = TREE_CHAIN (field);
1018
      if (!field)
1019
        {
1020
          error ("union %qT with no named members cannot be initialized",
1021
                 type);
1022
          ce->value = error_mark_node;
1023
        }
1024
      ce->index = field;
1025
    }
1026
 
1027
  if (ce->value && ce->value != error_mark_node)
1028
    ce->value = digest_init (TREE_TYPE (ce->index), ce->value);
1029
 
1030
  return picflag_from_initializer (ce->value);
1031
}
1032
 
1033
/* Process INIT, a constructor for a variable of aggregate type TYPE. The
1034
   constructor is a brace-enclosed initializer, and will be modified in-place.
1035
 
1036
   Each element is converted to the right type through digest_init, and
1037
   missing initializers are added following the language rules (zero-padding,
1038
   etc.).
1039
 
1040
   After the execution, the initializer will have TREE_CONSTANT if all elts are
1041
   constant, and TREE_STATIC set if, in addition, all elts are simple enough
1042
   constants that the assembler and linker can compute them.
1043
 
1044
   The function returns the initializer itself, or error_mark_node in case
1045
   of error.  */
1046
 
1047
static tree
1048
process_init_constructor (tree type, tree init)
1049
{
1050
  int flags;
1051
 
1052
  gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
1053
 
1054
  if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
1055
    flags = process_init_constructor_array (type, init);
1056
  else if (TREE_CODE (type) == RECORD_TYPE)
1057
    flags = process_init_constructor_record (type, init);
1058
  else if (TREE_CODE (type) == UNION_TYPE)
1059
    flags = process_init_constructor_union (type, init);
1060
  else
1061
    gcc_unreachable ();
1062
 
1063
  if (flags & PICFLAG_ERRONEOUS)
1064
    return error_mark_node;
1065
 
1066
  TREE_TYPE (init) = type;
1067
  if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE)
1068
    cp_complete_array_type (&TREE_TYPE (init), init, /*do_default=*/0);
1069
  if (!(flags & PICFLAG_NOT_ALL_CONSTANT))
1070
    {
1071
      TREE_CONSTANT (init) = 1;
1072
      TREE_INVARIANT (init) = 1;
1073
      if (!(flags & PICFLAG_NOT_ALL_SIMPLE))
1074
        TREE_STATIC (init) = 1;
1075
    }
1076
  return init;
1077
}
1078
 
1079
/* Given a structure or union value DATUM, construct and return
1080
   the structure or union component which results from narrowing
1081
   that value to the base specified in BASETYPE.  For example, given the
1082
   hierarchy
1083
 
1084
   class L { int ii; };
1085
   class A : L { ... };
1086
   class B : L { ... };
1087
   class C : A, B { ... };
1088
 
1089
   and the declaration
1090
 
1091
   C x;
1092
 
1093
   then the expression
1094
 
1095
   x.A::ii refers to the ii member of the L part of
1096
   the A part of the C object named by X.  In this case,
1097
   DATUM would be x, and BASETYPE would be A.
1098
 
1099
   I used to think that this was nonconformant, that the standard specified
1100
   that first we look up ii in A, then convert x to an L& and pull out the
1101
   ii part.  But in fact, it does say that we convert x to an A&; A here
1102
   is known as the "naming class".  (jason 2000-12-19)
1103
 
1104
   BINFO_P points to a variable initialized either to NULL_TREE or to the
1105
   binfo for the specific base subobject we want to convert to.  */
1106
 
1107
tree
1108
build_scoped_ref (tree datum, tree basetype, tree* binfo_p)
1109
{
1110
  tree binfo;
1111
 
1112
  if (datum == error_mark_node)
1113
    return error_mark_node;
1114
  if (*binfo_p)
1115
    binfo = *binfo_p;
1116
  else
1117
    binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check, NULL);
1118
 
1119
  if (!binfo || binfo == error_mark_node)
1120
    {
1121
      *binfo_p = NULL_TREE;
1122
      if (!binfo)
1123
        error_not_base_type (basetype, TREE_TYPE (datum));
1124
      return error_mark_node;
1125
    }
1126
 
1127
  *binfo_p = binfo;
1128
  return build_base_path (PLUS_EXPR, datum, binfo, 1);
1129
}
1130
 
1131
/* Build a reference to an object specified by the C++ `->' operator.
1132
   Usually this just involves dereferencing the object, but if the
1133
   `->' operator is overloaded, then such overloads must be
1134
   performed until an object which does not have the `->' operator
1135
   overloaded is found.  An error is reported when circular pointer
1136
   delegation is detected.  */
1137
 
1138
tree
1139
build_x_arrow (tree expr)
1140
{
1141
  tree orig_expr = expr;
1142
  tree types_memoized = NULL_TREE;
1143
  tree type = TREE_TYPE (expr);
1144
  tree last_rval = NULL_TREE;
1145
 
1146
  if (type == error_mark_node)
1147
    return error_mark_node;
1148
 
1149
  if (processing_template_decl)
1150
    {
1151
      if (type_dependent_expression_p (expr))
1152
        return build_min_nt (ARROW_EXPR, expr);
1153
      expr = build_non_dependent_expr (expr);
1154
    }
1155
 
1156
  if (IS_AGGR_TYPE (type))
1157
    {
1158
      while ((expr = build_new_op (COMPONENT_REF, LOOKUP_NORMAL, expr,
1159
                                   NULL_TREE, NULL_TREE,
1160
                                   /*overloaded_p=*/NULL)))
1161
        {
1162
          if (expr == error_mark_node)
1163
            return error_mark_node;
1164
 
1165
          if (value_member (TREE_TYPE (expr), types_memoized))
1166
            {
1167
              error ("circular pointer delegation detected");
1168
              return error_mark_node;
1169
            }
1170
          else
1171
            {
1172
              types_memoized = tree_cons (NULL_TREE, TREE_TYPE (expr),
1173
                                          types_memoized);
1174
            }
1175
          last_rval = expr;
1176
        }
1177
 
1178
      if (last_rval == NULL_TREE)
1179
        {
1180
          error ("base operand of %<->%> has non-pointer type %qT", type);
1181
          return error_mark_node;
1182
        }
1183
 
1184
      if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1185
        last_rval = convert_from_reference (last_rval);
1186
    }
1187
  else
1188
    last_rval = decay_conversion (expr);
1189
 
1190
  if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1191
    {
1192
      if (processing_template_decl)
1193
        {
1194
          expr = build_min_non_dep (ARROW_EXPR, last_rval, orig_expr);
1195
          /* It will be dereferenced.  */
1196
          TREE_TYPE (expr) = TREE_TYPE (TREE_TYPE (last_rval));
1197
          return expr;
1198
        }
1199
 
1200
      return build_indirect_ref (last_rval, NULL);
1201
    }
1202
 
1203
  if (types_memoized)
1204
    error ("result of %<operator->()%> yields non-pointer result");
1205
  else
1206
    error ("base operand of %<->%> is not a pointer");
1207
  return error_mark_node;
1208
}
1209
 
1210
/* Return an expression for "DATUM .* COMPONENT".  DATUM has not
1211
   already been checked out to be of aggregate type.  */
1212
 
1213
tree
1214
build_m_component_ref (tree datum, tree component)
1215
{
1216
  tree ptrmem_type;
1217
  tree objtype;
1218
  tree type;
1219
  tree binfo;
1220
  tree ctype;
1221
 
1222
  datum = decay_conversion (datum);
1223
 
1224
  if (datum == error_mark_node || component == error_mark_node)
1225
    return error_mark_node;
1226
 
1227
  ptrmem_type = TREE_TYPE (component);
1228
  if (!TYPE_PTR_TO_MEMBER_P (ptrmem_type))
1229
    {
1230
      error ("%qE cannot be used as a member pointer, since it is of "
1231
             "type %qT",
1232
             component, ptrmem_type);
1233
      return error_mark_node;
1234
    }
1235
 
1236
  objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
1237
  if (! IS_AGGR_TYPE (objtype))
1238
    {
1239
      error ("cannot apply member pointer %qE to %qE, which is of "
1240
             "non-aggregate type %qT",
1241
             component, datum, objtype);
1242
      return error_mark_node;
1243
    }
1244
 
1245
  type = TYPE_PTRMEM_POINTED_TO_TYPE (ptrmem_type);
1246
  ctype = complete_type (TYPE_PTRMEM_CLASS_TYPE (ptrmem_type));
1247
 
1248
  if (!COMPLETE_TYPE_P (ctype))
1249
    {
1250
      if (!same_type_p (ctype, objtype))
1251
        goto mismatch;
1252
      binfo = NULL;
1253
    }
1254
  else
1255
    {
1256
      binfo = lookup_base (objtype, ctype, ba_check, NULL);
1257
 
1258
      if (!binfo)
1259
        {
1260
        mismatch:
1261
          error ("pointer to member type %qT incompatible with object "
1262
                 "type %qT",
1263
                 type, objtype);
1264
          return error_mark_node;
1265
        }
1266
      else if (binfo == error_mark_node)
1267
        return error_mark_node;
1268
    }
1269
 
1270
  if (TYPE_PTRMEM_P (ptrmem_type))
1271
    {
1272
      /* Compute the type of the field, as described in [expr.ref].
1273
         There's no such thing as a mutable pointer-to-member, so
1274
         things are not as complex as they are for references to
1275
         non-static data members.  */
1276
      type = cp_build_qualified_type (type,
1277
                                      (cp_type_quals (type)
1278
                                       | cp_type_quals (TREE_TYPE (datum))));
1279
 
1280
      datum = build_address (datum);
1281
 
1282
      /* Convert object to the correct base.  */
1283
      if (binfo)
1284
        datum = build_base_path (PLUS_EXPR, datum, binfo, 1);
1285
 
1286
      /* Build an expression for "object + offset" where offset is the
1287
         value stored in the pointer-to-data-member.  */
1288
      datum = build2 (PLUS_EXPR, build_pointer_type (type),
1289
                      datum, build_nop (ptrdiff_type_node, component));
1290
      return build_indirect_ref (datum, 0);
1291
    }
1292
  else
1293
    return build2 (OFFSET_REF, type, datum, component);
1294
}
1295
 
1296
/* Return a tree node for the expression TYPENAME '(' PARMS ')'.  */
1297
 
1298
tree
1299
build_functional_cast (tree exp, tree parms)
1300
{
1301
  /* This is either a call to a constructor,
1302
     or a C cast in C++'s `functional' notation.  */
1303
  tree type;
1304
 
1305
  if (exp == error_mark_node || parms == error_mark_node)
1306
    return error_mark_node;
1307
 
1308
  if (TREE_CODE (exp) == TYPE_DECL)
1309
    type = TREE_TYPE (exp);
1310
  else
1311
    type = exp;
1312
 
1313
  if (processing_template_decl)
1314
    {
1315
      tree t = build_min (CAST_EXPR, type, parms);
1316
      /* We don't know if it will or will not have side effects.  */
1317
      TREE_SIDE_EFFECTS (t) = 1;
1318
      return t;
1319
    }
1320
 
1321
  if (! IS_AGGR_TYPE (type))
1322
    {
1323
      /* This must build a C cast.  */
1324
      if (parms == NULL_TREE)
1325
        parms = integer_zero_node;
1326
      else
1327
        parms = build_x_compound_expr_from_list (parms, "functional cast");
1328
 
1329
      return build_c_cast (type, parms);
1330
    }
1331
 
1332
  /* Prepare to evaluate as a call to a constructor.  If this expression
1333
     is actually used, for example,
1334
 
1335
     return X (arg1, arg2, ...);
1336
 
1337
     then the slot being initialized will be filled in.  */
1338
 
1339
  if (!complete_type_or_else (type, NULL_TREE))
1340
    return error_mark_node;
1341
  if (abstract_virtuals_error (NULL_TREE, type))
1342
    return error_mark_node;
1343
 
1344
  if (parms && TREE_CHAIN (parms) == NULL_TREE)
1345
    return build_c_cast (type, TREE_VALUE (parms));
1346
 
1347
  /* We need to zero-initialize POD types.  Let's do that for everything
1348
     that doesn't need a constructor.  */
1349
  if (parms == NULL_TREE && !TYPE_NEEDS_CONSTRUCTING (type)
1350
      && TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
1351
    {
1352
      exp = build_constructor (type, NULL);
1353
      return get_target_expr (exp);
1354
    }
1355
 
1356
  exp = build_special_member_call (NULL_TREE, complete_ctor_identifier, parms,
1357
                                   type, LOOKUP_NORMAL);
1358
 
1359
  if (exp == error_mark_node)
1360
    return error_mark_node;
1361
 
1362
  return build_cplus_new (type, exp);
1363
}
1364
 
1365
 
1366
/* Add new exception specifier SPEC, to the LIST we currently have.
1367
   If it's already in LIST then do nothing.
1368
   Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1369
   know what we're doing.  */
1370
 
1371
tree
1372
add_exception_specifier (tree list, tree spec, int complain)
1373
{
1374
  bool ok;
1375
  tree core = spec;
1376
  bool is_ptr;
1377
  int diag_type = -1; /* none */
1378
 
1379
  if (spec == error_mark_node)
1380
    return list;
1381
 
1382
  gcc_assert (spec && (!list || TREE_VALUE (list)));
1383
 
1384
  /* [except.spec] 1, type in an exception specifier shall not be
1385
     incomplete, or pointer or ref to incomplete other than pointer
1386
     to cv void.  */
1387
  is_ptr = TREE_CODE (core) == POINTER_TYPE;
1388
  if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1389
    core = TREE_TYPE (core);
1390
  if (complain < 0)
1391
    ok = true;
1392
  else if (VOID_TYPE_P (core))
1393
    ok = is_ptr;
1394
  else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1395
    ok = true;
1396
  else if (processing_template_decl)
1397
    ok = true;
1398
  else
1399
    {
1400
      ok = true;
1401
      /* 15.4/1 says that types in an exception specifier must be complete,
1402
         but it seems more reasonable to only require this on definitions
1403
         and calls.  So just give a pedwarn at this point; we will give an
1404
         error later if we hit one of those two cases.  */
1405
      if (!COMPLETE_TYPE_P (complete_type (core)))
1406
        diag_type = 2; /* pedwarn */
1407
    }
1408
 
1409
  if (ok)
1410
    {
1411
      tree probe;
1412
 
1413
      for (probe = list; probe; probe = TREE_CHAIN (probe))
1414
        if (same_type_p (TREE_VALUE (probe), spec))
1415
          break;
1416
      if (!probe)
1417
        list = tree_cons (NULL_TREE, spec, list);
1418
    }
1419
  else
1420
    diag_type = 0; /* error */
1421
 
1422
  if (diag_type >= 0 && complain)
1423
    cxx_incomplete_type_diagnostic (NULL_TREE, core, diag_type);
1424
 
1425
  return list;
1426
}
1427
 
1428
/* Combine the two exceptions specifier lists LIST and ADD, and return
1429
   their union.  */
1430
 
1431
tree
1432
merge_exception_specifiers (tree list, tree add)
1433
{
1434
  if (!list || !add)
1435
    return NULL_TREE;
1436
  else if (!TREE_VALUE (list))
1437
    return add;
1438
  else if (!TREE_VALUE (add))
1439
    return list;
1440
  else
1441
    {
1442
      tree orig_list = list;
1443
 
1444
      for (; add; add = TREE_CHAIN (add))
1445
        {
1446
          tree spec = TREE_VALUE (add);
1447
          tree probe;
1448
 
1449
          for (probe = orig_list; probe; probe = TREE_CHAIN (probe))
1450
            if (same_type_p (TREE_VALUE (probe), spec))
1451
              break;
1452
          if (!probe)
1453
            {
1454
              spec = build_tree_list (NULL_TREE, spec);
1455
              TREE_CHAIN (spec) = list;
1456
              list = spec;
1457
            }
1458
        }
1459
    }
1460
  return list;
1461
}
1462
 
1463
/* Subroutine of build_call.  Ensure that each of the types in the
1464
   exception specification is complete.  Technically, 15.4/1 says that
1465
   they need to be complete when we see a declaration of the function,
1466
   but we should be able to get away with only requiring this when the
1467
   function is defined or called.  See also add_exception_specifier.  */
1468
 
1469
void
1470
require_complete_eh_spec_types (tree fntype, tree decl)
1471
{
1472
  tree raises;
1473
  /* Don't complain about calls to op new.  */
1474
  if (decl && DECL_ARTIFICIAL (decl))
1475
    return;
1476
  for (raises = TYPE_RAISES_EXCEPTIONS (fntype); raises;
1477
       raises = TREE_CHAIN (raises))
1478
    {
1479
      tree type = TREE_VALUE (raises);
1480
      if (type && !COMPLETE_TYPE_P (type))
1481
        {
1482
          if (decl)
1483
            error
1484
              ("call to function %qD which throws incomplete type %q#T",
1485
               decl, type);
1486
          else
1487
            error ("call to function which throws incomplete type %q#T",
1488
                   decl);
1489
        }
1490
    }
1491
}
1492
 
1493
 
1494
#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.