OSDN Git Service

PR middle-end/43300
[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           && !BRACE_ENCLOSED_INITIALIZER_P (init))
933         {
934           /* Allow the result of build_array_copy and of
935              build_value_init_noctor.  */
936           if ((TREE_CODE (init) == TARGET_EXPR
937                || TREE_CODE (init) == CONSTRUCTOR)
938               && (same_type_ignoring_top_level_qualifiers_p
939                   (type, TREE_TYPE (init))))
940             return init;
941
942           error ("array must be initialized with a brace-enclosed"
943                  " initializer");
944           return error_mark_node;
945         }
946
947       return convert_for_initialization (NULL_TREE, type, init,
948                                          flags,
949                                          "initialization", NULL_TREE, 0,
950                                          tf_warning_or_error);
951     }
952 }
953
954 tree
955 digest_init (tree type, tree init)
956 {
957   return digest_init_r (type, init, false, LOOKUP_IMPLICIT);
958 }
959
960 tree
961 digest_init_flags (tree type, tree init, int flags)
962 {
963   return digest_init_r (type, init, false, flags);
964 }
965 \f
966 /* Set of flags used within process_init_constructor to describe the
967    initializers.  */
968 #define PICFLAG_ERRONEOUS 1
969 #define PICFLAG_NOT_ALL_CONSTANT 2
970 #define PICFLAG_NOT_ALL_SIMPLE 4
971
972 /* Given an initializer INIT, return the flag (PICFLAG_*) which better
973    describe it.  */
974
975 static int
976 picflag_from_initializer (tree init)
977 {
978   if (init == error_mark_node)
979     return PICFLAG_ERRONEOUS;
980   else if (!TREE_CONSTANT (init))
981     return PICFLAG_NOT_ALL_CONSTANT;
982   else if (!initializer_constant_valid_p (init, TREE_TYPE (init)))
983     return PICFLAG_NOT_ALL_SIMPLE;
984   return 0;
985 }
986
987 /* Subroutine of process_init_constructor, which will process an initializer
988    INIT for an array or vector of type TYPE. Returns the flags (PICFLAG_*)
989    which describe the initializers.  */
990
991 static int
992 process_init_constructor_array (tree type, tree init)
993 {
994   unsigned HOST_WIDE_INT i, len = 0;
995   int flags = 0;
996   bool unbounded = false;
997   constructor_elt *ce;
998   VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (init);
999
1000   gcc_assert (TREE_CODE (type) == ARRAY_TYPE
1001               || TREE_CODE (type) == VECTOR_TYPE);
1002
1003   if (TREE_CODE (type) == ARRAY_TYPE)
1004     {
1005       tree domain = TYPE_DOMAIN (type);
1006       if (domain)
1007         len = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (domain))
1008               - TREE_INT_CST_LOW (TYPE_MIN_VALUE (domain))
1009               + 1);
1010       else
1011         unbounded = true;  /* Take as many as there are.  */
1012     }
1013   else
1014     /* Vectors are like simple fixed-size arrays.  */
1015     len = TYPE_VECTOR_SUBPARTS (type);
1016
1017   /* There must not be more initializers than needed.  */
1018   if (!unbounded && VEC_length (constructor_elt, v)  > len)
1019     error ("too many initializers for %qT", type);
1020
1021   for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
1022     {
1023       if (ce->index)
1024         {
1025           gcc_assert (TREE_CODE (ce->index) == INTEGER_CST);
1026           if (compare_tree_int (ce->index, i) != 0)
1027             {
1028               ce->value = error_mark_node;
1029               sorry ("non-trivial designated initializers not supported");
1030             }
1031         }
1032       else
1033         ce->index = size_int (i);
1034       gcc_assert (ce->value);
1035       ce->value = digest_init_r (TREE_TYPE (type), ce->value, true, LOOKUP_IMPLICIT);
1036
1037       if (ce->value != error_mark_node)
1038         gcc_assert (same_type_ignoring_top_level_qualifiers_p
1039                       (TREE_TYPE (type), TREE_TYPE (ce->value)));
1040
1041       flags |= picflag_from_initializer (ce->value);
1042     }
1043
1044   /* No more initializers. If the array is unbounded, we are done. Otherwise,
1045      we must add initializers ourselves.  */
1046   if (!unbounded)
1047     for (; i < len; ++i)
1048       {
1049         tree next;
1050
1051         if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (type)))
1052           {
1053             /* If this type needs constructors run for default-initialization,
1054               we can't rely on the back end to do it for us, so build up
1055               TARGET_EXPRs.  If the type in question is a class, just build
1056               one up; if it's an array, recurse.  */
1057             if (MAYBE_CLASS_TYPE_P (TREE_TYPE (type)))
1058               next = build_functional_cast (TREE_TYPE (type), NULL_TREE,
1059                                             tf_warning_or_error);
1060             else
1061               next = build_constructor (init_list_type_node, NULL);
1062             next = digest_init (TREE_TYPE (type), next);
1063           }
1064         else if (!zero_init_p (TREE_TYPE (type)))
1065           next = build_zero_init (TREE_TYPE (type),
1066                                   /*nelts=*/NULL_TREE,
1067                                   /*static_storage_p=*/false);
1068         else
1069           /* The default zero-initialization is fine for us; don't
1070              add anything to the CONSTRUCTOR.  */
1071           break;
1072
1073         flags |= picflag_from_initializer (next);
1074         CONSTRUCTOR_APPEND_ELT (v, size_int (i), next);
1075       }
1076
1077   CONSTRUCTOR_ELTS (init) = v;
1078   return flags;
1079 }
1080
1081 /* Subroutine of process_init_constructor, which will process an initializer
1082    INIT for a class of type TYPE. Returns the flags (PICFLAG_*) which describe
1083    the initializers.  */
1084
1085 static int
1086 process_init_constructor_record (tree type, tree init)
1087 {
1088   VEC(constructor_elt,gc) *v = NULL;
1089   int flags = 0;
1090   tree field;
1091   unsigned HOST_WIDE_INT idx = 0;
1092
1093   gcc_assert (TREE_CODE (type) == RECORD_TYPE);
1094   gcc_assert (!CLASSTYPE_VBASECLASSES (type));
1095   gcc_assert (!TYPE_BINFO (type)
1096               || !BINFO_N_BASE_BINFOS (TYPE_BINFO (type)));
1097   gcc_assert (!TYPE_POLYMORPHIC_P (type));
1098
1099   /* Generally, we will always have an index for each initializer (which is
1100      a FIELD_DECL, put by reshape_init), but compound literals don't go trough
1101      reshape_init. So we need to handle both cases.  */
1102   for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1103     {
1104       tree next;
1105       tree type;
1106
1107       if (!DECL_NAME (field) && DECL_C_BIT_FIELD (field))
1108         {
1109           flags |= picflag_from_initializer (integer_zero_node);
1110           CONSTRUCTOR_APPEND_ELT (v, field, integer_zero_node);
1111           continue;
1112         }
1113
1114       if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
1115         continue;
1116
1117       /* If this is a bitfield, first convert to the declared type.  */
1118       type = TREE_TYPE (field);
1119       if (DECL_BIT_FIELD_TYPE (field))
1120         type = DECL_BIT_FIELD_TYPE (field);
1121
1122       if (idx < VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)))
1123         {
1124           constructor_elt *ce = VEC_index (constructor_elt,
1125                                            CONSTRUCTOR_ELTS (init), idx);
1126           if (ce->index)
1127             {
1128               /* We can have either a FIELD_DECL or an IDENTIFIER_NODE. The
1129                  latter case can happen in templates where lookup has to be
1130                  deferred.  */
1131               gcc_assert (TREE_CODE (ce->index) == FIELD_DECL
1132                           || TREE_CODE (ce->index) == IDENTIFIER_NODE);
1133               if (ce->index != field
1134                   && ce->index != DECL_NAME (field))
1135                 {
1136                   ce->value = error_mark_node;
1137                   sorry ("non-trivial designated initializers not supported");
1138                 }
1139             }
1140
1141           gcc_assert (ce->value);
1142           next = digest_init_r (type, ce->value, true, LOOKUP_IMPLICIT);
1143           ++idx;
1144         }
1145       else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (field)))
1146         {
1147           /* If this type needs constructors run for
1148              default-initialization, we can't rely on the back end to do it
1149              for us, so build up TARGET_EXPRs.  If the type in question is
1150              a class, just build one up; if it's an array, recurse.  */
1151           if (MAYBE_CLASS_TYPE_P (TREE_TYPE (field)))
1152             next = build_functional_cast (TREE_TYPE (field), NULL_TREE,
1153                                           tf_warning_or_error);
1154           else
1155             next = build_constructor (init_list_type_node, NULL);
1156
1157           next = digest_init_r (TREE_TYPE (field), next, true, LOOKUP_IMPLICIT);
1158
1159           /* Warn when some struct elements are implicitly initialized.  */
1160           warning (OPT_Wmissing_field_initializers,
1161                    "missing initializer for member %qD", field);
1162         }
1163       else
1164         {
1165           if (TREE_READONLY (field))
1166             error ("uninitialized const member %qD", field);
1167           else if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
1168             error ("member %qD with uninitialized const fields", field);
1169           else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
1170             error ("member %qD is uninitialized reference", field);
1171
1172           /* Warn when some struct elements are implicitly initialized
1173              to zero.  */
1174           warning (OPT_Wmissing_field_initializers,
1175                    "missing initializer for member %qD", field);
1176
1177           if (!zero_init_p (TREE_TYPE (field)))
1178             next = build_zero_init (TREE_TYPE (field), /*nelts=*/NULL_TREE,
1179                                     /*static_storage_p=*/false);
1180           else
1181             /* The default zero-initialization is fine for us; don't
1182             add anything to the CONSTRUCTOR.  */
1183             continue;
1184         }
1185
1186       /* If this is a bitfield, now convert to the lowered type.  */
1187       if (type != TREE_TYPE (field))
1188         next = cp_convert_and_check (TREE_TYPE (field), next);
1189       flags |= picflag_from_initializer (next);
1190       CONSTRUCTOR_APPEND_ELT (v, field, next);
1191     }
1192
1193   if (idx < VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)))
1194     error ("too many initializers for %qT", type);
1195     
1196   CONSTRUCTOR_ELTS (init) = v;
1197   return flags;
1198 }
1199
1200 /* Subroutine of process_init_constructor, which will process a single
1201    initializer INIT for a union of type TYPE. Returns the flags (PICFLAG_*)
1202    which describe the initializer.  */
1203
1204 static int
1205 process_init_constructor_union (tree type, tree init)
1206 {
1207   constructor_elt *ce;
1208   int len;
1209
1210   /* If the initializer was empty, use default zero initialization.  */
1211   if (VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (init)))
1212     return 0;
1213
1214   len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
1215   if (len > 1)
1216     {
1217       error ("too many initializers for %qT", type);
1218       VEC_block_remove (constructor_elt, CONSTRUCTOR_ELTS (init), 1, len-1);
1219     }
1220
1221   ce = VEC_index (constructor_elt, CONSTRUCTOR_ELTS (init), 0);
1222
1223   /* If this element specifies a field, initialize via that field.  */
1224   if (ce->index)
1225     {
1226       if (TREE_CODE (ce->index) == FIELD_DECL)
1227         ;
1228       else if (TREE_CODE (ce->index) == IDENTIFIER_NODE)
1229         {
1230           /* This can happen within a cast, see g++.dg/opt/cse2.C.  */
1231           tree name = ce->index;
1232           tree field;
1233           for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1234             if (DECL_NAME (field) == name)
1235               break;
1236           if (!field)
1237             {
1238               error ("no field %qD found in union being initialized", field);
1239               ce->value = error_mark_node;
1240             }
1241           ce->index = field;
1242         }
1243       else
1244         {
1245           gcc_assert (TREE_CODE (ce->index) == INTEGER_CST
1246                       || TREE_CODE (ce->index) == RANGE_EXPR);
1247           error ("index value instead of field name in union initializer");
1248           ce->value = error_mark_node;
1249         }
1250     }
1251   else
1252     {
1253       /* Find the first named field.  ANSI decided in September 1990
1254          that only named fields count here.  */
1255       tree field = TYPE_FIELDS (type);
1256       while (field && (!DECL_NAME (field) || TREE_CODE (field) != FIELD_DECL))
1257         field = TREE_CHAIN (field);
1258       if (field == NULL_TREE)
1259         {
1260           error ("too many initializers for %qT", type);
1261           ce->value = error_mark_node;
1262         }
1263       ce->index = field;
1264     }
1265
1266   if (ce->value && ce->value != error_mark_node)
1267     ce->value = digest_init_r (TREE_TYPE (ce->index), ce->value, true, LOOKUP_IMPLICIT);
1268
1269   return picflag_from_initializer (ce->value);
1270 }
1271
1272 /* Process INIT, a constructor for a variable of aggregate type TYPE. The
1273    constructor is a brace-enclosed initializer, and will be modified in-place.
1274
1275    Each element is converted to the right type through digest_init, and
1276    missing initializers are added following the language rules (zero-padding,
1277    etc.).
1278
1279    After the execution, the initializer will have TREE_CONSTANT if all elts are
1280    constant, and TREE_STATIC set if, in addition, all elts are simple enough
1281    constants that the assembler and linker can compute them.
1282
1283    The function returns the initializer itself, or error_mark_node in case
1284    of error.  */
1285
1286 static tree
1287 process_init_constructor (tree type, tree init)
1288 {
1289   int flags;
1290
1291   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
1292
1293   if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
1294     flags = process_init_constructor_array (type, init);
1295   else if (TREE_CODE (type) == RECORD_TYPE)
1296     flags = process_init_constructor_record (type, init);
1297   else if (TREE_CODE (type) == UNION_TYPE)
1298     flags = process_init_constructor_union (type, init);
1299   else
1300     gcc_unreachable ();
1301
1302   if (flags & PICFLAG_ERRONEOUS)
1303     return error_mark_node;
1304
1305   TREE_TYPE (init) = type;
1306   if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE)
1307     cp_complete_array_type (&TREE_TYPE (init), init, /*do_default=*/0);
1308   if (!(flags & PICFLAG_NOT_ALL_CONSTANT))
1309     {
1310       TREE_CONSTANT (init) = 1;
1311       if (!(flags & PICFLAG_NOT_ALL_SIMPLE))
1312         TREE_STATIC (init) = 1;
1313     }
1314   return init;
1315 }
1316 \f
1317 /* Given a structure or union value DATUM, construct and return
1318    the structure or union component which results from narrowing
1319    that value to the base specified in BASETYPE.  For example, given the
1320    hierarchy
1321
1322    class L { int ii; };
1323    class A : L { ... };
1324    class B : L { ... };
1325    class C : A, B { ... };
1326
1327    and the declaration
1328
1329    C x;
1330
1331    then the expression
1332
1333    x.A::ii refers to the ii member of the L part of
1334    the A part of the C object named by X.  In this case,
1335    DATUM would be x, and BASETYPE would be A.
1336
1337    I used to think that this was nonconformant, that the standard specified
1338    that first we look up ii in A, then convert x to an L& and pull out the
1339    ii part.  But in fact, it does say that we convert x to an A&; A here
1340    is known as the "naming class".  (jason 2000-12-19)
1341
1342    BINFO_P points to a variable initialized either to NULL_TREE or to the
1343    binfo for the specific base subobject we want to convert to.  */
1344
1345 tree
1346 build_scoped_ref (tree datum, tree basetype, tree* binfo_p)
1347 {
1348   tree binfo;
1349
1350   if (datum == error_mark_node)
1351     return error_mark_node;
1352   if (*binfo_p)
1353     binfo = *binfo_p;
1354   else
1355     binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check, NULL);
1356
1357   if (!binfo || binfo == error_mark_node)
1358     {
1359       *binfo_p = NULL_TREE;
1360       if (!binfo)
1361         error_not_base_type (basetype, TREE_TYPE (datum));
1362       return error_mark_node;
1363     }
1364
1365   *binfo_p = binfo;
1366   return build_base_path (PLUS_EXPR, datum, binfo, 1);
1367 }
1368
1369 /* Build a reference to an object specified by the C++ `->' operator.
1370    Usually this just involves dereferencing the object, but if the
1371    `->' operator is overloaded, then such overloads must be
1372    performed until an object which does not have the `->' operator
1373    overloaded is found.  An error is reported when circular pointer
1374    delegation is detected.  */
1375
1376 tree
1377 build_x_arrow (tree expr)
1378 {
1379   tree orig_expr = expr;
1380   tree types_memoized = NULL_TREE;
1381   tree type = TREE_TYPE (expr);
1382   tree last_rval = NULL_TREE;
1383
1384   if (type == error_mark_node)
1385     return error_mark_node;
1386
1387   if (processing_template_decl)
1388     {
1389       if (type_dependent_expression_p (expr))
1390         return build_min_nt (ARROW_EXPR, expr);
1391       expr = build_non_dependent_expr (expr);
1392     }
1393
1394   if (MAYBE_CLASS_TYPE_P (type))
1395     {
1396       while ((expr = build_new_op (COMPONENT_REF, LOOKUP_NORMAL, expr,
1397                                    NULL_TREE, NULL_TREE,
1398                                    /*overloaded_p=*/NULL, 
1399                                    tf_warning_or_error)))
1400         {
1401           if (expr == error_mark_node)
1402             return error_mark_node;
1403
1404           if (value_member (TREE_TYPE (expr), types_memoized))
1405             {
1406               error ("circular pointer delegation detected");
1407               return error_mark_node;
1408             }
1409           else
1410             {
1411               types_memoized = tree_cons (NULL_TREE, TREE_TYPE (expr),
1412                                           types_memoized);
1413             }
1414           last_rval = expr;
1415         }
1416
1417       if (last_rval == NULL_TREE)
1418         {
1419           error ("base operand of %<->%> has non-pointer type %qT", type);
1420           return error_mark_node;
1421         }
1422
1423       if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1424         last_rval = convert_from_reference (last_rval);
1425     }
1426   else
1427     last_rval = decay_conversion (expr);
1428
1429   if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1430     {
1431       if (processing_template_decl)
1432         {
1433           expr = build_min_non_dep (ARROW_EXPR, last_rval, orig_expr);
1434           /* It will be dereferenced.  */
1435           TREE_TYPE (expr) = TREE_TYPE (TREE_TYPE (last_rval));
1436           return expr;
1437         }
1438
1439       return cp_build_indirect_ref (last_rval, RO_NULL, tf_warning_or_error);
1440     }
1441
1442   if (types_memoized)
1443     error ("result of %<operator->()%> yields non-pointer result");
1444   else
1445     error ("base operand of %<->%> is not a pointer");
1446   return error_mark_node;
1447 }
1448
1449 /* Return an expression for "DATUM .* COMPONENT".  DATUM has not
1450    already been checked out to be of aggregate type.  */
1451
1452 tree
1453 build_m_component_ref (tree datum, tree component)
1454 {
1455   tree ptrmem_type;
1456   tree objtype;
1457   tree type;
1458   tree binfo;
1459   tree ctype;
1460
1461   if (error_operand_p (datum) || error_operand_p (component))
1462     return error_mark_node;
1463
1464   ptrmem_type = TREE_TYPE (component);
1465   if (!TYPE_PTR_TO_MEMBER_P (ptrmem_type))
1466     {
1467       error ("%qE cannot be used as a member pointer, since it is of "
1468              "type %qT",
1469              component, ptrmem_type);
1470       return error_mark_node;
1471     }
1472
1473   objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
1474   if (! MAYBE_CLASS_TYPE_P (objtype))
1475     {
1476       error ("cannot apply member pointer %qE to %qE, which is of "
1477              "non-class type %qT",
1478              component, datum, objtype);
1479       return error_mark_node;
1480     }
1481
1482   type = TYPE_PTRMEM_POINTED_TO_TYPE (ptrmem_type);
1483   ctype = complete_type (TYPE_PTRMEM_CLASS_TYPE (ptrmem_type));
1484
1485   if (!COMPLETE_TYPE_P (ctype))
1486     {
1487       if (!same_type_p (ctype, objtype))
1488         goto mismatch;
1489       binfo = NULL;
1490     }
1491   else
1492     {
1493       binfo = lookup_base (objtype, ctype, ba_check, NULL);
1494
1495       if (!binfo)
1496         {
1497         mismatch:
1498           error ("pointer to member type %qT incompatible with object "
1499                  "type %qT",
1500                  type, objtype);
1501           return error_mark_node;
1502         }
1503       else if (binfo == error_mark_node)
1504         return error_mark_node;
1505     }
1506
1507   if (TYPE_PTRMEM_P (ptrmem_type))
1508     {
1509       tree ptype;
1510
1511       /* Compute the type of the field, as described in [expr.ref].
1512          There's no such thing as a mutable pointer-to-member, so
1513          things are not as complex as they are for references to
1514          non-static data members.  */
1515       type = cp_build_qualified_type (type,
1516                                       (cp_type_quals (type)
1517                                        | cp_type_quals (TREE_TYPE (datum))));
1518
1519       datum = build_address (datum);
1520
1521       /* Convert object to the correct base.  */
1522       if (binfo)
1523         datum = build_base_path (PLUS_EXPR, datum, binfo, 1);
1524
1525       /* Build an expression for "object + offset" where offset is the
1526          value stored in the pointer-to-data-member.  */
1527       ptype = build_pointer_type (type);
1528       datum = build2 (POINTER_PLUS_EXPR, ptype,
1529                       fold_convert (ptype, datum),
1530                       build_nop (sizetype, component));
1531       return cp_build_indirect_ref (datum, RO_NULL, tf_warning_or_error);
1532     }
1533   else
1534     return build2 (OFFSET_REF, type, datum, component);
1535 }
1536
1537 /* Return a tree node for the expression TYPENAME '(' PARMS ')'.  */
1538
1539 tree
1540 build_functional_cast (tree exp, tree parms, tsubst_flags_t complain)
1541 {
1542   /* This is either a call to a constructor,
1543      or a C cast in C++'s `functional' notation.  */
1544
1545   /* The type to which we are casting.  */
1546   tree type;
1547   VEC(tree,gc) *parmvec;
1548
1549   if (exp == error_mark_node || parms == error_mark_node)
1550     return error_mark_node;
1551
1552   if (TREE_CODE (exp) == TYPE_DECL)
1553     type = TREE_TYPE (exp);
1554   else
1555     type = exp;
1556
1557   if (TREE_CODE (type) == REFERENCE_TYPE && !parms)
1558     {
1559       error ("invalid value-initialization of reference types");
1560       return error_mark_node;
1561     }
1562
1563   if (processing_template_decl)
1564     {
1565       tree t = build_min (CAST_EXPR, type, parms);
1566       /* We don't know if it will or will not have side effects.  */
1567       TREE_SIDE_EFFECTS (t) = 1;
1568       return t;
1569     }
1570
1571   if (! MAYBE_CLASS_TYPE_P (type))
1572     {
1573       if (parms == NULL_TREE)
1574         return cp_convert (type, integer_zero_node);
1575
1576       /* This must build a C cast.  */
1577       parms = build_x_compound_expr_from_list (parms, "functional cast");
1578       return cp_build_c_cast (type, parms, complain);
1579     }
1580
1581   /* Prepare to evaluate as a call to a constructor.  If this expression
1582      is actually used, for example,
1583
1584      return X (arg1, arg2, ...);
1585
1586      then the slot being initialized will be filled in.  */
1587
1588   if (!complete_type_or_else (type, NULL_TREE))
1589     return error_mark_node;
1590   if (abstract_virtuals_error (NULL_TREE, type))
1591     return error_mark_node;
1592
1593   /* [expr.type.conv]
1594
1595      If the expression list is a single-expression, the type
1596      conversion is equivalent (in definedness, and if defined in
1597      meaning) to the corresponding cast expression.  */
1598   if (parms && TREE_CHAIN (parms) == NULL_TREE)
1599     return cp_build_c_cast (type, TREE_VALUE (parms), complain);
1600
1601   /* [expr.type.conv]
1602
1603      The expression T(), where T is a simple-type-specifier for a
1604      non-array complete object type or the (possibly cv-qualified)
1605      void type, creates an rvalue of the specified type, which is
1606      value-initialized.  */
1607
1608   if (parms == NULL_TREE
1609       /* If there's a user-defined constructor, value-initialization is
1610          just calling the constructor, so fall through.  */
1611       && !TYPE_HAS_USER_CONSTRUCTOR (type))
1612     {
1613       exp = build_value_init (type);
1614       return get_target_expr (exp);
1615     }
1616
1617   /* Call the constructor.  */
1618   parmvec = make_tree_vector ();
1619   for (; parms != NULL_TREE; parms = TREE_CHAIN (parms))
1620     VEC_safe_push (tree, gc, parmvec, TREE_VALUE (parms));
1621   exp = build_special_member_call (NULL_TREE, complete_ctor_identifier,
1622                                    &parmvec, type, LOOKUP_NORMAL, complain);
1623   release_tree_vector (parmvec);
1624
1625   if (exp == error_mark_node)
1626     return error_mark_node;
1627
1628   return build_cplus_new (type, exp);
1629 }
1630 \f
1631
1632 /* Add new exception specifier SPEC, to the LIST we currently have.
1633    If it's already in LIST then do nothing.
1634    Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1635    know what we're doing.  */
1636
1637 tree
1638 add_exception_specifier (tree list, tree spec, int complain)
1639 {
1640   bool ok;
1641   tree core = spec;
1642   bool is_ptr;
1643   diagnostic_t diag_type = DK_UNSPECIFIED; /* none */
1644
1645   if (spec == error_mark_node)
1646     return list;
1647
1648   gcc_assert (spec && (!list || TREE_VALUE (list)));
1649
1650   /* [except.spec] 1, type in an exception specifier shall not be
1651      incomplete, or pointer or ref to incomplete other than pointer
1652      to cv void.  */
1653   is_ptr = TREE_CODE (core) == POINTER_TYPE;
1654   if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1655     core = TREE_TYPE (core);
1656   if (complain < 0)
1657     ok = true;
1658   else if (VOID_TYPE_P (core))
1659     ok = is_ptr;
1660   else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1661     ok = true;
1662   else if (processing_template_decl)
1663     ok = true;
1664   else
1665     {
1666       ok = true;
1667       /* 15.4/1 says that types in an exception specifier must be complete,
1668          but it seems more reasonable to only require this on definitions
1669          and calls.  So just give a pedwarn at this point; we will give an
1670          error later if we hit one of those two cases.  */
1671       if (!COMPLETE_TYPE_P (complete_type (core)))
1672         diag_type = DK_PEDWARN; /* pedwarn */
1673     }
1674
1675   if (ok)
1676     {
1677       tree probe;
1678
1679       for (probe = list; probe; probe = TREE_CHAIN (probe))
1680         if (same_type_p (TREE_VALUE (probe), spec))
1681           break;
1682       if (!probe)
1683         list = tree_cons (NULL_TREE, spec, list);
1684     }
1685   else
1686     diag_type = DK_ERROR; /* error */
1687
1688   if (diag_type != DK_UNSPECIFIED && complain)
1689     cxx_incomplete_type_diagnostic (NULL_TREE, core, diag_type);
1690
1691   return list;
1692 }
1693
1694 /* Combine the two exceptions specifier lists LIST and ADD, and return
1695    their union.  */
1696
1697 tree
1698 merge_exception_specifiers (tree list, tree add)
1699 {
1700   if (!list || !add)
1701     return NULL_TREE;
1702   else if (!TREE_VALUE (list))
1703     return add;
1704   else if (!TREE_VALUE (add))
1705     return list;
1706   else
1707     {
1708       tree orig_list = list;
1709
1710       for (; add; add = TREE_CHAIN (add))
1711         {
1712           tree spec = TREE_VALUE (add);
1713           tree probe;
1714
1715           for (probe = orig_list; probe; probe = TREE_CHAIN (probe))
1716             if (same_type_p (TREE_VALUE (probe), spec))
1717               break;
1718           if (!probe)
1719             {
1720               spec = build_tree_list (NULL_TREE, spec);
1721               TREE_CHAIN (spec) = list;
1722               list = spec;
1723             }
1724         }
1725     }
1726   return list;
1727 }
1728
1729 /* Subroutine of build_call.  Ensure that each of the types in the
1730    exception specification is complete.  Technically, 15.4/1 says that
1731    they need to be complete when we see a declaration of the function,
1732    but we should be able to get away with only requiring this when the
1733    function is defined or called.  See also add_exception_specifier.  */
1734
1735 void
1736 require_complete_eh_spec_types (tree fntype, tree decl)
1737 {
1738   tree raises;
1739   /* Don't complain about calls to op new.  */
1740   if (decl && DECL_ARTIFICIAL (decl))
1741     return;
1742   for (raises = TYPE_RAISES_EXCEPTIONS (fntype); raises;
1743        raises = TREE_CHAIN (raises))
1744     {
1745       tree type = TREE_VALUE (raises);
1746       if (type && !COMPLETE_TYPE_P (type))
1747         {
1748           if (decl)
1749             error
1750               ("call to function %qD which throws incomplete type %q#T",
1751                decl, type);
1752           else
1753             error ("call to function which throws incomplete type %q#T",
1754                    decl);
1755         }
1756     }
1757 }
1758
1759 \f
1760 #include "gt-cp-typeck2.h"