1 /* Report error messages, build initializers, and perform
2 some front-end optimizations for C++ compiler.
3 Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
4 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009, 2010
5 Free Software Foundation, Inc.
6 Hacked by Michael Tiemann (tiemann@cygnus.com)
8 This file is part of GCC.
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3. If not see
22 <http://www.gnu.org/licenses/>. */
25 /* This file is part of the C++ front end.
26 It contains routines to build C++ expressions given their operands,
27 including computing the types of the result, C and C++ specific error
28 checks, and some optimization. */
32 #include "coretypes.h"
39 #include "diagnostic-core.h"
42 process_init_constructor (tree type, tree init);
45 /* Print an error message stemming from an attempt to use
46 BASETYPE as a base class for TYPE. */
49 error_not_base_type (tree basetype, tree type)
51 if (TREE_CODE (basetype) == FUNCTION_DECL)
52 basetype = DECL_CONTEXT (basetype);
53 error ("type %qT is not a base type for type %qT", basetype, type);
54 return error_mark_node;
58 binfo_or_else (tree base, tree type)
60 tree binfo = lookup_base (type, base, ba_unique, NULL);
62 if (binfo == error_mark_node)
65 error_not_base_type (base, type);
69 /* According to ARM $7.1.6, "A `const' object may be initialized, but its
70 value may not be changed thereafter. */
73 readonly_error (tree arg, readonly_error_kind 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
80 #define ERROR_FOR_ASSIGNMENT(AS, ASM, IN, DE, ARG) \
84 case REK_ASSIGNMENT: \
87 case REK_ASSIGNMENT_ASM: \
101 if (TREE_CODE (arg) == COMPONENT_REF)
103 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
104 ERROR_FOR_ASSIGNMENT (G_("assignment of "
105 "data-member %qD in read-only structure"),
106 G_("assignment (via 'asm' output) of "
107 "data-member %qD in read-only structure"),
109 "data-member %qD in read-only structure"),
111 "data-member %qD in read-only structure"),
112 TREE_OPERAND (arg, 1));
114 ERROR_FOR_ASSIGNMENT (G_("assignment of "
115 "read-only data-member %qD"),
116 G_("assignment (via 'asm' output) of "
117 "read-only data-member %qD"),
119 "read-only data-member %qD"),
121 "read-only data-member %qD"),
122 TREE_OPERAND (arg, 1));
124 else if (TREE_CODE (arg) == VAR_DECL)
126 if (DECL_LANG_SPECIFIC (arg)
127 && DECL_IN_AGGR_P (arg)
128 && !TREE_STATIC (arg))
129 ERROR_FOR_ASSIGNMENT (G_("assignment of "
130 "constant field %qD"),
131 G_("assignment (via 'asm' output) of "
132 "constant field %qD"),
134 "constant field %qD"),
136 "constant field %qD"),
139 ERROR_FOR_ASSIGNMENT (G_("assignment of "
140 "read-only variable %qD"),
141 G_("assignment (via 'asm' output) of "
142 "read-only variable %qD"),
144 "read-only variable %qD"),
146 "read-only variable %qD"),
150 else if (TREE_CODE (arg) == PARM_DECL)
151 ERROR_FOR_ASSIGNMENT (G_("assignment of "
152 "read-only parameter %qD"),
153 G_("assignment (via 'asm' output) of "
154 "read-only parameter %qD"),
156 "read-only parameter %qD"),
158 "read-only parameter %qD"),
160 else if (TREE_CODE (arg) == INDIRECT_REF
161 && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
162 && (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL
163 || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
164 ERROR_FOR_ASSIGNMENT (G_("assignment of "
165 "read-only reference %qD"),
166 G_("assignment (via 'asm' output) of "
167 "read-only reference %qD"),
169 "read-only reference %qD"),
171 "read-only reference %qD"),
172 TREE_OPERAND (arg, 0));
173 else if (TREE_CODE (arg) == RESULT_DECL)
174 ERROR_FOR_ASSIGNMENT (G_("assignment of "
175 "read-only named return value %qD"),
176 G_("assignment (via 'asm' output) of "
177 "read-only named return value %qD"),
179 "read-only named return value %qD"),
181 "read-only named return value %qD"),
183 else if (TREE_CODE (arg) == FUNCTION_DECL)
184 ERROR_FOR_ASSIGNMENT (G_("assignment of "
186 G_("assignment (via 'asm' output) of "
194 ERROR_FOR_ASSIGNMENT (G_("assignment of "
195 "read-only location %qE"),
196 G_("assignment (via 'asm' output) of "
197 "read-only location %qE"),
199 "read-only location %qE"),
201 "read-only location %qE"),
206 /* Structure that holds information about declarations whose type was
207 incomplete and we could not check whether it was abstract or not. */
209 struct GTY((chain_next ("%h.next"))) pending_abstract_type {
210 /* Declaration which we are checking for abstractness. It is either
211 a DECL node, or an IDENTIFIER_NODE if we do not have a full
212 declaration available. */
215 /* Type which will be checked for abstractness. */
218 /* Position of the declaration. This is only needed for IDENTIFIER_NODEs,
219 because DECLs already carry locus information. */
222 /* Link to the next element in list. */
223 struct pending_abstract_type* next;
227 /* Compute the hash value of the node VAL. This function is used by the
228 hash table abstract_pending_vars. */
231 pat_calc_hash (const void* val)
233 const struct pending_abstract_type *pat =
234 (const struct pending_abstract_type *) val;
235 return (hashval_t) TYPE_UID (pat->type);
239 /* Compare node VAL1 with the type VAL2. This function is used by the
240 hash table abstract_pending_vars. */
243 pat_compare (const void* val1, const void* val2)
245 const struct pending_abstract_type *const pat1 =
246 (const struct pending_abstract_type *) val1;
247 const_tree const type2 = (const_tree)val2;
249 return (pat1->type == type2);
252 /* Hash table that maintains pending_abstract_type nodes, for which we still
253 need to check for type abstractness. The key of the table is the type
254 of the declaration. */
255 static GTY ((param_is (struct pending_abstract_type)))
256 htab_t abstract_pending_vars = NULL;
259 /* This function is called after TYPE is completed, and will check if there
260 are pending declarations for which we still need to verify the abstractness
261 of TYPE, and emit a diagnostic (through abstract_virtuals_error) if TYPE
262 turned out to be incomplete. */
265 complete_type_check_abstract (tree type)
268 struct pending_abstract_type *pat;
269 location_t cur_loc = input_location;
271 gcc_assert (COMPLETE_TYPE_P (type));
273 if (!abstract_pending_vars)
276 /* Retrieve the list of pending declarations for this type. */
277 slot = htab_find_slot_with_hash (abstract_pending_vars, type,
278 (hashval_t)TYPE_UID (type), NO_INSERT);
281 pat = (struct pending_abstract_type*)*slot;
284 /* If the type is not abstract, do not do anything. */
285 if (CLASSTYPE_PURE_VIRTUALS (type))
287 struct pending_abstract_type *prev = 0, *next;
289 /* Reverse the list to emit the errors in top-down order. */
290 for (; pat; pat = next)
298 /* Go through the list, and call abstract_virtuals_error for each
299 element: it will issue a diagnostic if the type is abstract. */
302 gcc_assert (type == pat->type);
304 /* Tweak input_location so that the diagnostic appears at the correct
305 location. Notice that this is only needed if the decl is an
307 input_location = pat->locus;
308 abstract_virtuals_error (pat->decl, pat->type);
313 htab_clear_slot (abstract_pending_vars, slot);
315 input_location = cur_loc;
319 /* If TYPE has abstract virtual functions, issue an error about trying
320 to create an object of that type. DECL is the object declared, or
321 NULL_TREE if the declaration is unavailable. Returns 1 if an error
322 occurred; zero if all was well. */
325 abstract_virtuals_error (tree decl, tree type)
329 /* This function applies only to classes. Any other entity can never
331 if (!CLASS_TYPE_P (type))
333 type = TYPE_MAIN_VARIANT (type);
335 /* If the type is incomplete, we register it within a hash table,
336 so that we can check again once it is completed. This makes sense
337 only for objects for which we have a declaration or at least a
339 if (!COMPLETE_TYPE_P (type))
342 struct pending_abstract_type *pat;
344 gcc_assert (!decl || DECL_P (decl)
345 || TREE_CODE (decl) == IDENTIFIER_NODE);
347 if (!abstract_pending_vars)
348 abstract_pending_vars = htab_create_ggc (31, &pat_calc_hash,
351 slot = htab_find_slot_with_hash (abstract_pending_vars, type,
352 (hashval_t)TYPE_UID (type), INSERT);
354 pat = ggc_alloc_pending_abstract_type ();
357 pat->locus = ((decl && DECL_P (decl))
358 ? DECL_SOURCE_LOCATION (decl)
361 pat->next = (struct pending_abstract_type *) *slot;
367 if (!TYPE_SIZE (type))
368 /* TYPE is being defined, and during that time
369 CLASSTYPE_PURE_VIRTUALS holds the inline friends. */
372 pure = CLASSTYPE_PURE_VIRTUALS (type);
378 if (TREE_CODE (decl) == RESULT_DECL)
381 if (TREE_CODE (decl) == VAR_DECL)
382 error ("cannot declare variable %q+D to be of abstract "
383 "type %qT", decl, type);
384 else if (TREE_CODE (decl) == PARM_DECL)
385 error ("cannot declare parameter %q+D to be of abstract type %qT",
387 else if (TREE_CODE (decl) == FIELD_DECL)
388 error ("cannot declare field %q+D to be of abstract type %qT",
390 else if (TREE_CODE (decl) == FUNCTION_DECL
391 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
392 error ("invalid abstract return type for member function %q+#D", decl);
393 else if (TREE_CODE (decl) == FUNCTION_DECL)
394 error ("invalid abstract return type for function %q+#D", decl);
395 else if (TREE_CODE (decl) == IDENTIFIER_NODE)
396 /* Here we do not have location information. */
397 error ("invalid abstract type %qT for %qE", type, decl);
399 error ("invalid abstract type for %q+D", decl);
402 error ("cannot allocate an object of abstract type %qT", type);
404 /* Only go through this once. */
405 if (VEC_length (tree, pure))
410 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
411 " because the following virtual functions are pure within %qT:",
414 FOR_EACH_VEC_ELT (tree, pure, ix, fn)
415 inform (input_location, "\t%+#D", fn);
416 /* Now truncate the vector. This leaves it non-null, so we know
417 there are pure virtuals, but empty so we don't list them out
419 VEC_truncate (tree, pure, 0);
422 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
423 " since type %qT has pure virtual functions",
429 /* Print an error message for invalid use of an incomplete type.
430 VALUE is the expression that was used (or 0 if that isn't known)
431 and TYPE is the type that was invalid. DIAG_KIND indicates the
432 type of diagnostic (see diagnostic.def). */
435 cxx_incomplete_type_diagnostic (const_tree value, const_tree type,
436 diagnostic_t diag_kind)
440 gcc_assert (diag_kind == DK_WARNING
441 || diag_kind == DK_PEDWARN
442 || diag_kind == DK_ERROR);
444 /* Avoid duplicate error message. */
445 if (TREE_CODE (type) == ERROR_MARK)
448 if (value != 0 && (TREE_CODE (value) == VAR_DECL
449 || TREE_CODE (value) == PARM_DECL
450 || TREE_CODE (value) == FIELD_DECL))
452 emit_diagnostic (diag_kind, input_location, 0,
453 "%q+D has incomplete type", value);
457 /* We must print an error message. Be clever about what it says. */
459 switch (TREE_CODE (type))
465 emit_diagnostic (diag_kind, input_location, 0,
466 "invalid use of incomplete type %q#T", type);
467 if (!TYPE_TEMPLATE_INFO (type))
468 emit_diagnostic (diag_kind, input_location, 0,
469 "forward declaration of %q+#T", type);
471 emit_diagnostic (diag_kind, input_location, 0,
472 "declaration of %q+#T", type);
476 emit_diagnostic (diag_kind, input_location, 0,
477 "invalid use of %qT", type);
481 if (TYPE_DOMAIN (type))
483 type = TREE_TYPE (type);
486 emit_diagnostic (diag_kind, input_location, 0,
487 "invalid use of array with unspecified bounds");
492 emit_diagnostic (diag_kind, input_location, 0,
493 "invalid use of member (did you forget the %<&%> ?)");
496 case TEMPLATE_TYPE_PARM:
498 emit_diagnostic (diag_kind, input_location, 0,
499 "invalid use of %<auto%>");
501 emit_diagnostic (diag_kind, input_location, 0,
502 "invalid use of template type parameter %qT", type);
505 case BOUND_TEMPLATE_TEMPLATE_PARM:
506 emit_diagnostic (diag_kind, input_location, 0,
507 "invalid use of template template parameter %qT",
512 emit_diagnostic (diag_kind, input_location, 0,
513 "invalid use of dependent type %qT", type);
517 gcc_assert (type == unknown_type_node);
518 if (value && TREE_CODE (value) == COMPONENT_REF)
520 else if (value && TREE_CODE (value) == ADDR_EXPR)
521 emit_diagnostic (diag_kind, input_location, 0,
522 "address of overloaded function with no contextual "
524 else if (value && TREE_CODE (value) == OVERLOAD)
525 emit_diagnostic (diag_kind, input_location, 0,
526 "overloaded function with no contextual type information");
528 emit_diagnostic (diag_kind, input_location, 0,
529 "insufficient contextual information to determine type");
537 /* Backward-compatibility interface to incomplete_type_diagnostic;
538 required by ../tree.c. */
539 #undef cxx_incomplete_type_error
541 cxx_incomplete_type_error (const_tree value, const_tree type)
543 cxx_incomplete_type_diagnostic (value, type, DK_ERROR);
547 /* The recursive part of split_nonconstant_init. DEST is an lvalue
548 expression to which INIT should be assigned. INIT is a CONSTRUCTOR. */
551 split_nonconstant_init_1 (tree dest, tree *initp)
553 unsigned HOST_WIDE_INT idx;
555 tree field_index, value;
556 tree type = TREE_TYPE (dest);
557 tree inner_type = NULL;
558 bool array_type_p = false;
559 HOST_WIDE_INT num_type_elements, num_initialized_elements;
561 switch (TREE_CODE (type))
564 inner_type = TREE_TYPE (type);
570 case QUAL_UNION_TYPE:
571 num_initialized_elements = 0;
572 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init), idx,
575 /* The current implementation of this algorithm assumes that
576 the field was set for all the elements. This is usually done
577 by process_init_constructor. */
578 gcc_assert (field_index);
581 inner_type = TREE_TYPE (field_index);
583 if (TREE_CODE (value) == CONSTRUCTOR)
588 sub = build4 (ARRAY_REF, inner_type, dest, field_index,
589 NULL_TREE, NULL_TREE);
591 sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
594 split_nonconstant_init_1 (sub, &value);
596 else if (!initializer_constant_valid_p (value, inner_type))
600 HOST_WIDE_INT inner_elements;
602 /* FIXME: Ordered removal is O(1) so the whole function is
603 worst-case quadratic. This could be fixed using an aside
604 bitmap to record which elements must be removed and remove
605 them all at the same time. Or by merging
606 split_non_constant_init into process_init_constructor_array,
607 that is separating constants from non-constants while building
609 VEC_ordered_remove (constructor_elt, CONSTRUCTOR_ELTS (init),
614 sub = build4 (ARRAY_REF, inner_type, dest, field_index,
615 NULL_TREE, NULL_TREE);
617 sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
620 code = build2 (INIT_EXPR, inner_type, sub, value);
621 code = build_stmt (input_location, EXPR_STMT, code);
624 inner_elements = count_type_elements (inner_type, true);
625 if (inner_elements < 0)
626 num_initialized_elements = -1;
627 else if (num_initialized_elements >= 0)
628 num_initialized_elements += inner_elements;
633 num_type_elements = count_type_elements (type, true);
634 /* If all elements of the initializer are non-constant and
635 have been split out, we don't need the empty CONSTRUCTOR. */
636 if (num_type_elements > 0
637 && num_type_elements == num_initialized_elements)
642 if (!initializer_constant_valid_p (init, type))
645 tree cons = copy_node (init);
646 CONSTRUCTOR_ELTS (init) = NULL;
647 code = build2 (MODIFY_EXPR, type, dest, cons);
648 code = build_stmt (input_location, EXPR_STMT, code);
657 /* The rest of the initializer is now a constant. */
658 TREE_CONSTANT (init) = 1;
661 /* A subroutine of store_init_value. Splits non-constant static
662 initializer INIT into a constant part and generates code to
663 perform the non-constant part of the initialization to DEST.
664 Returns the code for the runtime init. */
667 split_nonconstant_init (tree dest, tree init)
671 if (TREE_CODE (init) == CONSTRUCTOR)
673 code = push_stmt_list ();
674 split_nonconstant_init_1 (dest, &init);
675 code = pop_stmt_list (code);
676 DECL_INITIAL (dest) = init;
677 TREE_READONLY (dest) = 0;
680 code = build2 (INIT_EXPR, TREE_TYPE (dest), dest, init);
685 /* Perform appropriate conversions on the initial value of a variable,
686 store it in the declaration DECL,
687 and print any error messages that are appropriate.
688 If the init is invalid, store an ERROR_MARK.
690 C++: Note that INIT might be a TREE_LIST, which would mean that it is
691 a base class initializer for some aggregate type, hopefully compatible
692 with DECL. If INIT is a single element, and DECL is an aggregate
693 type, we silently convert INIT into a TREE_LIST, allowing a constructor
696 If INIT is a TREE_LIST and there is no constructor, turn INIT
697 into a CONSTRUCTOR and use standard initialization techniques.
698 Perhaps a warning should be generated?
700 Returns code to be executed if initialization could not be performed
701 for static variable. In that case, caller must emit the code. */
704 store_init_value (tree decl, tree init, int flags)
708 /* If variable's type was invalidly declared, just ignore it. */
710 type = TREE_TYPE (decl);
711 if (TREE_CODE (type) == ERROR_MARK)
714 if (MAYBE_CLASS_TYPE_P (type))
716 if (TREE_CODE (init) == TREE_LIST)
718 error ("constructor syntax used, but no constructor declared "
719 "for type %qT", type);
720 init = build_constructor_from_list (init_list_type_node, nreverse (init));
723 else if (TREE_CODE (init) == TREE_LIST
724 && TREE_TYPE (init) != unknown_type_node)
726 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
728 if (TREE_CODE (init) == TREE_LIST
729 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
731 error ("cannot initialize arrays using this syntax");
735 /* We get here with code like `int a (2);' */
736 init = build_x_compound_expr_from_list (init, ELK_INIT,
737 tf_warning_or_error);
740 /* End of special C++ code. */
742 if (flags & LOOKUP_ALREADY_DIGESTED)
745 /* Digest the specified initializer into an expression. */
746 value = digest_init_flags (type, init, flags);
748 /* In C++0x constant expression is a semantic, not syntactic, property.
749 In C++98, make sure that what we thought was a constant expression at
750 template definition time is still constant. */
751 if ((cxx_dialect >= cxx0x
752 || DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl))
753 && (decl_maybe_constant_var_p (decl)
754 || TREE_STATIC (decl)))
757 value = fold_non_dependent_expr (value);
758 value = maybe_constant_init (value);
759 if (DECL_DECLARED_CONSTEXPR_P (decl))
760 /* Diagnose a non-constant initializer for constexpr. */
761 value = cxx_constant_value (value);
762 const_init = (reduced_constant_expression_p (value)
763 || error_operand_p (value));
764 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = const_init;
765 TREE_CONSTANT (decl) = const_init && decl_maybe_constant_var_p (decl);
768 /* If the initializer is not a constant, fill in DECL_INITIAL with
769 the bits that are constant, and then return an expression that
770 will perform the dynamic initialization. */
771 if (value != error_mark_node
772 && (TREE_SIDE_EFFECTS (value)
773 || ! initializer_constant_valid_p (value, TREE_TYPE (value))))
774 return split_nonconstant_init (decl, value);
775 /* If the value is a constant, just put it in DECL_INITIAL. If DECL
776 is an automatic variable, the middle end will turn this into a
777 dynamic initialization later. */
778 DECL_INITIAL (decl) = value;
783 /* Give errors about narrowing conversions within { }. */
786 check_narrowing (tree type, tree init)
788 tree ftype = unlowered_expr_type (init);
792 init = maybe_constant_value (init);
794 if (TREE_CODE (type) == INTEGER_TYPE
795 && TREE_CODE (ftype) == REAL_TYPE)
797 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (ftype)
798 && CP_INTEGRAL_TYPE_P (type))
800 if (TYPE_PRECISION (type) < TYPE_PRECISION (ftype)
801 && (TREE_CODE (init) != INTEGER_CST
802 || !int_fits_type_p (init, type)))
805 else if (TREE_CODE (ftype) == REAL_TYPE
806 && TREE_CODE (type) == REAL_TYPE)
808 if (TYPE_PRECISION (type) < TYPE_PRECISION (ftype))
810 if (TREE_CODE (init) == REAL_CST)
812 /* Issue 703: Loss of precision is OK as long as the value is
813 within the representable range of the new type. */
815 d = TREE_REAL_CST (init);
816 real_convert (&r, TYPE_MODE (type), &d);
824 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (ftype)
825 && TREE_CODE (type) == REAL_TYPE)
828 if (TREE_CODE (init) == INTEGER_CST)
830 d = real_value_from_int_cst (0, init);
831 if (exact_real_truncate (TYPE_MODE (type), &d))
837 permerror (input_location, "narrowing conversion of %qE from %qT to %qT inside { }",
841 /* Process the initializer INIT for a variable of type TYPE, emitting
842 diagnostics for invalid initializers and converting the initializer as
845 For aggregate types, it assumes that reshape_init has already run, thus the
846 initializer will have the right shape (brace elision has been undone).
848 NESTED is true iff we are being called for an element of a CONSTRUCTOR. */
851 digest_init_r (tree type, tree init, bool nested, int flags)
853 enum tree_code code = TREE_CODE (type);
855 if (error_operand_p (init))
856 return error_mark_node;
860 /* We must strip the outermost array type when completing the type,
861 because the its bounds might be incomplete at the moment. */
862 if (!complete_type_or_else (TREE_CODE (type) == ARRAY_TYPE
863 ? TREE_TYPE (type) : type, NULL_TREE))
864 return error_mark_node;
866 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue
867 (g++.old-deja/g++.law/casts2.C). */
868 if (TREE_CODE (init) == NON_LVALUE_EXPR)
869 init = TREE_OPERAND (init, 0);
871 /* Initialization of an array of chars from a string constant. The initializer
872 can be optionally enclosed in braces, but reshape_init has already removed
873 them if they were present. */
874 if (code == ARRAY_TYPE)
876 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
877 if (char_type_p (typ1)
879 && TREE_CODE (init) == STRING_CST)
881 tree char_type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (init)));
883 if (TYPE_PRECISION (typ1) == BITS_PER_UNIT)
885 if (char_type != char_type_node)
887 error ("char-array initialized from wide string");
888 return error_mark_node;
893 if (char_type == char_type_node)
895 error ("int-array initialized from non-wide string");
896 return error_mark_node;
898 else if (char_type != typ1)
900 error ("int-array initialized from incompatible wide string");
901 return error_mark_node;
905 TREE_TYPE (init) = type;
906 if (TYPE_DOMAIN (type) != 0 && TREE_CONSTANT (TYPE_SIZE (type)))
908 int size = TREE_INT_CST_LOW (TYPE_SIZE (type));
909 size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
910 /* In C it is ok to subtract 1 from the length of the string
911 because it's ok to ignore the terminating null char that is
912 counted in the length of the constant, but in C++ this would
914 if (size < TREE_STRING_LENGTH (init))
915 permerror (input_location, "initializer-string for array of chars is too long");
921 /* Handle scalar types (including conversions) and references. */
922 if ((TREE_CODE (type) != COMPLEX_TYPE
923 || BRACE_ENCLOSED_INITIALIZER_P (init))
924 && (SCALAR_TYPE_P (type) || code == REFERENCE_TYPE))
928 if (cxx_dialect != cxx98 && nested)
929 check_narrowing (type, init);
930 init = convert_for_initialization (0, type, init, flags,
931 ICR_INIT, NULL_TREE, 0,
932 tf_warning_or_error);
935 /* Skip any conversions since we'll be outputting the underlying
937 while (CONVERT_EXPR_P (*exp)
938 || TREE_CODE (*exp) == NON_LVALUE_EXPR)
939 exp = &TREE_OPERAND (*exp, 0);
941 *exp = cplus_expand_constant (*exp);
946 /* Come here only for aggregates: records, arrays, unions, complex numbers
948 gcc_assert (TREE_CODE (type) == ARRAY_TYPE
949 || TREE_CODE (type) == VECTOR_TYPE
950 || TREE_CODE (type) == RECORD_TYPE
951 || TREE_CODE (type) == UNION_TYPE
952 || TREE_CODE (type) == COMPLEX_TYPE);
954 if (BRACE_ENCLOSED_INITIALIZER_P (init)
955 && !TYPE_NON_AGGREGATE_CLASS (type))
956 return process_init_constructor (type, init);
959 if (COMPOUND_LITERAL_P (init) && TREE_CODE (type) == ARRAY_TYPE)
961 error ("cannot initialize aggregate of type %qT with "
962 "a compound literal", type);
964 return error_mark_node;
967 if (TREE_CODE (type) == ARRAY_TYPE
968 && !BRACE_ENCLOSED_INITIALIZER_P (init))
970 /* Allow the result of build_array_copy and of
971 build_value_init_noctor. */
972 if ((TREE_CODE (init) == TARGET_EXPR
973 || TREE_CODE (init) == CONSTRUCTOR)
974 && (same_type_ignoring_top_level_qualifiers_p
975 (type, TREE_TYPE (init))))
978 error ("array must be initialized with a brace-enclosed"
980 return error_mark_node;
983 return convert_for_initialization (NULL_TREE, type, init,
985 ICR_INIT, NULL_TREE, 0,
986 tf_warning_or_error);
991 digest_init (tree type, tree init)
993 return digest_init_r (type, init, false, LOOKUP_IMPLICIT);
997 digest_init_flags (tree type, tree init, int flags)
999 return digest_init_r (type, init, false, flags);
1002 /* Set of flags used within process_init_constructor to describe the
1004 #define PICFLAG_ERRONEOUS 1
1005 #define PICFLAG_NOT_ALL_CONSTANT 2
1006 #define PICFLAG_NOT_ALL_SIMPLE 4
1008 /* Given an initializer INIT, return the flag (PICFLAG_*) which better
1012 picflag_from_initializer (tree init)
1014 if (init == error_mark_node)
1015 return PICFLAG_ERRONEOUS;
1016 else if (!TREE_CONSTANT (init))
1017 return PICFLAG_NOT_ALL_CONSTANT;
1018 else if (!initializer_constant_valid_p (init, TREE_TYPE (init)))
1019 return PICFLAG_NOT_ALL_SIMPLE;
1023 /* Subroutine of process_init_constructor, which will process an initializer
1024 INIT for an array or vector of type TYPE. Returns the flags (PICFLAG_*)
1025 which describe the initializers. */
1028 process_init_constructor_array (tree type, tree init)
1030 unsigned HOST_WIDE_INT i, len = 0;
1032 bool unbounded = false;
1033 constructor_elt *ce;
1034 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (init);
1036 gcc_assert (TREE_CODE (type) == ARRAY_TYPE
1037 || TREE_CODE (type) == VECTOR_TYPE);
1039 if (TREE_CODE (type) == ARRAY_TYPE)
1041 tree domain = TYPE_DOMAIN (type);
1043 len = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (domain))
1044 - TREE_INT_CST_LOW (TYPE_MIN_VALUE (domain))
1047 unbounded = true; /* Take as many as there are. */
1050 /* Vectors are like simple fixed-size arrays. */
1051 len = TYPE_VECTOR_SUBPARTS (type);
1053 /* There must not be more initializers than needed. */
1054 if (!unbounded && VEC_length (constructor_elt, v) > len)
1055 error ("too many initializers for %qT", type);
1057 FOR_EACH_VEC_ELT (constructor_elt, v, i, ce)
1061 gcc_assert (TREE_CODE (ce->index) == INTEGER_CST);
1062 if (compare_tree_int (ce->index, i) != 0)
1064 ce->value = error_mark_node;
1065 sorry ("non-trivial designated initializers not supported");
1069 ce->index = size_int (i);
1070 gcc_assert (ce->value);
1071 ce->value = digest_init_r (TREE_TYPE (type), ce->value, true, LOOKUP_IMPLICIT);
1073 if (ce->value != error_mark_node)
1074 gcc_assert (same_type_ignoring_top_level_qualifiers_p
1075 (TREE_TYPE (type), TREE_TYPE (ce->value)));
1077 flags |= picflag_from_initializer (ce->value);
1080 /* No more initializers. If the array is unbounded, we are done. Otherwise,
1081 we must add initializers ourselves. */
1083 for (; i < len; ++i)
1087 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (type)))
1089 /* If this type needs constructors run for default-initialization,
1090 we can't rely on the back end to do it for us, so build up
1091 TARGET_EXPRs. If the type in question is a class, just build
1092 one up; if it's an array, recurse. */
1093 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (type)))
1094 next = build_functional_cast (TREE_TYPE (type), NULL_TREE,
1095 tf_warning_or_error);
1097 next = build_constructor (init_list_type_node, NULL);
1098 next = digest_init (TREE_TYPE (type), next);
1100 else if (!zero_init_p (TREE_TYPE (type)))
1101 next = build_zero_init (TREE_TYPE (type),
1102 /*nelts=*/NULL_TREE,
1103 /*static_storage_p=*/false);
1105 /* The default zero-initialization is fine for us; don't
1106 add anything to the CONSTRUCTOR. */
1109 flags |= picflag_from_initializer (next);
1110 CONSTRUCTOR_APPEND_ELT (v, size_int (i), next);
1113 CONSTRUCTOR_ELTS (init) = v;
1117 /* Subroutine of process_init_constructor, which will process an initializer
1118 INIT for a class of type TYPE. Returns the flags (PICFLAG_*) which describe
1119 the initializers. */
1122 process_init_constructor_record (tree type, tree init)
1124 VEC(constructor_elt,gc) *v = NULL;
1127 unsigned HOST_WIDE_INT idx = 0;
1129 gcc_assert (TREE_CODE (type) == RECORD_TYPE);
1130 gcc_assert (!CLASSTYPE_VBASECLASSES (type));
1131 gcc_assert (!TYPE_BINFO (type)
1132 || !BINFO_N_BASE_BINFOS (TYPE_BINFO (type)));
1133 gcc_assert (!TYPE_POLYMORPHIC_P (type));
1135 /* Generally, we will always have an index for each initializer (which is
1136 a FIELD_DECL, put by reshape_init), but compound literals don't go trough
1137 reshape_init. So we need to handle both cases. */
1138 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
1143 if (!DECL_NAME (field) && DECL_C_BIT_FIELD (field))
1145 flags |= picflag_from_initializer (integer_zero_node);
1146 CONSTRUCTOR_APPEND_ELT (v, field, integer_zero_node);
1150 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
1153 /* If this is a bitfield, first convert to the declared type. */
1154 type = TREE_TYPE (field);
1155 if (DECL_BIT_FIELD_TYPE (field))
1156 type = DECL_BIT_FIELD_TYPE (field);
1158 if (idx < VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)))
1160 constructor_elt *ce = VEC_index (constructor_elt,
1161 CONSTRUCTOR_ELTS (init), idx);
1164 /* We can have either a FIELD_DECL or an IDENTIFIER_NODE. The
1165 latter case can happen in templates where lookup has to be
1167 gcc_assert (TREE_CODE (ce->index) == FIELD_DECL
1168 || TREE_CODE (ce->index) == IDENTIFIER_NODE);
1169 if (ce->index != field
1170 && ce->index != DECL_NAME (field))
1172 ce->value = error_mark_node;
1173 sorry ("non-trivial designated initializers not supported");
1177 gcc_assert (ce->value);
1178 next = digest_init_r (type, ce->value, true, LOOKUP_IMPLICIT);
1181 else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (field)))
1183 /* If this type needs constructors run for
1184 default-initialization, we can't rely on the back end to do it
1185 for us, so build up TARGET_EXPRs. If the type in question is
1186 a class, just build one up; if it's an array, recurse. */
1187 next = build_constructor (init_list_type_node, NULL);
1188 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (field)))
1190 next = finish_compound_literal (TREE_TYPE (field), next);
1191 /* direct-initialize the target. No temporary is going
1193 if (TREE_CODE (next) == TARGET_EXPR)
1194 TARGET_EXPR_DIRECT_INIT_P (next) = true;
1197 next = digest_init_r (TREE_TYPE (field), next, true, LOOKUP_IMPLICIT);
1199 /* Warn when some struct elements are implicitly initialized. */
1200 warning (OPT_Wmissing_field_initializers,
1201 "missing initializer for member %qD", field);
1205 if (TREE_READONLY (field))
1206 error ("uninitialized const member %qD", field);
1207 else if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
1208 error ("member %qD with uninitialized const fields", field);
1209 else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
1210 error ("member %qD is uninitialized reference", field);
1212 /* Warn when some struct elements are implicitly initialized
1214 warning (OPT_Wmissing_field_initializers,
1215 "missing initializer for member %qD", field);
1217 if (!zero_init_p (TREE_TYPE (field)))
1218 next = build_zero_init (TREE_TYPE (field), /*nelts=*/NULL_TREE,
1219 /*static_storage_p=*/false);
1221 /* The default zero-initialization is fine for us; don't
1222 add anything to the CONSTRUCTOR. */
1226 /* If this is a bitfield, now convert to the lowered type. */
1227 if (type != TREE_TYPE (field))
1228 next = cp_convert_and_check (TREE_TYPE (field), next);
1229 flags |= picflag_from_initializer (next);
1230 CONSTRUCTOR_APPEND_ELT (v, field, next);
1233 if (idx < VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)))
1234 error ("too many initializers for %qT", type);
1236 CONSTRUCTOR_ELTS (init) = v;
1240 /* Subroutine of process_init_constructor, which will process a single
1241 initializer INIT for a union of type TYPE. Returns the flags (PICFLAG_*)
1242 which describe the initializer. */
1245 process_init_constructor_union (tree type, tree init)
1247 constructor_elt *ce;
1250 /* If the initializer was empty, use default zero initialization. */
1251 if (VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (init)))
1254 len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
1257 error ("too many initializers for %qT", type);
1258 VEC_block_remove (constructor_elt, CONSTRUCTOR_ELTS (init), 1, len-1);
1261 ce = VEC_index (constructor_elt, CONSTRUCTOR_ELTS (init), 0);
1263 /* If this element specifies a field, initialize via that field. */
1266 if (TREE_CODE (ce->index) == FIELD_DECL)
1268 else if (TREE_CODE (ce->index) == IDENTIFIER_NODE)
1270 /* This can happen within a cast, see g++.dg/opt/cse2.C. */
1271 tree name = ce->index;
1273 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1274 if (DECL_NAME (field) == name)
1278 error ("no field %qD found in union being initialized", field);
1279 ce->value = error_mark_node;
1285 gcc_assert (TREE_CODE (ce->index) == INTEGER_CST
1286 || TREE_CODE (ce->index) == RANGE_EXPR);
1287 error ("index value instead of field name in union initializer");
1288 ce->value = error_mark_node;
1293 /* Find the first named field. ANSI decided in September 1990
1294 that only named fields count here. */
1295 tree field = TYPE_FIELDS (type);
1296 while (field && (!DECL_NAME (field) || TREE_CODE (field) != FIELD_DECL))
1297 field = TREE_CHAIN (field);
1298 if (field == NULL_TREE)
1300 error ("too many initializers for %qT", type);
1301 ce->value = error_mark_node;
1306 if (ce->value && ce->value != error_mark_node)
1307 ce->value = digest_init_r (TREE_TYPE (ce->index), ce->value, true, LOOKUP_IMPLICIT);
1309 return picflag_from_initializer (ce->value);
1312 /* Process INIT, a constructor for a variable of aggregate type TYPE. The
1313 constructor is a brace-enclosed initializer, and will be modified in-place.
1315 Each element is converted to the right type through digest_init, and
1316 missing initializers are added following the language rules (zero-padding,
1319 After the execution, the initializer will have TREE_CONSTANT if all elts are
1320 constant, and TREE_STATIC set if, in addition, all elts are simple enough
1321 constants that the assembler and linker can compute them.
1323 The function returns the initializer itself, or error_mark_node in case
1327 process_init_constructor (tree type, tree init)
1331 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
1333 if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
1334 flags = process_init_constructor_array (type, init);
1335 else if (TREE_CODE (type) == RECORD_TYPE)
1336 flags = process_init_constructor_record (type, init);
1337 else if (TREE_CODE (type) == UNION_TYPE)
1338 flags = process_init_constructor_union (type, init);
1342 if (flags & PICFLAG_ERRONEOUS)
1343 return error_mark_node;
1345 TREE_TYPE (init) = type;
1346 if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE)
1347 cp_complete_array_type (&TREE_TYPE (init), init, /*do_default=*/0);
1348 if (!(flags & PICFLAG_NOT_ALL_CONSTANT))
1350 TREE_CONSTANT (init) = 1;
1351 if (!(flags & PICFLAG_NOT_ALL_SIMPLE))
1352 TREE_STATIC (init) = 1;
1357 /* Given a structure or union value DATUM, construct and return
1358 the structure or union component which results from narrowing
1359 that value to the base specified in BASETYPE. For example, given the
1362 class L { int ii; };
1363 class A : L { ... };
1364 class B : L { ... };
1365 class C : A, B { ... };
1373 x.A::ii refers to the ii member of the L part of
1374 the A part of the C object named by X. In this case,
1375 DATUM would be x, and BASETYPE would be A.
1377 I used to think that this was nonconformant, that the standard specified
1378 that first we look up ii in A, then convert x to an L& and pull out the
1379 ii part. But in fact, it does say that we convert x to an A&; A here
1380 is known as the "naming class". (jason 2000-12-19)
1382 BINFO_P points to a variable initialized either to NULL_TREE or to the
1383 binfo for the specific base subobject we want to convert to. */
1386 build_scoped_ref (tree datum, tree basetype, tree* binfo_p)
1390 if (datum == error_mark_node)
1391 return error_mark_node;
1395 binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check, NULL);
1397 if (!binfo || binfo == error_mark_node)
1399 *binfo_p = NULL_TREE;
1401 error_not_base_type (basetype, TREE_TYPE (datum));
1402 return error_mark_node;
1406 return build_base_path (PLUS_EXPR, datum, binfo, 1);
1409 /* Build a reference to an object specified by the C++ `->' operator.
1410 Usually this just involves dereferencing the object, but if the
1411 `->' operator is overloaded, then such overloads must be
1412 performed until an object which does not have the `->' operator
1413 overloaded is found. An error is reported when circular pointer
1414 delegation is detected. */
1417 build_x_arrow (tree expr)
1419 tree orig_expr = expr;
1420 tree type = TREE_TYPE (expr);
1421 tree last_rval = NULL_TREE;
1422 VEC(tree,gc) *types_memoized = NULL;
1424 if (type == error_mark_node)
1425 return error_mark_node;
1427 if (processing_template_decl)
1429 if (type_dependent_expression_p (expr))
1430 return build_min_nt (ARROW_EXPR, expr);
1431 expr = build_non_dependent_expr (expr);
1434 if (MAYBE_CLASS_TYPE_P (type))
1436 while ((expr = build_new_op (COMPONENT_REF, LOOKUP_NORMAL, expr,
1437 NULL_TREE, NULL_TREE,
1438 /*overloaded_p=*/NULL,
1439 tf_warning_or_error)))
1441 if (expr == error_mark_node)
1442 return error_mark_node;
1444 if (vec_member (TREE_TYPE (expr), types_memoized))
1446 error ("circular pointer delegation detected");
1447 return error_mark_node;
1450 VEC_safe_push (tree, gc, types_memoized, TREE_TYPE (expr));
1454 if (last_rval == NULL_TREE)
1456 error ("base operand of %<->%> has non-pointer type %qT", type);
1457 return error_mark_node;
1460 if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1461 last_rval = convert_from_reference (last_rval);
1464 last_rval = decay_conversion (expr);
1466 if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1468 if (processing_template_decl)
1470 expr = build_min_non_dep (ARROW_EXPR, last_rval, orig_expr);
1471 /* It will be dereferenced. */
1472 TREE_TYPE (expr) = TREE_TYPE (TREE_TYPE (last_rval));
1476 return cp_build_indirect_ref (last_rval, RO_NULL, tf_warning_or_error);
1480 error ("result of %<operator->()%> yields non-pointer result");
1482 error ("base operand of %<->%> is not a pointer");
1483 return error_mark_node;
1486 /* Return an expression for "DATUM .* COMPONENT". DATUM has not
1487 already been checked out to be of aggregate type. */
1490 build_m_component_ref (tree datum, tree component)
1498 if (error_operand_p (datum) || error_operand_p (component))
1499 return error_mark_node;
1501 datum = mark_lvalue_use (datum);
1502 component = mark_rvalue_use (component);
1504 ptrmem_type = TREE_TYPE (component);
1505 if (!TYPE_PTR_TO_MEMBER_P (ptrmem_type))
1507 error ("%qE cannot be used as a member pointer, since it is of "
1509 component, ptrmem_type);
1510 return error_mark_node;
1513 objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
1514 if (! MAYBE_CLASS_TYPE_P (objtype))
1516 error ("cannot apply member pointer %qE to %qE, which is of "
1517 "non-class type %qT",
1518 component, datum, objtype);
1519 return error_mark_node;
1522 type = TYPE_PTRMEM_POINTED_TO_TYPE (ptrmem_type);
1523 ctype = complete_type (TYPE_PTRMEM_CLASS_TYPE (ptrmem_type));
1525 if (!COMPLETE_TYPE_P (ctype))
1527 if (!same_type_p (ctype, objtype))
1533 binfo = lookup_base (objtype, ctype, ba_check, NULL);
1538 error ("pointer to member type %qT incompatible with object "
1541 return error_mark_node;
1543 else if (binfo == error_mark_node)
1544 return error_mark_node;
1547 if (TYPE_PTRMEM_P (ptrmem_type))
1551 /* Compute the type of the field, as described in [expr.ref].
1552 There's no such thing as a mutable pointer-to-member, so
1553 things are not as complex as they are for references to
1554 non-static data members. */
1555 type = cp_build_qualified_type (type,
1556 (cp_type_quals (type)
1557 | cp_type_quals (TREE_TYPE (datum))));
1559 datum = build_address (datum);
1561 /* Convert object to the correct base. */
1563 datum = build_base_path (PLUS_EXPR, datum, binfo, 1);
1565 /* Build an expression for "object + offset" where offset is the
1566 value stored in the pointer-to-data-member. */
1567 ptype = build_pointer_type (type);
1568 datum = build2 (POINTER_PLUS_EXPR, ptype,
1569 fold_convert (ptype, datum),
1570 build_nop (sizetype, component));
1571 return cp_build_indirect_ref (datum, RO_NULL, tf_warning_or_error);
1574 return build2 (OFFSET_REF, type, datum, component);
1577 /* Return a tree node for the expression TYPENAME '(' PARMS ')'. */
1580 build_functional_cast (tree exp, tree parms, tsubst_flags_t complain)
1582 /* This is either a call to a constructor,
1583 or a C cast in C++'s `functional' notation. */
1585 /* The type to which we are casting. */
1587 VEC(tree,gc) *parmvec;
1589 if (exp == error_mark_node || parms == error_mark_node)
1590 return error_mark_node;
1592 if (TREE_CODE (exp) == TYPE_DECL)
1593 type = TREE_TYPE (exp);
1597 if (TREE_CODE (type) == REFERENCE_TYPE && !parms)
1599 error ("invalid value-initialization of reference type");
1600 return error_mark_node;
1603 if (processing_template_decl)
1605 tree t = build_min (CAST_EXPR, type, parms);
1606 /* We don't know if it will or will not have side effects. */
1607 TREE_SIDE_EFFECTS (t) = 1;
1611 if (! MAYBE_CLASS_TYPE_P (type))
1613 if (parms == NULL_TREE)
1614 return cp_convert (type, integer_zero_node);
1616 /* This must build a C cast. */
1617 parms = build_x_compound_expr_from_list (parms, ELK_FUNC_CAST, complain);
1618 return cp_build_c_cast (type, parms, complain);
1621 /* Prepare to evaluate as a call to a constructor. If this expression
1622 is actually used, for example,
1624 return X (arg1, arg2, ...);
1626 then the slot being initialized will be filled in. */
1628 if (!complete_type_or_maybe_complain (type, NULL_TREE, complain))
1629 return error_mark_node;
1630 if (abstract_virtuals_error (NULL_TREE, type))
1631 return error_mark_node;
1635 If the expression list is a single-expression, the type
1636 conversion is equivalent (in definedness, and if defined in
1637 meaning) to the corresponding cast expression. */
1638 if (parms && TREE_CHAIN (parms) == NULL_TREE)
1639 return cp_build_c_cast (type, TREE_VALUE (parms), complain);
1643 The expression T(), where T is a simple-type-specifier for a
1644 non-array complete object type or the (possibly cv-qualified)
1645 void type, creates an rvalue of the specified type, which is
1646 value-initialized. */
1648 if (parms == NULL_TREE
1649 /* If there's a user-defined constructor, value-initialization is
1650 just calling the constructor, so fall through. */
1651 && !TYPE_HAS_USER_CONSTRUCTOR (type))
1653 exp = build_value_init (type, complain);
1654 exp = get_target_expr (exp);
1655 /* FIXME this is wrong */
1656 if (literal_type_p (type))
1657 TREE_CONSTANT (exp) = true;
1661 /* Call the constructor. */
1662 parmvec = make_tree_vector ();
1663 for (; parms != NULL_TREE; parms = TREE_CHAIN (parms))
1664 VEC_safe_push (tree, gc, parmvec, TREE_VALUE (parms));
1665 exp = build_special_member_call (NULL_TREE, complete_ctor_identifier,
1666 &parmvec, type, LOOKUP_NORMAL, complain);
1667 release_tree_vector (parmvec);
1669 if (exp == error_mark_node)
1670 return error_mark_node;
1672 return build_cplus_new (type, exp);
1676 /* Add new exception specifier SPEC, to the LIST we currently have.
1677 If it's already in LIST then do nothing.
1678 Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1679 know what we're doing. */
1682 add_exception_specifier (tree list, tree spec, int complain)
1687 diagnostic_t diag_type = DK_UNSPECIFIED; /* none */
1689 if (spec == error_mark_node)
1692 gcc_assert (spec && (!list || TREE_VALUE (list)));
1694 /* [except.spec] 1, type in an exception specifier shall not be
1695 incomplete, or pointer or ref to incomplete other than pointer
1697 is_ptr = TREE_CODE (core) == POINTER_TYPE;
1698 if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1699 core = TREE_TYPE (core);
1702 else if (VOID_TYPE_P (core))
1704 else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1706 else if (processing_template_decl)
1711 /* 15.4/1 says that types in an exception specifier must be complete,
1712 but it seems more reasonable to only require this on definitions
1713 and calls. So just give a pedwarn at this point; we will give an
1714 error later if we hit one of those two cases. */
1715 if (!COMPLETE_TYPE_P (complete_type (core)))
1716 diag_type = DK_PEDWARN; /* pedwarn */
1723 for (probe = list; probe; probe = TREE_CHAIN (probe))
1724 if (same_type_p (TREE_VALUE (probe), spec))
1727 list = tree_cons (NULL_TREE, spec, list);
1730 diag_type = DK_ERROR; /* error */
1732 if (diag_type != DK_UNSPECIFIED && complain)
1733 cxx_incomplete_type_diagnostic (NULL_TREE, core, diag_type);
1738 /* Combine the two exceptions specifier lists LIST and ADD, and return
1742 merge_exception_specifiers (tree list, tree add)
1746 /* For merging noexcept(true) and throw(), take the more recent one (LIST).
1747 A throw(type-list) spec takes precedence over a noexcept(false) spec.
1748 Any other noexcept-spec should only be merged with an equivalent one.
1749 So the !TREE_VALUE code below is correct for all cases. */
1750 else if (!TREE_VALUE (add))
1752 else if (!TREE_VALUE (list))
1756 tree orig_list = list;
1758 for (; add; add = TREE_CHAIN (add))
1760 tree spec = TREE_VALUE (add);
1763 for (probe = orig_list; probe; probe = TREE_CHAIN (probe))
1764 if (same_type_p (TREE_VALUE (probe), spec))
1768 spec = build_tree_list (NULL_TREE, spec);
1769 TREE_CHAIN (spec) = list;
1777 /* Subroutine of build_call. Ensure that each of the types in the
1778 exception specification is complete. Technically, 15.4/1 says that
1779 they need to be complete when we see a declaration of the function,
1780 but we should be able to get away with only requiring this when the
1781 function is defined or called. See also add_exception_specifier. */
1784 require_complete_eh_spec_types (tree fntype, tree decl)
1787 /* Don't complain about calls to op new. */
1788 if (decl && DECL_ARTIFICIAL (decl))
1790 for (raises = TYPE_RAISES_EXCEPTIONS (fntype); raises;
1791 raises = TREE_CHAIN (raises))
1793 tree type = TREE_VALUE (raises);
1794 if (type && !COMPLETE_TYPE_P (type))
1798 ("call to function %qD which throws incomplete type %q#T",
1801 error ("call to function which throws incomplete type %q#T",
1808 #include "gt-cp-typeck2.h"