OSDN Git Service

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