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