re PR c++/60474 (Crash in tree_class_check)
[official-gcc.git] / gcc / cp / typeck2.c
blob3a4caa0dafcf5b1849e74b84863bf62c89fc2d0f
1 /* Report error messages, build initializers, and perform
2 some front-end optimizations for C++ compiler.
3 Copyright (C) 1987-2014 Free Software Foundation, Inc.
4 Hacked by Michael Tiemann (tiemann@cygnus.com)
6 This file is part of GCC.
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.
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.
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/>. */
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. */
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "tm.h"
32 #include "tree.h"
33 #include "stor-layout.h"
34 #include "varasm.h"
35 #include "intl.h"
36 #include "cp-tree.h"
37 #include "flags.h"
38 #include "diagnostic-core.h"
40 static tree
41 process_init_constructor (tree type, tree init, tsubst_flags_t complain);
44 /* Print an error message stemming from an attempt to use
45 BASETYPE as a base class for TYPE. */
47 tree
48 error_not_base_type (tree basetype, tree type)
50 if (TREE_CODE (basetype) == FUNCTION_DECL)
51 basetype = DECL_CONTEXT (basetype);
52 error ("type %qT is not a base type for type %qT", basetype, type);
53 return error_mark_node;
56 tree
57 binfo_or_else (tree base, tree type)
59 tree binfo = lookup_base (type, base, ba_unique,
60 NULL, tf_warning_or_error);
62 if (binfo == error_mark_node)
63 return NULL_TREE;
64 else if (!binfo)
65 error_not_base_type (base, type);
66 return binfo;
69 /* According to ARM $7.1.6, "A `const' object may be initialized, but its
70 value may not be changed thereafter. */
72 void
73 cxx_readonly_error (tree arg, enum lvalue_use errstring)
76 /* This macro is used to emit diagnostics to ensure that all format
77 strings are complete sentences, visible to gettext and checked at
78 compile time. */
80 #define ERROR_FOR_ASSIGNMENT(AS, ASM, IN, DE, ARG) \
81 do { \
82 switch (errstring) \
83 { \
84 case lv_assign: \
85 error(AS, ARG); \
86 break; \
87 case lv_asm: \
88 error(ASM, ARG); \
89 break; \
90 case lv_increment: \
91 error (IN, ARG); \
92 break; \
93 case lv_decrement: \
94 error (DE, ARG); \
95 break; \
96 default: \
97 gcc_unreachable (); \
98 } \
99 } while (0)
101 /* Handle C++-specific things first. */
103 if (VAR_P (arg)
104 && DECL_LANG_SPECIFIC (arg)
105 && DECL_IN_AGGR_P (arg)
106 && !TREE_STATIC (arg))
107 ERROR_FOR_ASSIGNMENT (G_("assignment of "
108 "constant field %qD"),
109 G_("constant field %qD "
110 "used as %<asm%> output"),
111 G_("increment of "
112 "constant field %qD"),
113 G_("decrement of "
114 "constant field %qD"),
115 arg);
116 else if (INDIRECT_REF_P (arg)
117 && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
118 && (VAR_P (TREE_OPERAND (arg, 0))
119 || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
120 ERROR_FOR_ASSIGNMENT (G_("assignment of "
121 "read-only reference %qD"),
122 G_("read-only reference %qD "
123 "used as %<asm%> output"),
124 G_("increment of "
125 "read-only reference %qD"),
126 G_("decrement of "
127 "read-only reference %qD"),
128 TREE_OPERAND (arg, 0));
129 else
130 readonly_error (input_location, arg, errstring);
134 /* Structure that holds information about declarations whose type was
135 incomplete and we could not check whether it was abstract or not. */
137 struct GTY((chain_next ("%h.next"))) pending_abstract_type {
138 /* Declaration which we are checking for abstractness. It is either
139 a DECL node, or an IDENTIFIER_NODE if we do not have a full
140 declaration available. */
141 tree decl;
143 /* Type which will be checked for abstractness. */
144 tree type;
146 /* Kind of use in an unnamed declarator. */
147 abstract_class_use use;
149 /* Position of the declaration. This is only needed for IDENTIFIER_NODEs,
150 because DECLs already carry locus information. */
151 location_t locus;
153 /* Link to the next element in list. */
154 struct pending_abstract_type* next;
158 /* Compute the hash value of the node VAL. This function is used by the
159 hash table abstract_pending_vars. */
161 static hashval_t
162 pat_calc_hash (const void* val)
164 const struct pending_abstract_type *pat =
165 (const struct pending_abstract_type *) val;
166 return (hashval_t) TYPE_UID (pat->type);
170 /* Compare node VAL1 with the type VAL2. This function is used by the
171 hash table abstract_pending_vars. */
173 static int
174 pat_compare (const void* val1, const void* val2)
176 const struct pending_abstract_type *const pat1 =
177 (const struct pending_abstract_type *) val1;
178 const_tree const type2 = (const_tree)val2;
180 return (pat1->type == type2);
183 /* Hash table that maintains pending_abstract_type nodes, for which we still
184 need to check for type abstractness. The key of the table is the type
185 of the declaration. */
186 static GTY ((param_is (struct pending_abstract_type)))
187 htab_t abstract_pending_vars = NULL;
189 static int abstract_virtuals_error_sfinae (tree, tree, abstract_class_use, tsubst_flags_t);
191 /* This function is called after TYPE is completed, and will check if there
192 are pending declarations for which we still need to verify the abstractness
193 of TYPE, and emit a diagnostic (through abstract_virtuals_error) if TYPE
194 turned out to be incomplete. */
196 void
197 complete_type_check_abstract (tree type)
199 void **slot;
200 struct pending_abstract_type *pat;
201 location_t cur_loc = input_location;
203 gcc_assert (COMPLETE_TYPE_P (type));
205 if (!abstract_pending_vars)
206 return;
208 /* Retrieve the list of pending declarations for this type. */
209 slot = htab_find_slot_with_hash (abstract_pending_vars, type,
210 (hashval_t)TYPE_UID (type), NO_INSERT);
211 if (!slot)
212 return;
213 pat = (struct pending_abstract_type*)*slot;
214 gcc_assert (pat);
216 /* If the type is not abstract, do not do anything. */
217 if (CLASSTYPE_PURE_VIRTUALS (type))
219 struct pending_abstract_type *prev = 0, *next;
221 /* Reverse the list to emit the errors in top-down order. */
222 for (; pat; pat = next)
224 next = pat->next;
225 pat->next = prev;
226 prev = pat;
228 pat = prev;
230 /* Go through the list, and call abstract_virtuals_error for each
231 element: it will issue a diagnostic if the type is abstract. */
232 while (pat)
234 gcc_assert (type == pat->type);
236 /* Tweak input_location so that the diagnostic appears at the correct
237 location. Notice that this is only needed if the decl is an
238 IDENTIFIER_NODE. */
239 input_location = pat->locus;
240 abstract_virtuals_error_sfinae (pat->decl, pat->type, pat->use,
241 tf_warning_or_error);
242 pat = pat->next;
246 htab_clear_slot (abstract_pending_vars, slot);
248 input_location = cur_loc;
252 /* If TYPE has abstract virtual functions, issue an error about trying
253 to create an object of that type. DECL is the object declared, or
254 NULL_TREE if the declaration is unavailable, in which case USE specifies
255 the kind of invalid use. Returns 1 if an error occurred; zero if
256 all was well. */
258 static int
259 abstract_virtuals_error_sfinae (tree decl, tree type, abstract_class_use use,
260 tsubst_flags_t complain)
262 vec<tree, va_gc> *pure;
264 /* This function applies only to classes. Any other entity can never
265 be abstract. */
266 if (!CLASS_TYPE_P (type))
267 return 0;
268 type = TYPE_MAIN_VARIANT (type);
270 #if 0
271 /* Instantiation here seems to be required by the standard,
272 but breaks e.g. boost::bind. FIXME! */
273 /* In SFINAE, non-N3276 context, force instantiation. */
274 if (!(complain & (tf_error|tf_decltype)))
275 complete_type (type);
276 #endif
278 /* If the type is incomplete, we register it within a hash table,
279 so that we can check again once it is completed. This makes sense
280 only for objects for which we have a declaration or at least a
281 name. */
282 if (!COMPLETE_TYPE_P (type) && (complain & tf_error))
284 void **slot;
285 struct pending_abstract_type *pat;
287 gcc_assert (!decl || DECL_P (decl) || identifier_p (decl));
289 if (!abstract_pending_vars)
290 abstract_pending_vars = htab_create_ggc (31, &pat_calc_hash,
291 &pat_compare, NULL);
293 slot = htab_find_slot_with_hash (abstract_pending_vars, type,
294 (hashval_t)TYPE_UID (type), INSERT);
296 pat = ggc_alloc_pending_abstract_type ();
297 pat->type = type;
298 pat->decl = decl;
299 pat->use = use;
300 pat->locus = ((decl && DECL_P (decl))
301 ? DECL_SOURCE_LOCATION (decl)
302 : input_location);
304 pat->next = (struct pending_abstract_type *) *slot;
305 *slot = pat;
307 return 0;
310 if (!TYPE_SIZE (type))
311 /* TYPE is being defined, and during that time
312 CLASSTYPE_PURE_VIRTUALS holds the inline friends. */
313 return 0;
315 pure = CLASSTYPE_PURE_VIRTUALS (type);
316 if (!pure)
317 return 0;
319 if (!(complain & tf_error))
320 return 1;
322 if (decl)
324 if (VAR_P (decl))
325 error ("cannot declare variable %q+D to be of abstract "
326 "type %qT", decl, type);
327 else if (TREE_CODE (decl) == PARM_DECL)
329 if (DECL_NAME (decl))
330 error ("cannot declare parameter %q+D to be of abstract type %qT",
331 decl, type);
332 else
333 error ("cannot declare parameter to be of abstract type %qT",
334 type);
336 else if (TREE_CODE (decl) == FIELD_DECL)
337 error ("cannot declare field %q+D to be of abstract type %qT",
338 decl, type);
339 else if (TREE_CODE (decl) == FUNCTION_DECL
340 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
341 error ("invalid abstract return type for member function %q+#D", decl);
342 else if (TREE_CODE (decl) == FUNCTION_DECL)
343 error ("invalid abstract return type for function %q+#D", decl);
344 else if (identifier_p (decl))
345 /* Here we do not have location information. */
346 error ("invalid abstract type %qT for %qE", type, decl);
347 else
348 error ("invalid abstract type for %q+D", decl);
350 else switch (use)
352 case ACU_ARRAY:
353 error ("creating array of %qT, which is an abstract class type", type);
354 break;
355 case ACU_CAST:
356 error ("invalid cast to abstract class type %qT", type);
357 break;
358 case ACU_NEW:
359 error ("invalid new-expression of abstract class type %qT", type);
360 break;
361 case ACU_RETURN:
362 error ("invalid abstract return type %qT", type);
363 break;
364 case ACU_PARM:
365 error ("invalid abstract parameter type %qT", type);
366 break;
367 case ACU_THROW:
368 error ("expression of abstract class type %qT cannot "
369 "be used in throw-expression", type);
370 break;
371 case ACU_CATCH:
372 error ("cannot declare catch parameter to be of abstract "
373 "class type %qT", type);
374 break;
375 default:
376 error ("cannot allocate an object of abstract type %qT", type);
379 /* Only go through this once. */
380 if (pure->length ())
382 unsigned ix;
383 tree fn;
385 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
386 " because the following virtual functions are pure within %qT:",
387 type);
389 FOR_EACH_VEC_ELT (*pure, ix, fn)
390 if (! DECL_CLONED_FUNCTION_P (fn)
391 || DECL_COMPLETE_DESTRUCTOR_P (fn))
392 inform (input_location, "\t%+#D", fn);
394 /* Now truncate the vector. This leaves it non-null, so we know
395 there are pure virtuals, but empty so we don't list them out
396 again. */
397 pure->truncate (0);
400 return 1;
404 abstract_virtuals_error_sfinae (tree decl, tree type, tsubst_flags_t complain)
406 return abstract_virtuals_error_sfinae (decl, type, ACU_UNKNOWN, complain);
410 abstract_virtuals_error_sfinae (abstract_class_use use, tree type,
411 tsubst_flags_t complain)
413 return abstract_virtuals_error_sfinae (NULL_TREE, type, use, complain);
417 /* Wrapper for the above function in the common case of wanting errors. */
420 abstract_virtuals_error (tree decl, tree type)
422 return abstract_virtuals_error_sfinae (decl, type, tf_warning_or_error);
426 abstract_virtuals_error (abstract_class_use use, tree type)
428 return abstract_virtuals_error_sfinae (use, type, tf_warning_or_error);
431 /* Print an error message for invalid use of an incomplete type.
432 VALUE is the expression that was used (or 0 if that isn't known)
433 and TYPE is the type that was invalid. DIAG_KIND indicates the
434 type of diagnostic (see diagnostic.def). */
436 void
437 cxx_incomplete_type_diagnostic (const_tree value, const_tree type,
438 diagnostic_t diag_kind)
440 int decl = 0;
442 gcc_assert (diag_kind == DK_WARNING
443 || diag_kind == DK_PEDWARN
444 || diag_kind == DK_ERROR);
446 /* Avoid duplicate error message. */
447 if (TREE_CODE (type) == ERROR_MARK)
448 return;
450 if (value != 0 && (VAR_P (value)
451 || TREE_CODE (value) == PARM_DECL
452 || TREE_CODE (value) == FIELD_DECL))
454 emit_diagnostic (diag_kind, input_location, 0,
455 "%q+D has incomplete type", value);
456 decl = 1;
458 retry:
459 /* We must print an error message. Be clever about what it says. */
461 switch (TREE_CODE (type))
463 case RECORD_TYPE:
464 case UNION_TYPE:
465 case ENUMERAL_TYPE:
466 if (!decl)
467 emit_diagnostic (diag_kind, input_location, 0,
468 "invalid use of incomplete type %q#T", type);
469 if (!TYPE_TEMPLATE_INFO (type))
470 emit_diagnostic (diag_kind, input_location, 0,
471 "forward declaration of %q+#T", type);
472 else
473 emit_diagnostic (diag_kind, input_location, 0,
474 "declaration of %q+#T", type);
475 break;
477 case VOID_TYPE:
478 emit_diagnostic (diag_kind, input_location, 0,
479 "invalid use of %qT", type);
480 break;
482 case ARRAY_TYPE:
483 if (TYPE_DOMAIN (type))
485 type = TREE_TYPE (type);
486 goto retry;
488 emit_diagnostic (diag_kind, input_location, 0,
489 "invalid use of array with unspecified bounds");
490 break;
492 case OFFSET_TYPE:
493 bad_member:
495 tree member = TREE_OPERAND (value, 1);
496 if (is_overloaded_fn (member))
497 member = get_first_fn (member);
498 if (DECL_FUNCTION_MEMBER_P (member)
499 && ! flag_ms_extensions)
500 emit_diagnostic (diag_kind, input_location, 0,
501 "invalid use of member function "
502 "(did you forget the %<()%> ?)");
503 else
504 emit_diagnostic (diag_kind, input_location, 0,
505 "invalid use of member "
506 "(did you forget the %<&%> ?)");
508 break;
510 case TEMPLATE_TYPE_PARM:
511 if (is_auto (type))
512 emit_diagnostic (diag_kind, input_location, 0,
513 "invalid use of %<auto%>");
514 else
515 emit_diagnostic (diag_kind, input_location, 0,
516 "invalid use of template type parameter %qT", type);
517 break;
519 case BOUND_TEMPLATE_TEMPLATE_PARM:
520 emit_diagnostic (diag_kind, input_location, 0,
521 "invalid use of template template parameter %qT",
522 TYPE_NAME (type));
523 break;
525 case TYPENAME_TYPE:
526 emit_diagnostic (diag_kind, input_location, 0,
527 "invalid use of dependent type %qT", type);
528 break;
530 case LANG_TYPE:
531 if (type == init_list_type_node)
533 emit_diagnostic (diag_kind, input_location, 0,
534 "invalid use of brace-enclosed initializer list");
535 break;
537 gcc_assert (type == unknown_type_node);
538 if (value && TREE_CODE (value) == COMPONENT_REF)
539 goto bad_member;
540 else if (value && TREE_CODE (value) == ADDR_EXPR)
541 emit_diagnostic (diag_kind, input_location, 0,
542 "address of overloaded function with no contextual "
543 "type information");
544 else if (value && TREE_CODE (value) == OVERLOAD)
545 emit_diagnostic (diag_kind, input_location, 0,
546 "overloaded function with no contextual type information");
547 else
548 emit_diagnostic (diag_kind, input_location, 0,
549 "insufficient contextual information to determine type");
550 break;
552 default:
553 gcc_unreachable ();
557 /* Backward-compatibility interface to incomplete_type_diagnostic;
558 required by ../tree.c. */
559 #undef cxx_incomplete_type_error
560 void
561 cxx_incomplete_type_error (const_tree value, const_tree type)
563 cxx_incomplete_type_diagnostic (value, type, DK_ERROR);
567 /* The recursive part of split_nonconstant_init. DEST is an lvalue
568 expression to which INIT should be assigned. INIT is a CONSTRUCTOR.
569 Return true if the whole of the value was initialized by the
570 generated statements. */
572 static bool
573 split_nonconstant_init_1 (tree dest, tree init)
575 unsigned HOST_WIDE_INT idx;
576 tree field_index, value;
577 tree type = TREE_TYPE (dest);
578 tree inner_type = NULL;
579 bool array_type_p = false;
580 bool complete_p = true;
581 HOST_WIDE_INT num_split_elts = 0;
583 switch (TREE_CODE (type))
585 case ARRAY_TYPE:
586 inner_type = TREE_TYPE (type);
587 array_type_p = true;
588 /* FALLTHRU */
590 case RECORD_TYPE:
591 case UNION_TYPE:
592 case QUAL_UNION_TYPE:
593 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init), idx,
594 field_index, value)
596 /* The current implementation of this algorithm assumes that
597 the field was set for all the elements. This is usually done
598 by process_init_constructor. */
599 gcc_assert (field_index);
601 if (!array_type_p)
602 inner_type = TREE_TYPE (field_index);
604 if (TREE_CODE (value) == CONSTRUCTOR)
606 tree sub;
608 if (array_type_p)
609 sub = build4 (ARRAY_REF, inner_type, dest, field_index,
610 NULL_TREE, NULL_TREE);
611 else
612 sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
613 NULL_TREE);
615 if (!split_nonconstant_init_1 (sub, value))
616 complete_p = false;
617 num_split_elts++;
619 else if (!initializer_constant_valid_p (value, inner_type))
621 tree code;
622 tree sub;
624 /* FIXME: Ordered removal is O(1) so the whole function is
625 worst-case quadratic. This could be fixed using an aside
626 bitmap to record which elements must be removed and remove
627 them all at the same time. Or by merging
628 split_non_constant_init into process_init_constructor_array,
629 that is separating constants from non-constants while building
630 the vector. */
631 CONSTRUCTOR_ELTS (init)->ordered_remove (idx);
632 --idx;
634 if (TREE_CODE (field_index) == RANGE_EXPR)
636 /* Use build_vec_init to initialize a range. */
637 tree low = TREE_OPERAND (field_index, 0);
638 tree hi = TREE_OPERAND (field_index, 1);
639 sub = build4 (ARRAY_REF, inner_type, dest, low,
640 NULL_TREE, NULL_TREE);
641 sub = cp_build_addr_expr (sub, tf_warning_or_error);
642 tree max = size_binop (MINUS_EXPR, hi, low);
643 code = build_vec_init (sub, max, value, false, 0,
644 tf_warning_or_error);
645 add_stmt (code);
646 if (tree_fits_shwi_p (max))
647 num_split_elts += tree_to_shwi (max);
649 else
651 if (array_type_p)
652 sub = build4 (ARRAY_REF, inner_type, dest, field_index,
653 NULL_TREE, NULL_TREE);
654 else
655 sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
656 NULL_TREE);
658 code = build2 (INIT_EXPR, inner_type, sub, value);
659 code = build_stmt (input_location, EXPR_STMT, code);
660 code = maybe_cleanup_point_expr_void (code);
661 add_stmt (code);
662 if (type_build_dtor_call (inner_type))
664 code = (build_special_member_call
665 (sub, complete_dtor_identifier, NULL, inner_type,
666 LOOKUP_NORMAL, tf_warning_or_error));
667 if (!TYPE_HAS_TRIVIAL_DESTRUCTOR (inner_type))
668 finish_eh_cleanup (code);
672 num_split_elts++;
675 break;
677 case VECTOR_TYPE:
678 if (!initializer_constant_valid_p (init, type))
680 tree code;
681 tree cons = copy_node (init);
682 CONSTRUCTOR_ELTS (init) = NULL;
683 code = build2 (MODIFY_EXPR, type, dest, cons);
684 code = build_stmt (input_location, EXPR_STMT, code);
685 add_stmt (code);
686 num_split_elts += CONSTRUCTOR_NELTS (init);
688 break;
690 default:
691 gcc_unreachable ();
694 /* The rest of the initializer is now a constant. */
695 TREE_CONSTANT (init) = 1;
696 return complete_p && complete_ctor_at_level_p (TREE_TYPE (init),
697 num_split_elts, inner_type);
700 /* A subroutine of store_init_value. Splits non-constant static
701 initializer INIT into a constant part and generates code to
702 perform the non-constant part of the initialization to DEST.
703 Returns the code for the runtime init. */
705 static tree
706 split_nonconstant_init (tree dest, tree init)
708 tree code;
710 if (TREE_CODE (init) == CONSTRUCTOR)
712 code = push_stmt_list ();
713 if (split_nonconstant_init_1 (dest, init))
714 init = NULL_TREE;
715 code = pop_stmt_list (code);
716 DECL_INITIAL (dest) = init;
717 TREE_READONLY (dest) = 0;
719 else
720 code = build2 (INIT_EXPR, TREE_TYPE (dest), dest, init);
722 return code;
725 /* Perform appropriate conversions on the initial value of a variable,
726 store it in the declaration DECL,
727 and print any error messages that are appropriate.
728 If the init is invalid, store an ERROR_MARK.
730 C++: Note that INIT might be a TREE_LIST, which would mean that it is
731 a base class initializer for some aggregate type, hopefully compatible
732 with DECL. If INIT is a single element, and DECL is an aggregate
733 type, we silently convert INIT into a TREE_LIST, allowing a constructor
734 to be called.
736 If INIT is a TREE_LIST and there is no constructor, turn INIT
737 into a CONSTRUCTOR and use standard initialization techniques.
738 Perhaps a warning should be generated?
740 Returns code to be executed if initialization could not be performed
741 for static variable. In that case, caller must emit the code. */
743 tree
744 store_init_value (tree decl, tree init, vec<tree, va_gc>** cleanups, int flags)
746 tree value, type;
748 /* If variable's type was invalidly declared, just ignore it. */
750 type = TREE_TYPE (decl);
751 if (TREE_CODE (type) == ERROR_MARK)
752 return NULL_TREE;
754 if (MAYBE_CLASS_TYPE_P (type))
756 if (TREE_CODE (init) == TREE_LIST)
758 error ("constructor syntax used, but no constructor declared "
759 "for type %qT", type);
760 init = build_constructor_from_list (init_list_type_node, nreverse (init));
763 else if (TREE_CODE (init) == TREE_LIST
764 && TREE_TYPE (init) != unknown_type_node)
766 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
768 if (TREE_CODE (init) == TREE_LIST
769 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
771 error ("cannot initialize arrays using this syntax");
772 return NULL_TREE;
774 else
775 /* We get here with code like `int a (2);' */
776 init = build_x_compound_expr_from_list (init, ELK_INIT,
777 tf_warning_or_error);
780 /* End of special C++ code. */
782 if (flags & LOOKUP_ALREADY_DIGESTED)
783 value = init;
784 else
785 /* Digest the specified initializer into an expression. */
786 value = digest_init_flags (type, init, flags);
788 value = extend_ref_init_temps (decl, value, cleanups);
790 /* In C++0x constant expression is a semantic, not syntactic, property.
791 In C++98, make sure that what we thought was a constant expression at
792 template definition time is still constant and otherwise perform this
793 as optimization, e.g. to fold SIZEOF_EXPRs in the initializer. */
794 if (decl_maybe_constant_var_p (decl) || TREE_STATIC (decl))
796 bool const_init;
797 value = fold_non_dependent_expr (value);
798 if (DECL_DECLARED_CONSTEXPR_P (decl)
799 || DECL_IN_AGGR_P (decl))
801 /* Diagnose a non-constant initializer for constexpr. */
802 if (processing_template_decl
803 && !require_potential_constant_expression (value))
804 value = error_mark_node;
805 else
806 value = cxx_constant_value (value);
808 value = maybe_constant_init (value);
809 const_init = (reduced_constant_expression_p (value)
810 || error_operand_p (value));
811 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = const_init;
812 TREE_CONSTANT (decl) = const_init && decl_maybe_constant_var_p (decl);
815 /* If the initializer is not a constant, fill in DECL_INITIAL with
816 the bits that are constant, and then return an expression that
817 will perform the dynamic initialization. */
818 if (value != error_mark_node
819 && (TREE_SIDE_EFFECTS (value)
820 || array_of_runtime_bound_p (type)
821 || ! reduced_constant_expression_p (value)))
823 if (TREE_CODE (type) == ARRAY_TYPE
824 && (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (type))
825 || array_of_runtime_bound_p (type)))
826 /* For an array, we only need/want a single cleanup region rather
827 than one per element. */
828 return build_vec_init (decl, NULL_TREE, value, false, 1,
829 tf_warning_or_error);
830 else
831 return split_nonconstant_init (decl, value);
833 /* If the value is a constant, just put it in DECL_INITIAL. If DECL
834 is an automatic variable, the middle end will turn this into a
835 dynamic initialization later. */
836 DECL_INITIAL (decl) = value;
837 return NULL_TREE;
841 /* Give errors about narrowing conversions within { }. */
843 void
844 check_narrowing (tree type, tree init)
846 tree ftype = unlowered_expr_type (init);
847 bool ok = true;
848 REAL_VALUE_TYPE d;
850 if (!warn_narrowing || !ARITHMETIC_TYPE_P (type))
851 return;
853 if (BRACE_ENCLOSED_INITIALIZER_P (init)
854 && TREE_CODE (type) == COMPLEX_TYPE)
856 tree elttype = TREE_TYPE (type);
857 if (CONSTRUCTOR_NELTS (init) > 0)
858 check_narrowing (elttype, CONSTRUCTOR_ELT (init, 0)->value);
859 if (CONSTRUCTOR_NELTS (init) > 1)
860 check_narrowing (elttype, CONSTRUCTOR_ELT (init, 1)->value);
861 return;
864 init = maybe_constant_value (init);
866 if (TREE_CODE (type) == INTEGER_TYPE
867 && TREE_CODE (ftype) == REAL_TYPE)
868 ok = false;
869 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (ftype)
870 && CP_INTEGRAL_TYPE_P (type))
872 if (TREE_CODE (ftype) == ENUMERAL_TYPE)
873 /* Check for narrowing based on the values of the enumeration. */
874 ftype = ENUM_UNDERLYING_TYPE (ftype);
875 if ((tree_int_cst_lt (TYPE_MAX_VALUE (type),
876 TYPE_MAX_VALUE (ftype))
877 || tree_int_cst_lt (TYPE_MIN_VALUE (ftype),
878 TYPE_MIN_VALUE (type)))
879 && (TREE_CODE (init) != INTEGER_CST
880 || !int_fits_type_p (init, type)))
881 ok = false;
883 else if (TREE_CODE (ftype) == REAL_TYPE
884 && TREE_CODE (type) == REAL_TYPE)
886 if (TYPE_PRECISION (type) < TYPE_PRECISION (ftype))
888 if (TREE_CODE (init) == REAL_CST)
890 /* Issue 703: Loss of precision is OK as long as the value is
891 within the representable range of the new type. */
892 REAL_VALUE_TYPE r;
893 d = TREE_REAL_CST (init);
894 real_convert (&r, TYPE_MODE (type), &d);
895 if (real_isinf (&r))
896 ok = false;
898 else
899 ok = false;
902 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (ftype)
903 && TREE_CODE (type) == REAL_TYPE)
905 ok = false;
906 if (TREE_CODE (init) == INTEGER_CST)
908 d = real_value_from_int_cst (0, init);
909 if (exact_real_truncate (TYPE_MODE (type), &d))
910 ok = true;
914 if (!ok)
916 if (cxx_dialect >= cxx11)
917 pedwarn (EXPR_LOC_OR_LOC (init, input_location), OPT_Wnarrowing,
918 "narrowing conversion of %qE from %qT to %qT inside { }",
919 init, ftype, type);
920 else
921 warning_at (EXPR_LOC_OR_LOC (init, input_location), OPT_Wnarrowing,
922 "narrowing conversion of %qE from %qT to %qT inside { } "
923 "is ill-formed in C++11", init, ftype, type);
927 /* Process the initializer INIT for a variable of type TYPE, emitting
928 diagnostics for invalid initializers and converting the initializer as
929 appropriate.
931 For aggregate types, it assumes that reshape_init has already run, thus the
932 initializer will have the right shape (brace elision has been undone).
934 NESTED is true iff we are being called for an element of a CONSTRUCTOR. */
936 static tree
937 digest_init_r (tree type, tree init, bool nested, int flags,
938 tsubst_flags_t complain)
940 enum tree_code code = TREE_CODE (type);
942 if (error_operand_p (init))
943 return error_mark_node;
945 gcc_assert (init);
947 /* We must strip the outermost array type when completing the type,
948 because the its bounds might be incomplete at the moment. */
949 if (!complete_type_or_maybe_complain (TREE_CODE (type) == ARRAY_TYPE
950 ? TREE_TYPE (type) : type, NULL_TREE,
951 complain))
952 return error_mark_node;
954 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue
955 (g++.old-deja/g++.law/casts2.C). */
956 if (TREE_CODE (init) == NON_LVALUE_EXPR)
957 init = TREE_OPERAND (init, 0);
959 /* Initialization of an array of chars from a string constant. The initializer
960 can be optionally enclosed in braces, but reshape_init has already removed
961 them if they were present. */
962 if (code == ARRAY_TYPE)
964 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
965 if (char_type_p (typ1)
966 /*&& init */
967 && TREE_CODE (init) == STRING_CST)
969 tree char_type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (init)));
971 if (TYPE_PRECISION (typ1) == BITS_PER_UNIT)
973 if (char_type != char_type_node)
975 if (complain & tf_error)
976 error ("char-array initialized from wide string");
977 return error_mark_node;
980 else
982 if (char_type == char_type_node)
984 if (complain & tf_error)
985 error ("int-array initialized from non-wide string");
986 return error_mark_node;
988 else if (char_type != typ1)
990 if (complain & tf_error)
991 error ("int-array initialized from incompatible "
992 "wide string");
993 return error_mark_node;
997 if (type != TREE_TYPE (init))
999 init = copy_node (init);
1000 TREE_TYPE (init) = type;
1002 if (TYPE_DOMAIN (type) != 0 && TREE_CONSTANT (TYPE_SIZE (type)))
1004 int size = TREE_INT_CST_LOW (TYPE_SIZE (type));
1005 size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
1006 /* In C it is ok to subtract 1 from the length of the string
1007 because it's ok to ignore the terminating null char that is
1008 counted in the length of the constant, but in C++ this would
1009 be invalid. */
1010 if (size < TREE_STRING_LENGTH (init))
1011 permerror (input_location, "initializer-string for array "
1012 "of chars is too long");
1014 return init;
1018 /* Handle scalar types (including conversions) and references. */
1019 if ((TREE_CODE (type) != COMPLEX_TYPE
1020 || BRACE_ENCLOSED_INITIALIZER_P (init))
1021 && (SCALAR_TYPE_P (type) || code == REFERENCE_TYPE))
1023 tree *exp;
1025 if (nested)
1026 check_narrowing (type, init);
1027 init = convert_for_initialization (0, type, init, flags,
1028 ICR_INIT, NULL_TREE, 0,
1029 complain);
1030 exp = &init;
1032 /* Skip any conversions since we'll be outputting the underlying
1033 constant. */
1034 while (CONVERT_EXPR_P (*exp)
1035 || TREE_CODE (*exp) == NON_LVALUE_EXPR)
1036 exp = &TREE_OPERAND (*exp, 0);
1038 *exp = cplus_expand_constant (*exp);
1040 return init;
1043 /* Come here only for aggregates: records, arrays, unions, complex numbers
1044 and vectors. */
1045 gcc_assert (TREE_CODE (type) == ARRAY_TYPE
1046 || TREE_CODE (type) == VECTOR_TYPE
1047 || TREE_CODE (type) == RECORD_TYPE
1048 || TREE_CODE (type) == UNION_TYPE
1049 || TREE_CODE (type) == COMPLEX_TYPE);
1051 if (BRACE_ENCLOSED_INITIALIZER_P (init)
1052 && !TYPE_NON_AGGREGATE_CLASS (type))
1053 return process_init_constructor (type, init, complain);
1054 else
1056 if (COMPOUND_LITERAL_P (init) && TREE_CODE (type) == ARRAY_TYPE)
1058 if (complain & tf_error)
1059 error ("cannot initialize aggregate of type %qT with "
1060 "a compound literal", type);
1062 return error_mark_node;
1065 if (TREE_CODE (type) == ARRAY_TYPE
1066 && !BRACE_ENCLOSED_INITIALIZER_P (init))
1068 /* Allow the result of build_array_copy and of
1069 build_value_init_noctor. */
1070 if ((TREE_CODE (init) == VEC_INIT_EXPR
1071 || TREE_CODE (init) == CONSTRUCTOR)
1072 && (same_type_ignoring_top_level_qualifiers_p
1073 (type, TREE_TYPE (init))))
1074 return init;
1076 if (complain & tf_error)
1077 error ("array must be initialized with a brace-enclosed"
1078 " initializer");
1079 return error_mark_node;
1082 return convert_for_initialization (NULL_TREE, type, init,
1083 flags,
1084 ICR_INIT, NULL_TREE, 0,
1085 complain);
1089 tree
1090 digest_init (tree type, tree init, tsubst_flags_t complain)
1092 return digest_init_r (type, init, false, LOOKUP_IMPLICIT, complain);
1095 tree
1096 digest_init_flags (tree type, tree init, int flags)
1098 return digest_init_r (type, init, false, flags, tf_warning_or_error);
1101 /* Set of flags used within process_init_constructor to describe the
1102 initializers. */
1103 #define PICFLAG_ERRONEOUS 1
1104 #define PICFLAG_NOT_ALL_CONSTANT 2
1105 #define PICFLAG_NOT_ALL_SIMPLE 4
1107 /* Given an initializer INIT, return the flag (PICFLAG_*) which better
1108 describe it. */
1110 static int
1111 picflag_from_initializer (tree init)
1113 if (init == error_mark_node)
1114 return PICFLAG_ERRONEOUS;
1115 else if (!TREE_CONSTANT (init))
1116 return PICFLAG_NOT_ALL_CONSTANT;
1117 else if (!initializer_constant_valid_p (init, TREE_TYPE (init)))
1118 return PICFLAG_NOT_ALL_SIMPLE;
1119 return 0;
1122 /* Adjust INIT for going into a CONSTRUCTOR. */
1124 static tree
1125 massage_init_elt (tree type, tree init, tsubst_flags_t complain)
1127 init = digest_init_r (type, init, true, LOOKUP_IMPLICIT, complain);
1128 /* Strip a simple TARGET_EXPR when we know this is an initializer. */
1129 if (TREE_CODE (init) == TARGET_EXPR
1130 && !VOID_TYPE_P (TREE_TYPE (TARGET_EXPR_INITIAL (init))))
1131 init = TARGET_EXPR_INITIAL (init);
1132 /* When we defer constant folding within a statement, we may want to
1133 defer this folding as well. */
1134 tree t = fold_non_dependent_expr_sfinae (init, complain);
1135 t = maybe_constant_value (t);
1136 if (TREE_CONSTANT (t))
1137 init = t;
1138 return init;
1141 /* Subroutine of process_init_constructor, which will process an initializer
1142 INIT for an array or vector of type TYPE. Returns the flags (PICFLAG_*)
1143 which describe the initializers. */
1145 static int
1146 process_init_constructor_array (tree type, tree init,
1147 tsubst_flags_t complain)
1149 unsigned HOST_WIDE_INT i, len = 0;
1150 int flags = 0;
1151 bool unbounded = false;
1152 constructor_elt *ce;
1153 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (init);
1155 gcc_assert (TREE_CODE (type) == ARRAY_TYPE
1156 || TREE_CODE (type) == VECTOR_TYPE);
1158 if (TREE_CODE (type) == ARRAY_TYPE)
1160 tree domain = TYPE_DOMAIN (type);
1161 if (domain && TREE_CONSTANT (TYPE_MAX_VALUE (domain)))
1162 len = (tree_to_double_int (TYPE_MAX_VALUE (domain))
1163 - tree_to_double_int (TYPE_MIN_VALUE (domain))
1164 + double_int_one)
1165 .ext (TYPE_PRECISION (TREE_TYPE (domain)),
1166 TYPE_UNSIGNED (TREE_TYPE (domain)))
1167 .low;
1168 else
1169 unbounded = true; /* Take as many as there are. */
1171 else
1172 /* Vectors are like simple fixed-size arrays. */
1173 len = TYPE_VECTOR_SUBPARTS (type);
1175 /* There must not be more initializers than needed. */
1176 if (!unbounded && vec_safe_length (v) > len)
1178 if (complain & tf_error)
1179 error ("too many initializers for %qT", type);
1180 else
1181 return PICFLAG_ERRONEOUS;
1184 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
1186 if (ce->index)
1188 gcc_assert (TREE_CODE (ce->index) == INTEGER_CST);
1189 if (compare_tree_int (ce->index, i) != 0)
1191 ce->value = error_mark_node;
1192 sorry ("non-trivial designated initializers not supported");
1195 else
1196 ce->index = size_int (i);
1197 gcc_assert (ce->value);
1198 ce->value = massage_init_elt (TREE_TYPE (type), ce->value, complain);
1200 if (ce->value != error_mark_node)
1201 gcc_assert (same_type_ignoring_top_level_qualifiers_p
1202 (TREE_TYPE (type), TREE_TYPE (ce->value)));
1204 flags |= picflag_from_initializer (ce->value);
1207 /* No more initializers. If the array is unbounded, we are done. Otherwise,
1208 we must add initializers ourselves. */
1209 if (!unbounded)
1210 for (; i < len; ++i)
1212 tree next;
1214 if (type_build_ctor_call (TREE_TYPE (type)))
1216 /* If this type needs constructors run for default-initialization,
1217 we can't rely on the back end to do it for us, so make the
1218 initialization explicit by list-initializing from {}. */
1219 next = build_constructor (init_list_type_node, NULL);
1220 next = massage_init_elt (TREE_TYPE (type), next, complain);
1221 if (initializer_zerop (next))
1222 /* The default zero-initialization is fine for us; don't
1223 add anything to the CONSTRUCTOR. */
1224 next = NULL_TREE;
1226 else if (!zero_init_p (TREE_TYPE (type)))
1227 next = build_zero_init (TREE_TYPE (type),
1228 /*nelts=*/NULL_TREE,
1229 /*static_storage_p=*/false);
1230 else
1231 /* The default zero-initialization is fine for us; don't
1232 add anything to the CONSTRUCTOR. */
1233 next = NULL_TREE;
1235 if (next)
1237 flags |= picflag_from_initializer (next);
1238 CONSTRUCTOR_APPEND_ELT (v, size_int (i), next);
1242 CONSTRUCTOR_ELTS (init) = v;
1243 return flags;
1246 /* Subroutine of process_init_constructor, which will process an initializer
1247 INIT for a class of type TYPE. Returns the flags (PICFLAG_*) which describe
1248 the initializers. */
1250 static int
1251 process_init_constructor_record (tree type, tree init,
1252 tsubst_flags_t complain)
1254 vec<constructor_elt, va_gc> *v = NULL;
1255 int flags = 0;
1256 tree field;
1257 unsigned HOST_WIDE_INT idx = 0;
1259 gcc_assert (TREE_CODE (type) == RECORD_TYPE);
1260 gcc_assert (!CLASSTYPE_VBASECLASSES (type));
1261 gcc_assert (!TYPE_BINFO (type)
1262 || !BINFO_N_BASE_BINFOS (TYPE_BINFO (type)));
1263 gcc_assert (!TYPE_POLYMORPHIC_P (type));
1265 /* Generally, we will always have an index for each initializer (which is
1266 a FIELD_DECL, put by reshape_init), but compound literals don't go trough
1267 reshape_init. So we need to handle both cases. */
1268 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
1270 tree next;
1271 tree type;
1273 if (!DECL_NAME (field) && DECL_C_BIT_FIELD (field))
1274 continue;
1276 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
1277 continue;
1279 /* If this is a bitfield, first convert to the declared type. */
1280 type = TREE_TYPE (field);
1281 if (DECL_BIT_FIELD_TYPE (field))
1282 type = DECL_BIT_FIELD_TYPE (field);
1283 if (type == error_mark_node)
1284 return PICFLAG_ERRONEOUS;
1286 if (idx < vec_safe_length (CONSTRUCTOR_ELTS (init)))
1288 constructor_elt *ce = &(*CONSTRUCTOR_ELTS (init))[idx];
1289 if (ce->index)
1291 /* We can have either a FIELD_DECL or an IDENTIFIER_NODE. The
1292 latter case can happen in templates where lookup has to be
1293 deferred. */
1294 gcc_assert (TREE_CODE (ce->index) == FIELD_DECL
1295 || identifier_p (ce->index));
1296 if (ce->index != field
1297 && ce->index != DECL_NAME (field))
1299 ce->value = error_mark_node;
1300 sorry ("non-trivial designated initializers not supported");
1304 gcc_assert (ce->value);
1305 next = massage_init_elt (type, ce->value, complain);
1306 ++idx;
1308 else if (type_build_ctor_call (TREE_TYPE (field)))
1310 /* If this type needs constructors run for
1311 default-initialization, we can't rely on the back end to do it
1312 for us, so build up TARGET_EXPRs. If the type in question is
1313 a class, just build one up; if it's an array, recurse. */
1314 next = build_constructor (init_list_type_node, NULL);
1315 /* Call this direct-initialization pending DR 1518 resolution so
1316 that explicit default ctors don't break valid C++03 code. */
1317 CONSTRUCTOR_IS_DIRECT_INIT (next) = true;
1318 next = massage_init_elt (TREE_TYPE (field), next, complain);
1320 /* Warn when some struct elements are implicitly initialized. */
1321 warning (OPT_Wmissing_field_initializers,
1322 "missing initializer for member %qD", field);
1324 else
1326 if (TREE_READONLY (field))
1328 if (complain & tf_error)
1329 error ("uninitialized const member %qD", field);
1330 else
1331 return PICFLAG_ERRONEOUS;
1333 else if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
1335 if (complain & tf_error)
1336 error ("member %qD with uninitialized const fields", field);
1337 else
1338 return PICFLAG_ERRONEOUS;
1340 else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
1342 if (complain & tf_error)
1343 error ("member %qD is uninitialized reference", field);
1344 else
1345 return PICFLAG_ERRONEOUS;
1348 /* Warn when some struct elements are implicitly initialized
1349 to zero. */
1350 warning (OPT_Wmissing_field_initializers,
1351 "missing initializer for member %qD", field);
1353 if (!zero_init_p (TREE_TYPE (field)))
1354 next = build_zero_init (TREE_TYPE (field), /*nelts=*/NULL_TREE,
1355 /*static_storage_p=*/false);
1356 else
1357 /* The default zero-initialization is fine for us; don't
1358 add anything to the CONSTRUCTOR. */
1359 continue;
1362 /* If this is a bitfield, now convert to the lowered type. */
1363 if (type != TREE_TYPE (field))
1364 next = cp_convert_and_check (TREE_TYPE (field), next, complain);
1365 flags |= picflag_from_initializer (next);
1366 CONSTRUCTOR_APPEND_ELT (v, field, next);
1369 if (idx < vec_safe_length (CONSTRUCTOR_ELTS (init)))
1371 if (complain & tf_error)
1372 error ("too many initializers for %qT", type);
1373 else
1374 return PICFLAG_ERRONEOUS;
1377 CONSTRUCTOR_ELTS (init) = v;
1378 return flags;
1381 /* Subroutine of process_init_constructor, which will process a single
1382 initializer INIT for a union of type TYPE. Returns the flags (PICFLAG_*)
1383 which describe the initializer. */
1385 static int
1386 process_init_constructor_union (tree type, tree init,
1387 tsubst_flags_t complain)
1389 constructor_elt *ce;
1390 int len;
1392 /* If the initializer was empty, use default zero initialization. */
1393 if (vec_safe_is_empty (CONSTRUCTOR_ELTS (init)))
1394 return 0;
1396 len = CONSTRUCTOR_ELTS (init)->length ();
1397 if (len > 1)
1399 if (!(complain & tf_error))
1400 return PICFLAG_ERRONEOUS;
1401 error ("too many initializers for %qT", type);
1402 CONSTRUCTOR_ELTS (init)->block_remove (1, len-1);
1405 ce = &(*CONSTRUCTOR_ELTS (init))[0];
1407 /* If this element specifies a field, initialize via that field. */
1408 if (ce->index)
1410 if (TREE_CODE (ce->index) == FIELD_DECL)
1412 else if (identifier_p (ce->index))
1414 /* This can happen within a cast, see g++.dg/opt/cse2.C. */
1415 tree name = ce->index;
1416 tree field;
1417 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1418 if (DECL_NAME (field) == name)
1419 break;
1420 if (!field)
1422 if (complain & tf_error)
1423 error ("no field %qD found in union being initialized",
1424 field);
1425 ce->value = error_mark_node;
1427 ce->index = field;
1429 else
1431 gcc_assert (TREE_CODE (ce->index) == INTEGER_CST
1432 || TREE_CODE (ce->index) == RANGE_EXPR);
1433 if (complain & tf_error)
1434 error ("index value instead of field name in union initializer");
1435 ce->value = error_mark_node;
1438 else
1440 /* Find the first named field. ANSI decided in September 1990
1441 that only named fields count here. */
1442 tree field = TYPE_FIELDS (type);
1443 while (field && (!DECL_NAME (field) || TREE_CODE (field) != FIELD_DECL))
1444 field = TREE_CHAIN (field);
1445 if (field == NULL_TREE)
1447 if (complain & tf_error)
1448 error ("too many initializers for %qT", type);
1449 ce->value = error_mark_node;
1451 ce->index = field;
1454 if (ce->value && ce->value != error_mark_node)
1455 ce->value = massage_init_elt (TREE_TYPE (ce->index), ce->value, complain);
1457 return picflag_from_initializer (ce->value);
1460 /* Process INIT, a constructor for a variable of aggregate type TYPE. The
1461 constructor is a brace-enclosed initializer, and will be modified in-place.
1463 Each element is converted to the right type through digest_init, and
1464 missing initializers are added following the language rules (zero-padding,
1465 etc.).
1467 After the execution, the initializer will have TREE_CONSTANT if all elts are
1468 constant, and TREE_STATIC set if, in addition, all elts are simple enough
1469 constants that the assembler and linker can compute them.
1471 The function returns the initializer itself, or error_mark_node in case
1472 of error. */
1474 static tree
1475 process_init_constructor (tree type, tree init, tsubst_flags_t complain)
1477 int flags;
1479 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
1481 if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
1482 flags = process_init_constructor_array (type, init, complain);
1483 else if (TREE_CODE (type) == RECORD_TYPE)
1484 flags = process_init_constructor_record (type, init, complain);
1485 else if (TREE_CODE (type) == UNION_TYPE)
1486 flags = process_init_constructor_union (type, init, complain);
1487 else
1488 gcc_unreachable ();
1490 if (flags & PICFLAG_ERRONEOUS)
1491 return error_mark_node;
1493 TREE_TYPE (init) = type;
1494 if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE)
1495 cp_complete_array_type (&TREE_TYPE (init), init, /*do_default=*/0);
1496 if (flags & PICFLAG_NOT_ALL_CONSTANT)
1497 /* Make sure TREE_CONSTANT isn't set from build_constructor. */
1498 TREE_CONSTANT (init) = false;
1499 else
1501 TREE_CONSTANT (init) = 1;
1502 if (!(flags & PICFLAG_NOT_ALL_SIMPLE))
1503 TREE_STATIC (init) = 1;
1505 return init;
1508 /* Given a structure or union value DATUM, construct and return
1509 the structure or union component which results from narrowing
1510 that value to the base specified in BASETYPE. For example, given the
1511 hierarchy
1513 class L { int ii; };
1514 class A : L { ... };
1515 class B : L { ... };
1516 class C : A, B { ... };
1518 and the declaration
1520 C x;
1522 then the expression
1524 x.A::ii refers to the ii member of the L part of
1525 the A part of the C object named by X. In this case,
1526 DATUM would be x, and BASETYPE would be A.
1528 I used to think that this was nonconformant, that the standard specified
1529 that first we look up ii in A, then convert x to an L& and pull out the
1530 ii part. But in fact, it does say that we convert x to an A&; A here
1531 is known as the "naming class". (jason 2000-12-19)
1533 BINFO_P points to a variable initialized either to NULL_TREE or to the
1534 binfo for the specific base subobject we want to convert to. */
1536 tree
1537 build_scoped_ref (tree datum, tree basetype, tree* binfo_p)
1539 tree binfo;
1541 if (datum == error_mark_node)
1542 return error_mark_node;
1543 if (*binfo_p)
1544 binfo = *binfo_p;
1545 else
1546 binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check,
1547 NULL, tf_warning_or_error);
1549 if (!binfo || binfo == error_mark_node)
1551 *binfo_p = NULL_TREE;
1552 if (!binfo)
1553 error_not_base_type (basetype, TREE_TYPE (datum));
1554 return error_mark_node;
1557 *binfo_p = binfo;
1558 return build_base_path (PLUS_EXPR, datum, binfo, 1,
1559 tf_warning_or_error);
1562 /* Build a reference to an object specified by the C++ `->' operator.
1563 Usually this just involves dereferencing the object, but if the
1564 `->' operator is overloaded, then such overloads must be
1565 performed until an object which does not have the `->' operator
1566 overloaded is found. An error is reported when circular pointer
1567 delegation is detected. */
1569 tree
1570 build_x_arrow (location_t loc, tree expr, tsubst_flags_t complain)
1572 tree orig_expr = expr;
1573 tree type = TREE_TYPE (expr);
1574 tree last_rval = NULL_TREE;
1575 vec<tree, va_gc> *types_memoized = NULL;
1577 if (type == error_mark_node)
1578 return error_mark_node;
1580 if (processing_template_decl)
1582 if (type_dependent_expression_p (expr))
1583 return build_min_nt_loc (loc, ARROW_EXPR, expr);
1584 expr = build_non_dependent_expr (expr);
1587 if (MAYBE_CLASS_TYPE_P (type))
1589 struct tinst_level *actual_inst = current_instantiation ();
1590 tree fn = NULL;
1592 while ((expr = build_new_op (loc, COMPONENT_REF,
1593 LOOKUP_NORMAL, expr, NULL_TREE, NULL_TREE,
1594 &fn, complain)))
1596 if (expr == error_mark_node)
1597 return error_mark_node;
1599 if (fn && DECL_USE_TEMPLATE (fn))
1600 push_tinst_level (fn);
1601 fn = NULL;
1603 if (vec_member (TREE_TYPE (expr), types_memoized))
1605 if (complain & tf_error)
1606 error ("circular pointer delegation detected");
1607 return error_mark_node;
1610 vec_safe_push (types_memoized, TREE_TYPE (expr));
1611 last_rval = expr;
1614 while (current_instantiation () != actual_inst)
1615 pop_tinst_level ();
1617 if (last_rval == NULL_TREE)
1619 if (complain & tf_error)
1620 error ("base operand of %<->%> has non-pointer type %qT", type);
1621 return error_mark_node;
1624 if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1625 last_rval = convert_from_reference (last_rval);
1627 else
1628 last_rval = decay_conversion (expr, complain);
1630 if (TYPE_PTR_P (TREE_TYPE (last_rval)))
1632 if (processing_template_decl)
1634 expr = build_min (ARROW_EXPR, TREE_TYPE (TREE_TYPE (last_rval)),
1635 orig_expr);
1636 TREE_SIDE_EFFECTS (expr) = TREE_SIDE_EFFECTS (last_rval);
1637 return expr;
1640 return cp_build_indirect_ref (last_rval, RO_NULL, complain);
1643 if (complain & tf_error)
1645 if (types_memoized)
1646 error ("result of %<operator->()%> yields non-pointer result");
1647 else
1648 error ("base operand of %<->%> is not a pointer");
1650 return error_mark_node;
1653 /* Return an expression for "DATUM .* COMPONENT". DATUM has not
1654 already been checked out to be of aggregate type. */
1656 tree
1657 build_m_component_ref (tree datum, tree component, tsubst_flags_t complain)
1659 tree ptrmem_type;
1660 tree objtype;
1661 tree type;
1662 tree binfo;
1663 tree ctype;
1665 if (error_operand_p (datum) || error_operand_p (component))
1666 return error_mark_node;
1668 datum = mark_lvalue_use (datum);
1669 component = mark_rvalue_use (component);
1671 ptrmem_type = TREE_TYPE (component);
1672 if (!TYPE_PTRMEM_P (ptrmem_type))
1674 if (complain & tf_error)
1675 error ("%qE cannot be used as a member pointer, since it is of "
1676 "type %qT", component, ptrmem_type);
1677 return error_mark_node;
1680 objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
1681 if (! MAYBE_CLASS_TYPE_P (objtype))
1683 if (complain & tf_error)
1684 error ("cannot apply member pointer %qE to %qE, which is of "
1685 "non-class type %qT", component, datum, objtype);
1686 return error_mark_node;
1689 type = TYPE_PTRMEM_POINTED_TO_TYPE (ptrmem_type);
1690 ctype = complete_type (TYPE_PTRMEM_CLASS_TYPE (ptrmem_type));
1692 if (!COMPLETE_TYPE_P (ctype))
1694 if (!same_type_p (ctype, objtype))
1695 goto mismatch;
1696 binfo = NULL;
1698 else
1700 binfo = lookup_base (objtype, ctype, ba_check, NULL, complain);
1702 if (!binfo)
1704 mismatch:
1705 if (complain & tf_error)
1706 error ("pointer to member type %qT incompatible with object "
1707 "type %qT", type, objtype);
1708 return error_mark_node;
1710 else if (binfo == error_mark_node)
1711 return error_mark_node;
1714 if (TYPE_PTRDATAMEM_P (ptrmem_type))
1716 cp_lvalue_kind kind = lvalue_kind (datum);
1717 tree ptype;
1719 /* Compute the type of the field, as described in [expr.ref].
1720 There's no such thing as a mutable pointer-to-member, so
1721 things are not as complex as they are for references to
1722 non-static data members. */
1723 type = cp_build_qualified_type (type,
1724 (cp_type_quals (type)
1725 | cp_type_quals (TREE_TYPE (datum))));
1727 datum = build_address (datum);
1729 /* Convert object to the correct base. */
1730 if (binfo)
1732 datum = build_base_path (PLUS_EXPR, datum, binfo, 1, complain);
1733 if (datum == error_mark_node)
1734 return error_mark_node;
1737 /* Build an expression for "object + offset" where offset is the
1738 value stored in the pointer-to-data-member. */
1739 ptype = build_pointer_type (type);
1740 datum = fold_build_pointer_plus (fold_convert (ptype, datum), component);
1741 datum = cp_build_indirect_ref (datum, RO_NULL, complain);
1742 if (datum == error_mark_node)
1743 return error_mark_node;
1745 /* If the object expression was an rvalue, return an rvalue. */
1746 if (kind & clk_class)
1747 datum = rvalue (datum);
1748 else if (kind & clk_rvalueref)
1749 datum = move (datum);
1750 return datum;
1752 else
1754 /* 5.5/6: In a .* expression whose object expression is an rvalue, the
1755 program is ill-formed if the second operand is a pointer to member
1756 function with ref-qualifier &. In a .* expression whose object
1757 expression is an lvalue, the program is ill-formed if the second
1758 operand is a pointer to member function with ref-qualifier &&. */
1759 if (FUNCTION_REF_QUALIFIED (type))
1761 bool lval = real_lvalue_p (datum);
1762 if (lval && FUNCTION_RVALUE_QUALIFIED (type))
1764 if (complain & tf_error)
1765 error ("pointer-to-member-function type %qT requires an rvalue",
1766 ptrmem_type);
1767 return error_mark_node;
1769 else if (!lval && !FUNCTION_RVALUE_QUALIFIED (type))
1771 if (complain & tf_error)
1772 error ("pointer-to-member-function type %qT requires an lvalue",
1773 ptrmem_type);
1774 return error_mark_node;
1777 return build2 (OFFSET_REF, type, datum, component);
1781 /* Return a tree node for the expression TYPENAME '(' PARMS ')'. */
1783 tree
1784 build_functional_cast (tree exp, tree parms, tsubst_flags_t complain)
1786 /* This is either a call to a constructor,
1787 or a C cast in C++'s `functional' notation. */
1789 /* The type to which we are casting. */
1790 tree type;
1791 vec<tree, va_gc> *parmvec;
1793 if (error_operand_p (exp) || parms == error_mark_node)
1794 return error_mark_node;
1796 if (TREE_CODE (exp) == TYPE_DECL)
1798 type = TREE_TYPE (exp);
1800 if (complain & tf_warning
1801 && TREE_DEPRECATED (type)
1802 && DECL_ARTIFICIAL (exp))
1803 warn_deprecated_use (type, NULL_TREE);
1805 else
1806 type = exp;
1808 /* We need to check this explicitly, since value-initialization of
1809 arrays is allowed in other situations. */
1810 if (TREE_CODE (type) == ARRAY_TYPE)
1812 if (complain & tf_error)
1813 error ("functional cast to array type %qT", type);
1814 return error_mark_node;
1817 if (type_uses_auto (type))
1819 if (complain & tf_error)
1820 error ("invalid use of %<auto%>");
1821 return error_mark_node;
1824 if (processing_template_decl)
1826 tree t;
1828 /* Diagnose this even in a template. We could also try harder
1829 to give all the usual errors when the type and args are
1830 non-dependent... */
1831 if (TREE_CODE (type) == REFERENCE_TYPE && !parms)
1833 if (complain & tf_error)
1834 error ("invalid value-initialization of reference type");
1835 return error_mark_node;
1838 t = build_min (CAST_EXPR, type, parms);
1839 /* We don't know if it will or will not have side effects. */
1840 TREE_SIDE_EFFECTS (t) = 1;
1841 return t;
1844 if (! MAYBE_CLASS_TYPE_P (type))
1846 if (parms == NULL_TREE)
1848 if (VOID_TYPE_P (type))
1849 return void_zero_node;
1850 return build_value_init (cv_unqualified (type), complain);
1853 /* This must build a C cast. */
1854 parms = build_x_compound_expr_from_list (parms, ELK_FUNC_CAST, complain);
1855 return cp_build_c_cast (type, parms, complain);
1858 /* Prepare to evaluate as a call to a constructor. If this expression
1859 is actually used, for example,
1861 return X (arg1, arg2, ...);
1863 then the slot being initialized will be filled in. */
1865 if (!complete_type_or_maybe_complain (type, NULL_TREE, complain))
1866 return error_mark_node;
1867 if (abstract_virtuals_error_sfinae (ACU_CAST, type, complain))
1868 return error_mark_node;
1870 /* [expr.type.conv]
1872 If the expression list is a single-expression, the type
1873 conversion is equivalent (in definedness, and if defined in
1874 meaning) to the corresponding cast expression. */
1875 if (parms && TREE_CHAIN (parms) == NULL_TREE)
1876 return cp_build_c_cast (type, TREE_VALUE (parms), complain);
1878 /* [expr.type.conv]
1880 The expression T(), where T is a simple-type-specifier for a
1881 non-array complete object type or the (possibly cv-qualified)
1882 void type, creates an rvalue of the specified type, which is
1883 value-initialized. */
1885 if (parms == NULL_TREE)
1887 exp = build_value_init (type, complain);
1888 exp = get_target_expr_sfinae (exp, complain);
1889 return exp;
1892 /* Call the constructor. */
1893 parmvec = make_tree_vector ();
1894 for (; parms != NULL_TREE; parms = TREE_CHAIN (parms))
1895 vec_safe_push (parmvec, TREE_VALUE (parms));
1896 exp = build_special_member_call (NULL_TREE, complete_ctor_identifier,
1897 &parmvec, type, LOOKUP_NORMAL, complain);
1898 release_tree_vector (parmvec);
1900 if (exp == error_mark_node)
1901 return error_mark_node;
1903 return build_cplus_new (type, exp, complain);
1907 /* Add new exception specifier SPEC, to the LIST we currently have.
1908 If it's already in LIST then do nothing.
1909 Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1910 know what we're doing. */
1912 tree
1913 add_exception_specifier (tree list, tree spec, int complain)
1915 bool ok;
1916 tree core = spec;
1917 bool is_ptr;
1918 diagnostic_t diag_type = DK_UNSPECIFIED; /* none */
1920 if (spec == error_mark_node)
1921 return list;
1923 gcc_assert (spec && (!list || TREE_VALUE (list)));
1925 /* [except.spec] 1, type in an exception specifier shall not be
1926 incomplete, or pointer or ref to incomplete other than pointer
1927 to cv void. */
1928 is_ptr = TYPE_PTR_P (core);
1929 if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1930 core = TREE_TYPE (core);
1931 if (complain < 0)
1932 ok = true;
1933 else if (VOID_TYPE_P (core))
1934 ok = is_ptr;
1935 else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1936 ok = true;
1937 else if (processing_template_decl)
1938 ok = true;
1939 else
1941 ok = true;
1942 /* 15.4/1 says that types in an exception specifier must be complete,
1943 but it seems more reasonable to only require this on definitions
1944 and calls. So just give a pedwarn at this point; we will give an
1945 error later if we hit one of those two cases. */
1946 if (!COMPLETE_TYPE_P (complete_type (core)))
1947 diag_type = DK_PEDWARN; /* pedwarn */
1950 if (ok)
1952 tree probe;
1954 for (probe = list; probe; probe = TREE_CHAIN (probe))
1955 if (same_type_p (TREE_VALUE (probe), spec))
1956 break;
1957 if (!probe)
1958 list = tree_cons (NULL_TREE, spec, list);
1960 else
1961 diag_type = DK_ERROR; /* error */
1963 if (diag_type != DK_UNSPECIFIED
1964 && (complain & tf_warning_or_error))
1965 cxx_incomplete_type_diagnostic (NULL_TREE, core, diag_type);
1967 return list;
1970 /* Like nothrow_spec_p, but don't abort on deferred noexcept. */
1972 static bool
1973 nothrow_spec_p_uninst (const_tree spec)
1975 if (DEFERRED_NOEXCEPT_SPEC_P (spec))
1976 return false;
1977 return nothrow_spec_p (spec);
1980 /* Combine the two exceptions specifier lists LIST and ADD, and return
1981 their union. If FN is non-null, it's the source of ADD. */
1983 tree
1984 merge_exception_specifiers (tree list, tree add, tree fn)
1986 tree noex, orig_list;
1988 /* No exception-specifier or noexcept(false) are less strict than
1989 anything else. Prefer the newer variant (LIST). */
1990 if (!list || list == noexcept_false_spec)
1991 return list;
1992 else if (!add || add == noexcept_false_spec)
1993 return add;
1995 /* noexcept(true) and throw() are stricter than anything else.
1996 As above, prefer the more recent one (LIST). */
1997 if (nothrow_spec_p_uninst (add))
1998 return list;
2000 noex = TREE_PURPOSE (list);
2001 if (DEFERRED_NOEXCEPT_SPEC_P (add))
2003 /* If ADD is a deferred noexcept, we must have been called from
2004 process_subob_fn. For implicitly declared functions, we build up
2005 a list of functions to consider at instantiation time. */
2006 if (noex && operand_equal_p (noex, boolean_true_node, 0))
2007 noex = NULL_TREE;
2008 gcc_assert (fn && (!noex || is_overloaded_fn (noex)));
2009 noex = build_overload (fn, noex);
2011 else if (nothrow_spec_p_uninst (list))
2012 return add;
2013 else
2014 gcc_checking_assert (!TREE_PURPOSE (add)
2015 || cp_tree_equal (noex, TREE_PURPOSE (add)));
2017 /* Combine the dynamic-exception-specifiers, if any. */
2018 orig_list = list;
2019 for (; add && TREE_VALUE (add); add = TREE_CHAIN (add))
2021 tree spec = TREE_VALUE (add);
2022 tree probe;
2024 for (probe = orig_list; probe && TREE_VALUE (probe);
2025 probe = TREE_CHAIN (probe))
2026 if (same_type_p (TREE_VALUE (probe), spec))
2027 break;
2028 if (!probe)
2030 spec = build_tree_list (NULL_TREE, spec);
2031 TREE_CHAIN (spec) = list;
2032 list = spec;
2036 /* Keep the noexcept-specifier at the beginning of the list. */
2037 if (noex != TREE_PURPOSE (list))
2038 list = tree_cons (noex, TREE_VALUE (list), TREE_CHAIN (list));
2040 return list;
2043 /* Subroutine of build_call. Ensure that each of the types in the
2044 exception specification is complete. Technically, 15.4/1 says that
2045 they need to be complete when we see a declaration of the function,
2046 but we should be able to get away with only requiring this when the
2047 function is defined or called. See also add_exception_specifier. */
2049 void
2050 require_complete_eh_spec_types (tree fntype, tree decl)
2052 tree raises;
2053 /* Don't complain about calls to op new. */
2054 if (decl && DECL_ARTIFICIAL (decl))
2055 return;
2056 for (raises = TYPE_RAISES_EXCEPTIONS (fntype); raises;
2057 raises = TREE_CHAIN (raises))
2059 tree type = TREE_VALUE (raises);
2060 if (type && !COMPLETE_TYPE_P (type))
2062 if (decl)
2063 error
2064 ("call to function %qD which throws incomplete type %q#T",
2065 decl, type);
2066 else
2067 error ("call to function which throws incomplete type %q#T",
2068 decl);
2074 #include "gt-cp-typeck2.h"