OSDN Git Service

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