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