Update gcc-50 to SVN version 222321 (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)
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         error_at (EXPR_LOC_OR_LOC (init, input_location),
961                   "narrowing conversion of %qE from %qT to %qT inside { }",
962                   init, ftype, type);
963     }
964
965   return cxx_dialect == cxx98 || ok; 
966 }
967
968 /* Process the initializer INIT for a variable of type TYPE, emitting
969    diagnostics for invalid initializers and converting the initializer as
970    appropriate.
971
972    For aggregate types, it assumes that reshape_init has already run, thus the
973    initializer will have the right shape (brace elision has been undone).
974
975    NESTED is true iff we are being called for an element of a CONSTRUCTOR.  */
976
977 static tree
978 digest_init_r (tree type, tree init, bool nested, int flags,
979                tsubst_flags_t complain)
980 {
981   enum tree_code code = TREE_CODE (type);
982
983   if (error_operand_p (init))
984     return error_mark_node;
985
986   gcc_assert (init);
987
988   /* We must strip the outermost array type when completing the type,
989      because the its bounds might be incomplete at the moment.  */
990   if (!complete_type_or_maybe_complain (TREE_CODE (type) == ARRAY_TYPE
991                                         ? TREE_TYPE (type) : type, NULL_TREE,
992                                         complain))
993     return error_mark_node;
994
995   /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue
996      (g++.old-deja/g++.law/casts2.C).  */
997   if (TREE_CODE (init) == NON_LVALUE_EXPR)
998     init = TREE_OPERAND (init, 0);
999
1000   /* Initialization of an array of chars from a string constant. The initializer
1001      can be optionally enclosed in braces, but reshape_init has already removed
1002      them if they were present.  */
1003   if (code == ARRAY_TYPE)
1004     {
1005       tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
1006       if (char_type_p (typ1)
1007           /*&& init */
1008           && TREE_CODE (init) == STRING_CST)
1009         {
1010           tree char_type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (init)));
1011
1012           if (TYPE_PRECISION (typ1) == BITS_PER_UNIT)
1013             {
1014               if (char_type != char_type_node)
1015                 {
1016                   if (complain & tf_error)
1017                     error ("char-array initialized from wide string");
1018                   return error_mark_node;
1019                 }
1020             }
1021           else
1022             {
1023               if (char_type == char_type_node)
1024                 {
1025                   if (complain & tf_error)
1026                     error ("int-array initialized from non-wide string");
1027                   return error_mark_node;
1028                 }
1029               else if (char_type != typ1)
1030                 {
1031                   if (complain & tf_error)
1032                     error ("int-array initialized from incompatible "
1033                            "wide string");
1034                   return error_mark_node;
1035                 }
1036             }
1037
1038           if (type != TREE_TYPE (init))
1039             {
1040               init = copy_node (init);
1041               TREE_TYPE (init) = type;
1042             }
1043           if (TYPE_DOMAIN (type) != 0 && TREE_CONSTANT (TYPE_SIZE (type)))
1044             {
1045               int size = TREE_INT_CST_LOW (TYPE_SIZE (type));
1046               size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
1047               /* In C it is ok to subtract 1 from the length of the string
1048                  because it's ok to ignore the terminating null char that is
1049                  counted in the length of the constant, but in C++ this would
1050                  be invalid.  */
1051               if (size < TREE_STRING_LENGTH (init))
1052                 permerror (input_location, "initializer-string for array "
1053                            "of chars is too long");
1054             }
1055           return init;
1056         }
1057     }
1058
1059   /* Handle scalar types (including conversions) and references.  */
1060   if ((TREE_CODE (type) != COMPLEX_TYPE
1061        || BRACE_ENCLOSED_INITIALIZER_P (init))
1062       && (SCALAR_TYPE_P (type) || code == REFERENCE_TYPE))
1063     {
1064       tree *exp;
1065
1066       if (nested)
1067         flags |= LOOKUP_NO_NARROWING;
1068       init = convert_for_initialization (0, type, init, flags,
1069                                          ICR_INIT, NULL_TREE, 0,
1070                                          complain);
1071       exp = &init;
1072
1073       /* Skip any conversions since we'll be outputting the underlying
1074          constant.  */
1075       while (CONVERT_EXPR_P (*exp)
1076              || TREE_CODE (*exp) == NON_LVALUE_EXPR)
1077         exp = &TREE_OPERAND (*exp, 0);
1078
1079       *exp = cplus_expand_constant (*exp);
1080
1081       return init;
1082     }
1083
1084   /* Come here only for aggregates: records, arrays, unions, complex numbers
1085      and vectors.  */
1086   gcc_assert (TREE_CODE (type) == ARRAY_TYPE
1087               || TREE_CODE (type) == VECTOR_TYPE
1088               || TREE_CODE (type) == RECORD_TYPE
1089               || TREE_CODE (type) == UNION_TYPE
1090               || TREE_CODE (type) == COMPLEX_TYPE);
1091
1092   if (BRACE_ENCLOSED_INITIALIZER_P (init)
1093       && !TYPE_NON_AGGREGATE_CLASS (type))
1094     return process_init_constructor (type, init, complain);
1095   else
1096     {
1097       if (COMPOUND_LITERAL_P (init) && TREE_CODE (type) == ARRAY_TYPE)
1098         {
1099           if (complain & tf_error)
1100             error ("cannot initialize aggregate of type %qT with "
1101                    "a compound literal", type);
1102
1103           return error_mark_node;
1104         }
1105
1106       if (TREE_CODE (type) == ARRAY_TYPE
1107           && !BRACE_ENCLOSED_INITIALIZER_P (init))
1108         {
1109           /* Allow the result of build_array_copy and of
1110              build_value_init_noctor.  */
1111           if ((TREE_CODE (init) == VEC_INIT_EXPR
1112                || TREE_CODE (init) == CONSTRUCTOR)
1113               && (same_type_ignoring_top_level_qualifiers_p
1114                   (type, TREE_TYPE (init))))
1115             return init;
1116
1117           if (complain & tf_error)
1118             error ("array must be initialized with a brace-enclosed"
1119                    " initializer");
1120           return error_mark_node;
1121         }
1122
1123       return convert_for_initialization (NULL_TREE, type, init,
1124                                          flags,
1125                                          ICR_INIT, NULL_TREE, 0,
1126                                          complain);
1127     }
1128 }
1129
1130 tree
1131 digest_init (tree type, tree init, tsubst_flags_t complain)
1132 {
1133   return digest_init_r (type, init, false, LOOKUP_IMPLICIT, complain);
1134 }
1135
1136 tree
1137 digest_init_flags (tree type, tree init, int flags)
1138 {
1139   return digest_init_r (type, init, false, flags, tf_warning_or_error);
1140 }
1141
1142 /* Process the initializer INIT for an NSDMI DECL (a FIELD_DECL).  */
1143 tree
1144 digest_nsdmi_init (tree decl, tree init)
1145 {
1146   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
1147
1148   int flags = LOOKUP_IMPLICIT;
1149   if (DIRECT_LIST_INIT_P (init))
1150     flags = LOOKUP_NORMAL;
1151   init = digest_init_flags (TREE_TYPE (decl), init, flags);
1152   if (TREE_CODE (init) == TARGET_EXPR)
1153     /* This represents the whole initialization.  */
1154     TARGET_EXPR_DIRECT_INIT_P (init) = true;
1155   return init;
1156 }
1157 \f
1158 /* Set of flags used within process_init_constructor to describe the
1159    initializers.  */
1160 #define PICFLAG_ERRONEOUS 1
1161 #define PICFLAG_NOT_ALL_CONSTANT 2
1162 #define PICFLAG_NOT_ALL_SIMPLE 4
1163 #define PICFLAG_SIDE_EFFECTS 8
1164
1165 /* Given an initializer INIT, return the flag (PICFLAG_*) which better
1166    describe it.  */
1167
1168 static int
1169 picflag_from_initializer (tree init)
1170 {
1171   if (init == error_mark_node)
1172     return PICFLAG_ERRONEOUS;
1173   else if (!TREE_CONSTANT (init))
1174     {
1175       if (TREE_SIDE_EFFECTS (init))
1176         return PICFLAG_SIDE_EFFECTS;
1177       else
1178         return PICFLAG_NOT_ALL_CONSTANT;
1179     }
1180   else if (!initializer_constant_valid_p (init, TREE_TYPE (init)))
1181     return PICFLAG_NOT_ALL_SIMPLE;
1182   return 0;
1183 }
1184
1185 /* Adjust INIT for going into a CONSTRUCTOR.  */
1186
1187 static tree
1188 massage_init_elt (tree type, tree init, tsubst_flags_t complain)
1189 {
1190   init = digest_init_r (type, init, true, LOOKUP_IMPLICIT, complain);
1191   /* Strip a simple TARGET_EXPR when we know this is an initializer.  */
1192   if (TREE_CODE (init) == TARGET_EXPR
1193       && !VOID_TYPE_P (TREE_TYPE (TARGET_EXPR_INITIAL (init))))
1194     init = TARGET_EXPR_INITIAL (init);
1195   /* When we defer constant folding within a statement, we may want to
1196      defer this folding as well.  */
1197   tree t = fold_non_dependent_expr (init);
1198   t = maybe_constant_init (t);
1199   if (TREE_CONSTANT (t))
1200     init = t;
1201   return init;
1202 }
1203
1204 /* Subroutine of process_init_constructor, which will process an initializer
1205    INIT for an array or vector of type TYPE. Returns the flags (PICFLAG_*)
1206    which describe the initializers.  */
1207
1208 static int
1209 process_init_constructor_array (tree type, tree init,
1210                                 tsubst_flags_t complain)
1211 {
1212   unsigned HOST_WIDE_INT i, len = 0;
1213   int flags = 0;
1214   bool unbounded = false;
1215   constructor_elt *ce;
1216   vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (init);
1217
1218   gcc_assert (TREE_CODE (type) == ARRAY_TYPE
1219               || TREE_CODE (type) == VECTOR_TYPE);
1220
1221   if (TREE_CODE (type) == ARRAY_TYPE)
1222     {
1223       tree domain = TYPE_DOMAIN (type);
1224       if (domain && TREE_CONSTANT (TYPE_MAX_VALUE (domain)))
1225         len = wi::ext (wi::to_offset (TYPE_MAX_VALUE (domain))
1226                        - wi::to_offset (TYPE_MIN_VALUE (domain)) + 1,
1227                        TYPE_PRECISION (TREE_TYPE (domain)),
1228                        TYPE_SIGN (TREE_TYPE (domain))).to_uhwi ();
1229       else
1230         unbounded = true;  /* Take as many as there are.  */
1231     }
1232   else
1233     /* Vectors are like simple fixed-size arrays.  */
1234     len = TYPE_VECTOR_SUBPARTS (type);
1235
1236   /* There must not be more initializers than needed.  */
1237   if (!unbounded && vec_safe_length (v) > len)
1238     {
1239       if (complain & tf_error)
1240         error ("too many initializers for %qT", type);
1241       else
1242         return PICFLAG_ERRONEOUS;
1243     }
1244
1245   FOR_EACH_VEC_SAFE_ELT (v, i, ce)
1246     {
1247       if (ce->index)
1248         {
1249           gcc_assert (TREE_CODE (ce->index) == INTEGER_CST);
1250           if (compare_tree_int (ce->index, i) != 0)
1251             {
1252               ce->value = error_mark_node;
1253               sorry ("non-trivial designated initializers not supported");
1254             }
1255         }
1256       else
1257         ce->index = size_int (i);
1258       gcc_assert (ce->value);
1259       ce->value = massage_init_elt (TREE_TYPE (type), ce->value, complain);
1260
1261       if (ce->value != error_mark_node)
1262         gcc_assert (same_type_ignoring_top_level_qualifiers_p
1263                       (TREE_TYPE (type), TREE_TYPE (ce->value)));
1264
1265       flags |= picflag_from_initializer (ce->value);
1266     }
1267
1268   /* No more initializers. If the array is unbounded, we are done. Otherwise,
1269      we must add initializers ourselves.  */
1270   if (!unbounded)
1271     for (; i < len; ++i)
1272       {
1273         tree next;
1274
1275         if (type_build_ctor_call (TREE_TYPE (type)))
1276           {
1277             /* If this type needs constructors run for default-initialization,
1278                we can't rely on the back end to do it for us, so make the
1279                initialization explicit by list-initializing from T{}.  */
1280             next = build_constructor (init_list_type_node, NULL);
1281             CONSTRUCTOR_IS_DIRECT_INIT (next) = true;
1282             next = massage_init_elt (TREE_TYPE (type), next, complain);
1283             if (initializer_zerop (next))
1284               /* The default zero-initialization is fine for us; don't
1285                  add anything to the CONSTRUCTOR.  */
1286               next = NULL_TREE;
1287           }
1288         else if (!zero_init_p (TREE_TYPE (type)))
1289           next = build_zero_init (TREE_TYPE (type),
1290                                   /*nelts=*/NULL_TREE,
1291                                   /*static_storage_p=*/false);
1292         else
1293           /* The default zero-initialization is fine for us; don't
1294              add anything to the CONSTRUCTOR.  */
1295           next = NULL_TREE;
1296
1297         if (next)
1298           {
1299             flags |= picflag_from_initializer (next);
1300             CONSTRUCTOR_APPEND_ELT (v, size_int (i), next);
1301           }
1302       }
1303
1304   CONSTRUCTOR_ELTS (init) = v;
1305   return flags;
1306 }
1307
1308 /* Subroutine of process_init_constructor, which will process an initializer
1309    INIT for a class of type TYPE. Returns the flags (PICFLAG_*) which describe
1310    the initializers.  */
1311
1312 static int
1313 process_init_constructor_record (tree type, tree init,
1314                                  tsubst_flags_t complain)
1315 {
1316   vec<constructor_elt, va_gc> *v = NULL;
1317   tree field;
1318   int skipped = 0;
1319
1320   gcc_assert (TREE_CODE (type) == RECORD_TYPE);
1321   gcc_assert (!CLASSTYPE_VBASECLASSES (type));
1322   gcc_assert (!TYPE_BINFO (type)
1323               || !BINFO_N_BASE_BINFOS (TYPE_BINFO (type)));
1324   gcc_assert (!TYPE_POLYMORPHIC_P (type));
1325
1326  restart:
1327   int flags = 0;
1328   unsigned HOST_WIDE_INT idx = 0;
1329   /* Generally, we will always have an index for each initializer (which is
1330      a FIELD_DECL, put by reshape_init), but compound literals don't go trough
1331      reshape_init. So we need to handle both cases.  */
1332   for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
1333     {
1334       tree next;
1335       tree type;
1336
1337       if (!DECL_NAME (field) && DECL_C_BIT_FIELD (field))
1338         continue;
1339
1340       if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
1341         continue;
1342
1343       /* If this is a bitfield, first convert to the declared type.  */
1344       type = TREE_TYPE (field);
1345       if (DECL_BIT_FIELD_TYPE (field))
1346         type = DECL_BIT_FIELD_TYPE (field);
1347       if (type == error_mark_node)
1348         return PICFLAG_ERRONEOUS;
1349
1350       if (idx < vec_safe_length (CONSTRUCTOR_ELTS (init)))
1351         {
1352           constructor_elt *ce = &(*CONSTRUCTOR_ELTS (init))[idx];
1353           if (ce->index)
1354             {
1355               /* We can have either a FIELD_DECL or an IDENTIFIER_NODE. The
1356                  latter case can happen in templates where lookup has to be
1357                  deferred.  */
1358               gcc_assert (TREE_CODE (ce->index) == FIELD_DECL
1359                           || identifier_p (ce->index));
1360               if (ce->index != field
1361                   && ce->index != DECL_NAME (field))
1362                 {
1363                   ce->value = error_mark_node;
1364                   sorry ("non-trivial designated initializers not supported");
1365                 }
1366             }
1367
1368           gcc_assert (ce->value);
1369           next = massage_init_elt (type, ce->value, complain);
1370           ++idx;
1371         }
1372       else if (DECL_INITIAL (field))
1373         {
1374           if (skipped > 0)
1375             {
1376               /* We're using an NSDMI past a field with implicit
1377                  zero-init.  Go back and make it explicit.  */
1378               skipped = -1;
1379               vec_safe_truncate (v, 0);
1380               goto restart;
1381             }
1382           /* C++14 aggregate NSDMI.  */
1383           next = get_nsdmi (field, /*ctor*/false);
1384         }
1385       else if (type_build_ctor_call (TREE_TYPE (field)))
1386         {
1387           /* If this type needs constructors run for
1388              default-initialization, we can't rely on the back end to do it
1389              for us, so build up TARGET_EXPRs.  If the type in question is
1390              a class, just build one up; if it's an array, recurse.  */
1391           next = build_constructor (init_list_type_node, NULL);
1392           /* Call this direct-initialization pending DR 1518 resolution so
1393              that explicit default ctors don't break valid C++03 code.  */
1394           CONSTRUCTOR_IS_DIRECT_INIT (next) = true;
1395           next = massage_init_elt (TREE_TYPE (field), next, complain);
1396
1397           /* Warn when some struct elements are implicitly initialized.  */
1398           if ((complain & tf_warning)
1399               && !EMPTY_CONSTRUCTOR_P (init))
1400             warning (OPT_Wmissing_field_initializers,
1401                      "missing initializer for member %qD", field);
1402         }
1403       else
1404         {
1405           if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
1406             {
1407               if (complain & tf_error)
1408                 error ("member %qD is uninitialized reference", field);
1409               else
1410                 return PICFLAG_ERRONEOUS;
1411             }
1412           else if (CLASSTYPE_REF_FIELDS_NEED_INIT (TREE_TYPE (field)))
1413             {
1414               if (complain & tf_error)
1415                 error ("member %qD with uninitialized reference fields", field);
1416               else
1417                 return PICFLAG_ERRONEOUS;
1418             }
1419
1420           /* Warn when some struct elements are implicitly initialized
1421              to zero.  */
1422           if ((complain & tf_warning)
1423               && !EMPTY_CONSTRUCTOR_P (init))
1424             warning (OPT_Wmissing_field_initializers,
1425                      "missing initializer for member %qD", field);
1426
1427           if (!zero_init_p (TREE_TYPE (field))
1428               || skipped < 0)
1429             next = build_zero_init (TREE_TYPE (field), /*nelts=*/NULL_TREE,
1430                                     /*static_storage_p=*/false);
1431           else
1432             {
1433               /* The default zero-initialization is fine for us; don't
1434                  add anything to the CONSTRUCTOR.  */
1435               skipped = 1;
1436               continue;
1437             }
1438         }
1439
1440       /* If this is a bitfield, now convert to the lowered type.  */
1441       if (type != TREE_TYPE (field))
1442         next = cp_convert_and_check (TREE_TYPE (field), next, complain);
1443       flags |= picflag_from_initializer (next);
1444       CONSTRUCTOR_APPEND_ELT (v, field, next);
1445     }
1446
1447   if (idx < vec_safe_length (CONSTRUCTOR_ELTS (init)))
1448     {
1449       if (complain & tf_error)
1450         error ("too many initializers for %qT", type);
1451       else
1452         return PICFLAG_ERRONEOUS;
1453     }
1454
1455   CONSTRUCTOR_ELTS (init) = v;
1456   return flags;
1457 }
1458
1459 /* Subroutine of process_init_constructor, which will process a single
1460    initializer INIT for a union of type TYPE. Returns the flags (PICFLAG_*)
1461    which describe the initializer.  */
1462
1463 static int
1464 process_init_constructor_union (tree type, tree init,
1465                                 tsubst_flags_t complain)
1466 {
1467   constructor_elt *ce;
1468   int len;
1469
1470   /* If the initializer was empty, use default zero initialization.  */
1471   if (vec_safe_is_empty (CONSTRUCTOR_ELTS (init)))
1472     return 0;
1473
1474   len = CONSTRUCTOR_ELTS (init)->length ();
1475   if (len > 1)
1476     {
1477       if (!(complain & tf_error))
1478         return PICFLAG_ERRONEOUS;
1479       error ("too many initializers for %qT", type);
1480       CONSTRUCTOR_ELTS (init)->block_remove (1, len-1);
1481     }
1482
1483   ce = &(*CONSTRUCTOR_ELTS (init))[0];
1484
1485   /* If this element specifies a field, initialize via that field.  */
1486   if (ce->index)
1487     {
1488       if (TREE_CODE (ce->index) == FIELD_DECL)
1489         ;
1490       else if (identifier_p (ce->index))
1491         {
1492           /* This can happen within a cast, see g++.dg/opt/cse2.C.  */
1493           tree name = ce->index;
1494           tree field;
1495           for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1496             if (DECL_NAME (field) == name)
1497               break;
1498           if (!field)
1499             {
1500               if (complain & tf_error)
1501                 error ("no field %qD found in union being initialized",
1502                        field);
1503               ce->value = error_mark_node;
1504             }
1505           ce->index = field;
1506         }
1507       else
1508         {
1509           gcc_assert (TREE_CODE (ce->index) == INTEGER_CST
1510                       || TREE_CODE (ce->index) == RANGE_EXPR);
1511           if (complain & tf_error)
1512             error ("index value instead of field name in union initializer");
1513           ce->value = error_mark_node;
1514         }
1515     }
1516   else
1517     {
1518       /* Find the first named field.  ANSI decided in September 1990
1519          that only named fields count here.  */
1520       tree field = TYPE_FIELDS (type);
1521       while (field && (!DECL_NAME (field) || TREE_CODE (field) != FIELD_DECL))
1522         field = TREE_CHAIN (field);
1523       if (field == NULL_TREE)
1524         {
1525           if (complain & tf_error)
1526             error ("too many initializers for %qT", type);
1527           ce->value = error_mark_node;
1528         }
1529       ce->index = field;
1530     }
1531
1532   if (ce->value && ce->value != error_mark_node)
1533     ce->value = massage_init_elt (TREE_TYPE (ce->index), ce->value, complain);
1534
1535   return picflag_from_initializer (ce->value);
1536 }
1537
1538 /* Process INIT, a constructor for a variable of aggregate type TYPE. The
1539    constructor is a brace-enclosed initializer, and will be modified in-place.
1540
1541    Each element is converted to the right type through digest_init, and
1542    missing initializers are added following the language rules (zero-padding,
1543    etc.).
1544
1545    After the execution, the initializer will have TREE_CONSTANT if all elts are
1546    constant, and TREE_STATIC set if, in addition, all elts are simple enough
1547    constants that the assembler and linker can compute them.
1548
1549    The function returns the initializer itself, or error_mark_node in case
1550    of error.  */
1551
1552 static tree
1553 process_init_constructor (tree type, tree init, tsubst_flags_t complain)
1554 {
1555   int flags;
1556
1557   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
1558
1559   if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
1560     flags = process_init_constructor_array (type, init, complain);
1561   else if (TREE_CODE (type) == RECORD_TYPE)
1562     flags = process_init_constructor_record (type, init, complain);
1563   else if (TREE_CODE (type) == UNION_TYPE)
1564     flags = process_init_constructor_union (type, init, complain);
1565   else
1566     gcc_unreachable ();
1567
1568   if (flags & PICFLAG_ERRONEOUS)
1569     return error_mark_node;
1570
1571   TREE_TYPE (init) = type;
1572   if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE)
1573     cp_complete_array_type (&TREE_TYPE (init), init, /*do_default=*/0);
1574   if (flags & PICFLAG_SIDE_EFFECTS)
1575     {
1576       TREE_CONSTANT (init) = false;
1577       TREE_SIDE_EFFECTS (init) = true;
1578     }
1579   else if (flags & PICFLAG_NOT_ALL_CONSTANT)
1580     /* Make sure TREE_CONSTANT isn't set from build_constructor.  */
1581     TREE_CONSTANT (init) = false;
1582   else
1583     {
1584       TREE_CONSTANT (init) = 1;
1585       if (!(flags & PICFLAG_NOT_ALL_SIMPLE))
1586         TREE_STATIC (init) = 1;
1587     }
1588   return init;
1589 }
1590 \f
1591 /* Given a structure or union value DATUM, construct and return
1592    the structure or union component which results from narrowing
1593    that value to the base specified in BASETYPE.  For example, given the
1594    hierarchy
1595
1596    class L { int ii; };
1597    class A : L { ... };
1598    class B : L { ... };
1599    class C : A, B { ... };
1600
1601    and the declaration
1602
1603    C x;
1604
1605    then the expression
1606
1607    x.A::ii refers to the ii member of the L part of
1608    the A part of the C object named by X.  In this case,
1609    DATUM would be x, and BASETYPE would be A.
1610
1611    I used to think that this was nonconformant, that the standard specified
1612    that first we look up ii in A, then convert x to an L& and pull out the
1613    ii part.  But in fact, it does say that we convert x to an A&; A here
1614    is known as the "naming class".  (jason 2000-12-19)
1615
1616    BINFO_P points to a variable initialized either to NULL_TREE or to the
1617    binfo for the specific base subobject we want to convert to.  */
1618
1619 tree
1620 build_scoped_ref (tree datum, tree basetype, tree* binfo_p)
1621 {
1622   tree binfo;
1623
1624   if (datum == error_mark_node)
1625     return error_mark_node;
1626   if (*binfo_p)
1627     binfo = *binfo_p;
1628   else
1629     binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check,
1630                          NULL, tf_warning_or_error);
1631
1632   if (!binfo || binfo == error_mark_node)
1633     {
1634       *binfo_p = NULL_TREE;
1635       if (!binfo)
1636         error_not_base_type (basetype, TREE_TYPE (datum));
1637       return error_mark_node;
1638     }
1639
1640   *binfo_p = binfo;
1641   return build_base_path (PLUS_EXPR, datum, binfo, 1,
1642                           tf_warning_or_error);
1643 }
1644
1645 /* Build a reference to an object specified by the C++ `->' operator.
1646    Usually this just involves dereferencing the object, but if the
1647    `->' operator is overloaded, then such overloads must be
1648    performed until an object which does not have the `->' operator
1649    overloaded is found.  An error is reported when circular pointer
1650    delegation is detected.  */
1651
1652 tree
1653 build_x_arrow (location_t loc, tree expr, tsubst_flags_t complain)
1654 {
1655   tree orig_expr = expr;
1656   tree type = TREE_TYPE (expr);
1657   tree last_rval = NULL_TREE;
1658   vec<tree, va_gc> *types_memoized = NULL;
1659
1660   if (type == error_mark_node)
1661     return error_mark_node;
1662
1663   if (processing_template_decl)
1664     {
1665       if (type_dependent_expression_p (expr))
1666         return build_min_nt_loc (loc, ARROW_EXPR, expr);
1667       expr = build_non_dependent_expr (expr);
1668     }
1669
1670   if (MAYBE_CLASS_TYPE_P (type))
1671     {
1672       struct tinst_level *actual_inst = current_instantiation ();
1673       tree fn = NULL;
1674
1675       while ((expr = build_new_op (loc, COMPONENT_REF,
1676                                    LOOKUP_NORMAL, expr, NULL_TREE, NULL_TREE,
1677                                    &fn, complain)))
1678         {
1679           if (expr == error_mark_node)
1680             return error_mark_node;
1681
1682           /* This provides a better instantiation backtrace in case of
1683              error.  */
1684           if (fn && DECL_USE_TEMPLATE (fn))
1685             push_tinst_level_loc (fn, 
1686                                   (current_instantiation () != actual_inst)
1687                                   ? DECL_SOURCE_LOCATION (fn)
1688                                   : input_location);
1689           fn = NULL;
1690
1691           if (vec_member (TREE_TYPE (expr), types_memoized))
1692             {
1693               if (complain & tf_error)
1694                 error ("circular pointer delegation detected");
1695               return error_mark_node;
1696             }
1697
1698           vec_safe_push (types_memoized, TREE_TYPE (expr));
1699           last_rval = expr;
1700         }
1701
1702       while (current_instantiation () != actual_inst)
1703         pop_tinst_level ();
1704
1705       if (last_rval == NULL_TREE)
1706         {
1707           if (complain & tf_error)
1708             error ("base operand of %<->%> has non-pointer type %qT", type);
1709           return error_mark_node;
1710         }
1711
1712       if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1713         last_rval = convert_from_reference (last_rval);
1714     }
1715   else
1716     last_rval = decay_conversion (expr, complain);
1717
1718   if (TYPE_PTR_P (TREE_TYPE (last_rval)))
1719     {
1720       if (processing_template_decl)
1721         {
1722           expr = build_min (ARROW_EXPR, TREE_TYPE (TREE_TYPE (last_rval)),
1723                             orig_expr);
1724           TREE_SIDE_EFFECTS (expr) = TREE_SIDE_EFFECTS (last_rval);
1725           return expr;
1726         }
1727
1728       return cp_build_indirect_ref (last_rval, RO_NULL, complain);
1729     }
1730
1731   if (complain & tf_error)
1732     {
1733       if (types_memoized)
1734         error ("result of %<operator->()%> yields non-pointer result");
1735       else
1736         error ("base operand of %<->%> is not a pointer");
1737     }
1738   return error_mark_node;
1739 }
1740
1741 /* Return an expression for "DATUM .* COMPONENT".  DATUM has not
1742    already been checked out to be of aggregate type.  */
1743
1744 tree
1745 build_m_component_ref (tree datum, tree component, tsubst_flags_t complain)
1746 {
1747   tree ptrmem_type;
1748   tree objtype;
1749   tree type;
1750   tree binfo;
1751   tree ctype;
1752
1753   if (error_operand_p (datum) || error_operand_p (component))
1754     return error_mark_node;
1755
1756   datum = mark_lvalue_use (datum);
1757   component = mark_rvalue_use (component);
1758
1759   ptrmem_type = TREE_TYPE (component);
1760   if (!TYPE_PTRMEM_P (ptrmem_type))
1761     {
1762       if (complain & tf_error)
1763         error ("%qE cannot be used as a member pointer, since it is of "
1764                "type %qT", component, ptrmem_type);
1765       return error_mark_node;
1766     }
1767
1768   objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
1769   if (! MAYBE_CLASS_TYPE_P (objtype))
1770     {
1771       if (complain & tf_error)
1772         error ("cannot apply member pointer %qE to %qE, which is of "
1773                "non-class type %qT", component, datum, objtype);
1774       return error_mark_node;
1775     }
1776
1777   type = TYPE_PTRMEM_POINTED_TO_TYPE (ptrmem_type);
1778   ctype = complete_type (TYPE_PTRMEM_CLASS_TYPE (ptrmem_type));
1779
1780   if (!COMPLETE_TYPE_P (ctype))
1781     {
1782       if (!same_type_p (ctype, objtype))
1783         goto mismatch;
1784       binfo = NULL;
1785     }
1786   else
1787     {
1788       binfo = lookup_base (objtype, ctype, ba_check, NULL, complain);
1789
1790       if (!binfo)
1791         {
1792         mismatch:
1793           if (complain & tf_error)
1794             error ("pointer to member type %qT incompatible with object "
1795                    "type %qT", type, objtype);
1796           return error_mark_node;
1797         }
1798       else if (binfo == error_mark_node)
1799         return error_mark_node;
1800     }
1801
1802   if (TYPE_PTRDATAMEM_P (ptrmem_type))
1803     {
1804       cp_lvalue_kind kind = lvalue_kind (datum);
1805       tree ptype;
1806
1807       /* Compute the type of the field, as described in [expr.ref].
1808          There's no such thing as a mutable pointer-to-member, so
1809          things are not as complex as they are for references to
1810          non-static data members.  */
1811       type = cp_build_qualified_type (type,
1812                                       (cp_type_quals (type)
1813                                        | cp_type_quals (TREE_TYPE (datum))));
1814
1815       datum = build_address (datum);
1816
1817       /* Convert object to the correct base.  */
1818       if (binfo)
1819         {
1820           datum = build_base_path (PLUS_EXPR, datum, binfo, 1, complain);
1821           if (datum == error_mark_node)
1822             return error_mark_node;
1823         }
1824
1825       /* Build an expression for "object + offset" where offset is the
1826          value stored in the pointer-to-data-member.  */
1827       ptype = build_pointer_type (type);
1828       datum = fold_build_pointer_plus (fold_convert (ptype, datum), component);
1829       datum = cp_build_indirect_ref (datum, RO_NULL, complain);
1830       if (datum == error_mark_node)
1831         return error_mark_node;
1832
1833       /* If the object expression was an rvalue, return an rvalue.  */
1834       if (kind & clk_class)
1835         datum = rvalue (datum);
1836       else if (kind & clk_rvalueref)
1837         datum = move (datum);
1838       return datum;
1839     }
1840   else
1841     {
1842       /* 5.5/6: In a .* expression whose object expression is an rvalue, the
1843          program is ill-formed if the second operand is a pointer to member
1844          function with ref-qualifier &. In a .* expression whose object
1845          expression is an lvalue, the program is ill-formed if the second
1846          operand is a pointer to member function with ref-qualifier &&.  */
1847       if (FUNCTION_REF_QUALIFIED (type))
1848         {
1849           bool lval = real_lvalue_p (datum);
1850           if (lval && FUNCTION_RVALUE_QUALIFIED (type))
1851             {
1852               if (complain & tf_error)
1853                 error ("pointer-to-member-function type %qT requires an rvalue",
1854                        ptrmem_type);
1855               return error_mark_node;
1856             }
1857           else if (!lval && !FUNCTION_RVALUE_QUALIFIED (type))
1858             {
1859               if (complain & tf_error)
1860                 error ("pointer-to-member-function type %qT requires an lvalue",
1861                        ptrmem_type);
1862               return error_mark_node;
1863             }
1864         }
1865       return build2 (OFFSET_REF, type, datum, component);
1866     }
1867 }
1868
1869 /* Return a tree node for the expression TYPENAME '(' PARMS ')'.  */
1870
1871 tree
1872 build_functional_cast (tree exp, tree parms, tsubst_flags_t complain)
1873 {
1874   /* This is either a call to a constructor,
1875      or a C cast in C++'s `functional' notation.  */
1876
1877   /* The type to which we are casting.  */
1878   tree type;
1879   vec<tree, va_gc> *parmvec;
1880
1881   if (error_operand_p (exp) || parms == error_mark_node)
1882     return error_mark_node;
1883
1884   if (TREE_CODE (exp) == TYPE_DECL)
1885     {
1886       type = TREE_TYPE (exp);
1887
1888       if (complain & tf_warning
1889           && TREE_DEPRECATED (type)
1890           && DECL_ARTIFICIAL (exp))
1891         warn_deprecated_use (type, NULL_TREE);
1892     }
1893   else
1894     type = exp;
1895
1896   /* We need to check this explicitly, since value-initialization of
1897      arrays is allowed in other situations.  */
1898   if (TREE_CODE (type) == ARRAY_TYPE)
1899     {
1900       if (complain & tf_error)
1901         error ("functional cast to array type %qT", type);
1902       return error_mark_node;
1903     }
1904
1905   if (type_uses_auto (type))
1906     {
1907       if (complain & tf_error)
1908         error ("invalid use of %<auto%>");
1909       return error_mark_node;
1910     }
1911
1912   if (processing_template_decl)
1913     {
1914       tree t;
1915
1916       /* Diagnose this even in a template.  We could also try harder
1917          to give all the usual errors when the type and args are
1918          non-dependent...  */
1919       if (TREE_CODE (type) == REFERENCE_TYPE && !parms)
1920         {
1921           if (complain & tf_error)
1922             error ("invalid value-initialization of reference type");
1923           return error_mark_node;
1924         }
1925
1926       t = build_min (CAST_EXPR, type, parms);
1927       /* We don't know if it will or will not have side effects.  */
1928       TREE_SIDE_EFFECTS (t) = 1;
1929       return t;
1930     }
1931
1932   if (! MAYBE_CLASS_TYPE_P (type))
1933     {
1934       if (parms == NULL_TREE)
1935         {
1936           if (VOID_TYPE_P (type))
1937             return void_node;
1938           return build_value_init (cv_unqualified (type), complain);
1939         }
1940
1941       /* This must build a C cast.  */
1942       parms = build_x_compound_expr_from_list (parms, ELK_FUNC_CAST, complain);
1943       return cp_build_c_cast (type, parms, complain);
1944     }
1945
1946   /* Prepare to evaluate as a call to a constructor.  If this expression
1947      is actually used, for example,
1948
1949      return X (arg1, arg2, ...);
1950
1951      then the slot being initialized will be filled in.  */
1952
1953   if (!complete_type_or_maybe_complain (type, NULL_TREE, complain))
1954     return error_mark_node;
1955   if (abstract_virtuals_error_sfinae (ACU_CAST, type, complain))
1956     return error_mark_node;
1957
1958   /* [expr.type.conv]
1959
1960      If the expression list is a single-expression, the type
1961      conversion is equivalent (in definedness, and if defined in
1962      meaning) to the corresponding cast expression.  */
1963   if (parms && TREE_CHAIN (parms) == NULL_TREE)
1964     return cp_build_c_cast (type, TREE_VALUE (parms), complain);
1965
1966   /* [expr.type.conv]
1967
1968      The expression T(), where T is a simple-type-specifier for a
1969      non-array complete object type or the (possibly cv-qualified)
1970      void type, creates an rvalue of the specified type, which is
1971      value-initialized.  */
1972
1973   if (parms == NULL_TREE)
1974     {
1975       exp = build_value_init (type, complain);
1976       exp = get_target_expr_sfinae (exp, complain);
1977       return exp;
1978     }
1979
1980   /* Call the constructor.  */
1981   parmvec = make_tree_vector ();
1982   for (; parms != NULL_TREE; parms = TREE_CHAIN (parms))
1983     vec_safe_push (parmvec, TREE_VALUE (parms));
1984   exp = build_special_member_call (NULL_TREE, complete_ctor_identifier,
1985                                    &parmvec, type, LOOKUP_NORMAL, complain);
1986   release_tree_vector (parmvec);
1987
1988   if (exp == error_mark_node)
1989     return error_mark_node;
1990
1991   return build_cplus_new (type, exp, complain);
1992 }
1993 \f
1994
1995 /* Add new exception specifier SPEC, to the LIST we currently have.
1996    If it's already in LIST then do nothing.
1997    Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1998    know what we're doing.  */
1999
2000 tree
2001 add_exception_specifier (tree list, tree spec, int complain)
2002 {
2003   bool ok;
2004   tree core = spec;
2005   bool is_ptr;
2006   diagnostic_t diag_type = DK_UNSPECIFIED; /* none */
2007
2008   if (spec == error_mark_node)
2009     return list;
2010
2011   gcc_assert (spec && (!list || TREE_VALUE (list)));
2012
2013   /* [except.spec] 1, type in an exception specifier shall not be
2014      incomplete, or pointer or ref to incomplete other than pointer
2015      to cv void.  */
2016   is_ptr = TYPE_PTR_P (core);
2017   if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
2018     core = TREE_TYPE (core);
2019   if (complain < 0)
2020     ok = true;
2021   else if (VOID_TYPE_P (core))
2022     ok = is_ptr;
2023   else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
2024     ok = true;
2025   else if (processing_template_decl)
2026     ok = true;
2027   else
2028     {
2029       ok = true;
2030       /* 15.4/1 says that types in an exception specifier must be complete,
2031          but it seems more reasonable to only require this on definitions
2032          and calls.  So just give a pedwarn at this point; we will give an
2033          error later if we hit one of those two cases.  */
2034       if (!COMPLETE_TYPE_P (complete_type (core)))
2035         diag_type = DK_PEDWARN; /* pedwarn */
2036     }
2037
2038   if (ok)
2039     {
2040       tree probe;
2041
2042       for (probe = list; probe; probe = TREE_CHAIN (probe))
2043         if (same_type_p (TREE_VALUE (probe), spec))
2044           break;
2045       if (!probe)
2046         list = tree_cons (NULL_TREE, spec, list);
2047     }
2048   else
2049     diag_type = DK_ERROR; /* error */
2050
2051   if (diag_type != DK_UNSPECIFIED
2052       && (complain & tf_warning_or_error))
2053     cxx_incomplete_type_diagnostic (NULL_TREE, core, diag_type);
2054
2055   return list;
2056 }
2057
2058 /* Like nothrow_spec_p, but don't abort on deferred noexcept.  */
2059
2060 static bool
2061 nothrow_spec_p_uninst (const_tree spec)
2062 {
2063   if (DEFERRED_NOEXCEPT_SPEC_P (spec))
2064     return false;
2065   return nothrow_spec_p (spec);
2066 }
2067
2068 /* Combine the two exceptions specifier lists LIST and ADD, and return
2069    their union.  */
2070
2071 tree
2072 merge_exception_specifiers (tree list, tree add)
2073 {
2074   tree noex, orig_list;
2075
2076   /* No exception-specifier or noexcept(false) are less strict than
2077      anything else.  Prefer the newer variant (LIST).  */
2078   if (!list || list == noexcept_false_spec)
2079     return list;
2080   else if (!add || add == noexcept_false_spec)
2081     return add;
2082
2083   /* noexcept(true) and throw() are stricter than anything else.
2084      As above, prefer the more recent one (LIST).  */
2085   if (nothrow_spec_p_uninst (add))
2086     return list;
2087
2088   /* Two implicit noexcept specs (e.g. on a destructor) are equivalent.  */
2089   if (UNEVALUATED_NOEXCEPT_SPEC_P (add)
2090       && UNEVALUATED_NOEXCEPT_SPEC_P (list))
2091     return list;
2092   /* We should have instantiated other deferred noexcept specs by now.  */
2093   gcc_assert (!DEFERRED_NOEXCEPT_SPEC_P (add));
2094
2095   if (nothrow_spec_p_uninst (list))
2096     return add;
2097   noex = TREE_PURPOSE (list);
2098   gcc_checking_assert (!TREE_PURPOSE (add)
2099                        || cp_tree_equal (noex, TREE_PURPOSE (add)));
2100
2101   /* Combine the dynamic-exception-specifiers, if any.  */
2102   orig_list = list;
2103   for (; add && TREE_VALUE (add); add = TREE_CHAIN (add))
2104     {
2105       tree spec = TREE_VALUE (add);
2106       tree probe;
2107
2108       for (probe = orig_list; probe && TREE_VALUE (probe);
2109            probe = TREE_CHAIN (probe))
2110         if (same_type_p (TREE_VALUE (probe), spec))
2111           break;
2112       if (!probe)
2113         {
2114           spec = build_tree_list (NULL_TREE, spec);
2115           TREE_CHAIN (spec) = list;
2116           list = spec;
2117         }
2118     }
2119
2120   /* Keep the noexcept-specifier at the beginning of the list.  */
2121   if (noex != TREE_PURPOSE (list))
2122     list = tree_cons (noex, TREE_VALUE (list), TREE_CHAIN (list));
2123
2124   return list;
2125 }
2126
2127 /* Subroutine of build_call.  Ensure that each of the types in the
2128    exception specification is complete.  Technically, 15.4/1 says that
2129    they need to be complete when we see a declaration of the function,
2130    but we should be able to get away with only requiring this when the
2131    function is defined or called.  See also add_exception_specifier.  */
2132
2133 void
2134 require_complete_eh_spec_types (tree fntype, tree decl)
2135 {
2136   tree raises;
2137   /* Don't complain about calls to op new.  */
2138   if (decl && DECL_ARTIFICIAL (decl))
2139     return;
2140   for (raises = TYPE_RAISES_EXCEPTIONS (fntype); raises;
2141        raises = TREE_CHAIN (raises))
2142     {
2143       tree type = TREE_VALUE (raises);
2144       if (type && !COMPLETE_TYPE_P (type))
2145         {
2146           if (decl)
2147             error
2148               ("call to function %qD which throws incomplete type %q#T",
2149                decl, type);
2150           else
2151             error ("call to function which throws incomplete type %q#T",
2152                    decl);
2153         }
2154     }
2155 }
2156
2157 \f
2158 #include "gt-cp-typeck2.h"