OSDN Git Service

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