]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/typeck2.c
simplify-rtx.c (simplify_binary_operation_1): Removed erroneous break that was preven...
[thirdparty/gcc.git] / gcc / cp / typeck2.c
CommitLineData
8d08fdba
MS
1/* Report error messages, build initializers, and perform
2 some front-end optimizations for C++ compiler.
d6a8bdff 3 Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
e77f031d 4 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007
3c2426b9 5 Free Software Foundation, Inc.
8d08fdba
MS
6 Hacked by Michael Tiemann (tiemann@cygnus.com)
7
f5adbb8d 8This file is part of GCC.
8d08fdba 9
f5adbb8d 10GCC is free software; you can redistribute it and/or modify
8d08fdba 11it under the terms of the GNU General Public License as published by
e77f031d 12the Free Software Foundation; either version 3, or (at your option)
8d08fdba
MS
13any later version.
14
f5adbb8d 15GCC is distributed in the hope that it will be useful,
8d08fdba
MS
16but WITHOUT ANY WARRANTY; without even the implied warranty of
17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18GNU General Public License for more details.
19
20You should have received a copy of the GNU General Public License
e77f031d
NC
21along with GCC; see the file COPYING3. If not see
22<http://www.gnu.org/licenses/>. */
8d08fdba
MS
23
24
25/* This file is part of the C++ front end.
26 It contains routines to build C++ expressions given their operands,
27 including computing the types of the result, C and C++ specific error
5088b058 28 checks, and some optimization. */
8d08fdba
MS
29
30#include "config.h"
8d052bc7 31#include "system.h"
4977bab6
ZW
32#include "coretypes.h"
33#include "tm.h"
8d08fdba
MS
34#include "tree.h"
35#include "cp-tree.h"
36#include "flags.h"
12027a89 37#include "toplev.h"
71144a65 38#include "output.h"
2a2b2d43 39#include "diagnostic.h"
8d08fdba 40
4038c495
GB
41static tree
42process_init_constructor (tree type, tree init);
43
8d08fdba 44
8d08fdba
MS
45/* Print an error message stemming from an attempt to use
46 BASETYPE as a base class for TYPE. */
e92cc029 47
8d08fdba 48tree
0a8cb79e 49error_not_base_type (tree basetype, tree type)
8d08fdba
MS
50{
51 if (TREE_CODE (basetype) == FUNCTION_DECL)
4f1c5b7d 52 basetype = DECL_CONTEXT (basetype);
a82e1a7d 53 error ("type %qT is not a base type for type %qT", basetype, type);
8d08fdba
MS
54 return error_mark_node;
55}
56
57tree
0a8cb79e 58binfo_or_else (tree base, tree type)
8d08fdba 59{
18e4be85 60 tree binfo = lookup_base (type, base, ba_unique, NULL);
2db1ab2d
NS
61
62 if (binfo == error_mark_node)
63 return NULL_TREE;
64 else if (!binfo)
65 error_not_base_type (base, type);
66 return binfo;
8d08fdba
MS
67}
68
8d08fdba 69/* According to ARM $7.1.6, "A `const' object may be initialized, but its
fabb00fc 70 value may not be changed thereafter. */
e92cc029 71
8d08fdba 72void
fabb00fc 73readonly_error (tree arg, const char* string)
8d08fdba 74{
d8e178a0 75 const char *fmt;
8d08fdba
MS
76
77 if (TREE_CODE (arg) == COMPONENT_REF)
78 {
79 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
0cbd7506 80 fmt = "%s of data-member %qD in read-only structure";
8d08fdba 81 else
0cbd7506 82 fmt = "%s of read-only data-member %qD";
fabb00fc 83 error (fmt, string, TREE_OPERAND (arg, 1));
8d08fdba
MS
84 }
85 else if (TREE_CODE (arg) == VAR_DECL)
86 {
87 if (DECL_LANG_SPECIFIC (arg)
88 && DECL_IN_AGGR_P (arg)
89 && !TREE_STATIC (arg))
a82e1a7d 90 fmt = "%s of constant field %qD";
8d08fdba 91 else
a82e1a7d 92 fmt = "%s of read-only variable %qD";
fabb00fc 93 error (fmt, string, arg);
8d08fdba
MS
94 }
95 else if (TREE_CODE (arg) == PARM_DECL)
fabb00fc 96 error ("%s of read-only parameter %qD", string, arg);
8d08fdba 97 else if (TREE_CODE (arg) == INDIRECT_REF
0cbd7506
MS
98 && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
99 && (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL
100 || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
fabb00fc 101 error ("%s of read-only reference %qD", string, TREE_OPERAND (arg, 0));
8d08fdba 102 else if (TREE_CODE (arg) == RESULT_DECL)
fabb00fc 103 error ("%s of read-only named return value %qD", string, arg);
69851283 104 else if (TREE_CODE (arg) == FUNCTION_DECL)
fabb00fc 105 error ("%s of function %qD", string, arg);
69851283 106 else
fabb00fc 107 error ("%s of read-only location", string);
8d08fdba
MS
108}
109
7fb213d8
GB
110\f
111/* Structure that holds information about declarations whose type was
112 incomplete and we could not check whether it was abstract or not. */
113
114struct pending_abstract_type GTY((chain_next ("%h.next")))
115{
116 /* Declaration which we are checking for abstractness. It is either
117 a DECL node, or an IDENTIFIER_NODE if we do not have a full
118 declaration available. */
119 tree decl;
120
121 /* Type which will be checked for abstractness. */
122 tree type;
123
124 /* Position of the declaration. This is only needed for IDENTIFIER_NODEs,
125 because DECLs already carry locus information. */
126 location_t locus;
127
128 /* Link to the next element in list. */
129 struct pending_abstract_type* next;
130};
131
132
133/* Compute the hash value of the node VAL. This function is used by the
134 hash table abstract_pending_vars. */
135
136static hashval_t
137pat_calc_hash (const void* val)
138{
67f5655f
GDR
139 const struct pending_abstract_type *pat =
140 (const struct pending_abstract_type *) val;
7fb213d8
GB
141 return (hashval_t) TYPE_UID (pat->type);
142}
143
144
145/* Compare node VAL1 with the type VAL2. This function is used by the
146 hash table abstract_pending_vars. */
147
148static int
149pat_compare (const void* val1, const void* val2)
150{
741ac903 151 const struct pending_abstract_type *const pat1 =
67f5655f 152 (const struct pending_abstract_type *) val1;
741ac903 153 const_tree const type2 = (const_tree)val2;
7fb213d8
GB
154
155 return (pat1->type == type2);
156}
157
158/* Hash table that maintains pending_abstract_type nodes, for which we still
159 need to check for type abstractness. The key of the table is the type
160 of the declaration. */
161static GTY ((param_is (struct pending_abstract_type)))
162htab_t abstract_pending_vars = NULL;
163
164
165/* This function is called after TYPE is completed, and will check if there
166 are pending declarations for which we still need to verify the abstractness
167 of TYPE, and emit a diagnostic (through abstract_virtuals_error) if TYPE
168 turned out to be incomplete. */
169
170void
171complete_type_check_abstract (tree type)
172{
173 void **slot;
174 struct pending_abstract_type *pat;
175 location_t cur_loc = input_location;
176
50bc768d 177 gcc_assert (COMPLETE_TYPE_P (type));
7fb213d8
GB
178
179 if (!abstract_pending_vars)
180 return;
181
182 /* Retrieve the list of pending declarations for this type. */
183 slot = htab_find_slot_with_hash (abstract_pending_vars, type,
184 (hashval_t)TYPE_UID (type), NO_INSERT);
185 if (!slot)
186 return;
187 pat = (struct pending_abstract_type*)*slot;
50bc768d 188 gcc_assert (pat);
7fb213d8
GB
189
190 /* If the type is not abstract, do not do anything. */
191 if (CLASSTYPE_PURE_VIRTUALS (type))
192 {
193 struct pending_abstract_type *prev = 0, *next;
194
195 /* Reverse the list to emit the errors in top-down order. */
196 for (; pat; pat = next)
197 {
198 next = pat->next;
199 pat->next = prev;
200 prev = pat;
201 }
202 pat = prev;
203
204 /* Go through the list, and call abstract_virtuals_error for each
77880ae4 205 element: it will issue a diagnostic if the type is abstract. */
7fb213d8
GB
206 while (pat)
207 {
50bc768d 208 gcc_assert (type == pat->type);
7fb213d8
GB
209
210 /* Tweak input_location so that the diagnostic appears at the correct
211 location. Notice that this is only needed if the decl is an
dee15844 212 IDENTIFIER_NODE. */
7fb213d8
GB
213 input_location = pat->locus;
214 abstract_virtuals_error (pat->decl, pat->type);
215 pat = pat->next;
216 }
217 }
218
219 htab_clear_slot (abstract_pending_vars, slot);
220
221 input_location = cur_loc;
222}
223
224
a7a64a77
MM
225/* If TYPE has abstract virtual functions, issue an error about trying
226 to create an object of that type. DECL is the object declared, or
227 NULL_TREE if the declaration is unavailable. Returns 1 if an error
228 occurred; zero if all was well. */
e92cc029 229
a7a64a77 230int
0a8cb79e 231abstract_virtuals_error (tree decl, tree type)
8d08fdba 232{
d4e6fecb 233 VEC(tree,gc) *pure;
c8094d83 234
7fb213d8
GB
235 /* This function applies only to classes. Any other entity can never
236 be abstract. */
237 if (!CLASS_TYPE_P (type))
238 return 0;
239
240 /* If the type is incomplete, we register it within a hash table,
241 so that we can check again once it is completed. This makes sense
242 only for objects for which we have a declaration or at least a
243 name. */
244 if (!COMPLETE_TYPE_P (type))
245 {
246 void **slot;
247 struct pending_abstract_type *pat;
248
c8094d83 249 gcc_assert (!decl || DECL_P (decl)
50bc768d 250 || TREE_CODE (decl) == IDENTIFIER_NODE);
7fb213d8
GB
251
252 if (!abstract_pending_vars)
c8094d83 253 abstract_pending_vars = htab_create_ggc (31, &pat_calc_hash,
7fb213d8
GB
254 &pat_compare, NULL);
255
256 slot = htab_find_slot_with_hash (abstract_pending_vars, type,
257 (hashval_t)TYPE_UID (type), INSERT);
258
99dd239f 259 pat = GGC_NEW (struct pending_abstract_type);
7fb213d8
GB
260 pat->type = type;
261 pat->decl = decl;
262 pat->locus = ((decl && DECL_P (decl))
263 ? DECL_SOURCE_LOCATION (decl)
264 : input_location);
265
67f5655f 266 pat->next = (struct pending_abstract_type *) *slot;
7fb213d8
GB
267 *slot = pat;
268
269 return 0;
270 }
271
e60505a5
NS
272 if (!TYPE_SIZE (type))
273 /* TYPE is being defined, and during that time
274 CLASSTYPE_PURE_VIRTUALS holds the inline friends. */
275 return 0;
276
585b44d3
NS
277 pure = CLASSTYPE_PURE_VIRTUALS (type);
278 if (!pure)
279 return 0;
280
8d08fdba
MS
281 if (decl)
282 {
283 if (TREE_CODE (decl) == RESULT_DECL)
a7a64a77 284 return 0;
8d08fdba
MS
285
286 if (TREE_CODE (decl) == VAR_DECL)
dee15844
JM
287 error ("cannot declare variable %q+D to be of abstract "
288 "type %qT", decl, type);
8d08fdba 289 else if (TREE_CODE (decl) == PARM_DECL)
dee15844
JM
290 error ("cannot declare parameter %q+D to be of abstract type %qT",
291 decl, type);
8d08fdba 292 else if (TREE_CODE (decl) == FIELD_DECL)
dee15844
JM
293 error ("cannot declare field %q+D to be of abstract type %qT",
294 decl, type);
8d08fdba
MS
295 else if (TREE_CODE (decl) == FUNCTION_DECL
296 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
dee15844 297 error ("invalid abstract return type for member function %q+#D", decl);
8d08fdba 298 else if (TREE_CODE (decl) == FUNCTION_DECL)
dee15844 299 error ("invalid abstract return type for function %q+#D", decl);
7fb213d8 300 else if (TREE_CODE (decl) == IDENTIFIER_NODE)
dee15844 301 /* Here we do not have location information. */
a82e1a7d 302 error ("invalid abstract type %qT for %qE", type, decl);
da291c87 303 else
dee15844 304 error ("invalid abstract type for %q+D", decl);
8d08fdba 305 }
4a67c9e9 306 else
a82e1a7d 307 error ("cannot allocate an object of abstract type %qT", type);
4a67c9e9 308
8d08fdba 309 /* Only go through this once. */
585b44d3 310 if (VEC_length (tree, pure))
8d08fdba 311 {
585b44d3
NS
312 unsigned ix;
313 tree fn;
c8094d83 314
da291c87 315 inform ("%J because the following virtual functions are pure "
a82e1a7d 316 "within %qT:", TYPE_MAIN_DECL (type), type);
da291c87 317
585b44d3 318 for (ix = 0; VEC_iterate (tree, pure, ix, fn); ix++)
dee15844 319 inform ("\t%+#D", fn);
585b44d3 320 /* Now truncate the vector. This leaves it non-null, so we know
0cbd7506
MS
321 there are pure virtuals, but empty so we don't list them out
322 again. */
585b44d3 323 VEC_truncate (tree, pure, 0);
8d08fdba 324 }
4a67c9e9 325 else
c8094d83 326 inform ("%J since type %qT has pure virtual functions",
da291c87 327 TYPE_MAIN_DECL (type), type);
a7a64a77
MM
328
329 return 1;
8d08fdba
MS
330}
331
8d08fdba
MS
332/* Print an error message for invalid use of an incomplete type.
333 VALUE is the expression that was used (or 0 if that isn't known)
5aa3396c
JM
334 and TYPE is the type that was invalid. DIAG_TYPE indicates the
335 type of diagnostic: 0 for an error, 1 for a warning, 2 for a
336 pedwarn. */
8d08fdba
MS
337
338void
0a8cb79e 339cxx_incomplete_type_diagnostic (tree value, tree type, int diag_type)
8d08fdba 340{
146c8d60 341 int decl = 0;
eb2de0c0 342 void (*p_msg) (const char *, ...) ATTRIBUTE_GCC_CXXDIAG(1,2);
23b4deba 343
5aa3396c 344 if (diag_type == 1)
dee15844 345 p_msg = warning0;
5aa3396c 346 else if (diag_type == 2)
dee15844 347 p_msg = pedwarn;
23b4deba 348 else
dee15844 349 p_msg = error;
c8094d83 350
8d08fdba
MS
351 /* Avoid duplicate error message. */
352 if (TREE_CODE (type) == ERROR_MARK)
353 return;
354
146c8d60 355 if (value != 0 && (TREE_CODE (value) == VAR_DECL
17f29637
KL
356 || TREE_CODE (value) == PARM_DECL
357 || TREE_CODE (value) == FIELD_DECL))
146c8d60 358 {
dee15844 359 p_msg ("%q+D has incomplete type", value);
146c8d60
NS
360 decl = 1;
361 }
315fb5db 362 retry:
66543169
NS
363 /* We must print an error message. Be clever about what it says. */
364
365 switch (TREE_CODE (type))
8d08fdba 366 {
66543169
NS
367 case RECORD_TYPE:
368 case UNION_TYPE:
369 case ENUMERAL_TYPE:
146c8d60 370 if (!decl)
63c9a190 371 p_msg ("invalid use of incomplete type %q#T", type);
17f29637 372 if (!TYPE_TEMPLATE_INFO (type))
dee15844 373 p_msg ("forward declaration of %q+#T", type);
17f29637 374 else
dee15844 375 p_msg ("declaration of %q+#T", type);
66543169
NS
376 break;
377
378 case VOID_TYPE:
dee15844 379 p_msg ("invalid use of %qT", type);
66543169
NS
380 break;
381
382 case ARRAY_TYPE:
383 if (TYPE_DOMAIN (type))
0cbd7506
MS
384 {
385 type = TREE_TYPE (type);
386 goto retry;
387 }
dee15844 388 p_msg ("invalid use of array with unspecified bounds");
66543169
NS
389 break;
390
391 case OFFSET_TYPE:
392 bad_member:
dee15844 393 p_msg ("invalid use of member (did you forget the %<&%> ?)");
66543169
NS
394 break;
395
396 case TEMPLATE_TYPE_PARM:
7acf7efa
VR
397 p_msg ("invalid use of template type parameter %qT", type);
398 break;
399
400 case BOUND_TEMPLATE_TEMPLATE_PARM:
401 p_msg ("invalid use of template template parameter %qT",
402 TYPE_NAME (type));
66543169
NS
403 break;
404
8fcd79cb
MM
405 case TYPENAME_TYPE:
406 p_msg ("invalid use of dependent type %qT", type);
407 break;
408
66543169
NS
409 case UNKNOWN_TYPE:
410 if (value && TREE_CODE (value) == COMPONENT_REF)
0cbd7506 411 goto bad_member;
66543169 412 else if (value && TREE_CODE (value) == ADDR_EXPR)
dee15844
JM
413 p_msg ("address of overloaded function with no contextual "
414 "type information");
66543169 415 else if (value && TREE_CODE (value) == OVERLOAD)
dee15844 416 p_msg ("overloaded function with no contextual type information");
66543169 417 else
dee15844 418 p_msg ("insufficient contextual information to determine type");
66543169 419 break;
c8094d83 420
66543169 421 default:
315fb5db 422 gcc_unreachable ();
8d08fdba
MS
423 }
424}
425
23b4deba
AO
426/* Backward-compatibility interface to incomplete_type_diagnostic;
427 required by ../tree.c. */
428#undef cxx_incomplete_type_error
429void
0a8cb79e 430cxx_incomplete_type_error (tree value, tree type)
23b4deba
AO
431{
432 cxx_incomplete_type_diagnostic (value, type, 0);
433}
434
8d08fdba 435\f
25ebb82a 436/* The recursive part of split_nonconstant_init. DEST is an lvalue
325c3691 437 expression to which INIT should be assigned. INIT is a CONSTRUCTOR. */
25ebb82a 438
325c3691
RH
439static void
440split_nonconstant_init_1 (tree dest, tree init)
25ebb82a 441{
4038c495
GB
442 unsigned HOST_WIDE_INT idx;
443 tree field_index, value;
444 tree type = TREE_TYPE (dest);
445 tree inner_type = NULL;
25ebb82a
RH
446 bool array_type_p = false;
447
25ebb82a
RH
448 switch (TREE_CODE (type))
449 {
450 case ARRAY_TYPE:
451 inner_type = TREE_TYPE (type);
452 array_type_p = true;
453 /* FALLTHRU */
454
455 case RECORD_TYPE:
456 case UNION_TYPE:
457 case QUAL_UNION_TYPE:
4038c495
GB
458 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init), idx,
459 field_index, value)
25ebb82a 460 {
4038c495
GB
461 /* The current implementation of this algorithm assumes that
462 the field was set for all the elements. This is usually done
463 by process_init_constructor. */
464 gcc_assert (field_index);
25ebb82a
RH
465
466 if (!array_type_p)
467 inner_type = TREE_TYPE (field_index);
468
469 if (TREE_CODE (value) == CONSTRUCTOR)
470 {
4038c495
GB
471 tree sub;
472
25ebb82a 473 if (array_type_p)
0cbd7506 474 sub = build4 (ARRAY_REF, inner_type, dest, field_index,
f293ce4b 475 NULL_TREE, NULL_TREE);
25ebb82a 476 else
0cbd7506 477 sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
f293ce4b 478 NULL_TREE);
25ebb82a 479
325c3691 480 split_nonconstant_init_1 (sub, value);
25ebb82a
RH
481 }
482 else if (!initializer_constant_valid_p (value, inner_type))
483 {
4038c495
GB
484 tree code;
485 tree sub;
486
487 /* FIXME: Ordered removal is O(1) so the whole function is
488 worst-case quadratic. This could be fixed using an aside
489 bitmap to record which elements must be removed and remove
490 them all at the same time. Or by merging
491 split_non_constant_init into process_init_constructor_array,
492 that is separating constants from non-constants while building
493 the vector. */
494 VEC_ordered_remove (constructor_elt, CONSTRUCTOR_ELTS (init),
495 idx);
496 --idx;
25ebb82a
RH
497
498 if (array_type_p)
0cbd7506 499 sub = build4 (ARRAY_REF, inner_type, dest, field_index,
f293ce4b 500 NULL_TREE, NULL_TREE);
25ebb82a 501 else
0cbd7506 502 sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
f293ce4b 503 NULL_TREE);
25ebb82a 504
dae7ec87 505 code = build2 (INIT_EXPR, inner_type, sub, value);
25ebb82a 506 code = build_stmt (EXPR_STMT, code);
325c3691 507 add_stmt (code);
25ebb82a
RH
508 continue;
509 }
25ebb82a
RH
510 }
511 break;
512
513 case VECTOR_TYPE:
514 if (!initializer_constant_valid_p (init, type))
515 {
4038c495 516 tree code;
74aad7cc 517 tree cons = copy_node (init);
25ebb82a 518 CONSTRUCTOR_ELTS (init) = NULL;
74aad7cc 519 code = build2 (MODIFY_EXPR, type, dest, cons);
25ebb82a 520 code = build_stmt (EXPR_STMT, code);
325c3691 521 add_stmt (code);
25ebb82a
RH
522 }
523 break;
524
525 default:
315fb5db 526 gcc_unreachable ();
25ebb82a 527 }
b7af94d8
CL
528
529 /* The rest of the initializer is now a constant. */
530 TREE_CONSTANT (init) = 1;
25ebb82a
RH
531}
532
c8094d83 533/* A subroutine of store_init_value. Splits non-constant static
25ebb82a
RH
534 initializer INIT into a constant part and generates code to
535 perform the non-constant part of the initialization to DEST.
536 Returns the code for the runtime init. */
537
538static tree
539split_nonconstant_init (tree dest, tree init)
540{
541 tree code;
542
543 if (TREE_CODE (init) == CONSTRUCTOR)
544 {
325c3691
RH
545 code = push_stmt_list ();
546 split_nonconstant_init_1 (dest, init);
547 code = pop_stmt_list (code);
25ebb82a 548 DECL_INITIAL (dest) = init;
6407bc67 549 TREE_READONLY (dest) = 0;
25ebb82a
RH
550 }
551 else
f293ce4b 552 code = build2 (INIT_EXPR, TREE_TYPE (dest), dest, init);
25ebb82a
RH
553
554 return code;
555}
556
8d08fdba
MS
557/* Perform appropriate conversions on the initial value of a variable,
558 store it in the declaration DECL,
559 and print any error messages that are appropriate.
560 If the init is invalid, store an ERROR_MARK.
561
562 C++: Note that INIT might be a TREE_LIST, which would mean that it is
563 a base class initializer for some aggregate type, hopefully compatible
564 with DECL. If INIT is a single element, and DECL is an aggregate
565 type, we silently convert INIT into a TREE_LIST, allowing a constructor
566 to be called.
567
568 If INIT is a TREE_LIST and there is no constructor, turn INIT
569 into a CONSTRUCTOR and use standard initialization techniques.
570 Perhaps a warning should be generated?
571
25ebb82a
RH
572 Returns code to be executed if initialization could not be performed
573 for static variable. In that case, caller must emit the code. */
8d08fdba
MS
574
575tree
0a8cb79e 576store_init_value (tree decl, tree init)
8d08fdba 577{
926ce8bd 578 tree value, type;
8d08fdba
MS
579
580 /* If variable's type was invalidly declared, just ignore it. */
581
582 type = TREE_TYPE (decl);
583 if (TREE_CODE (type) == ERROR_MARK)
584 return NULL_TREE;
585
e8abc66f 586 if (IS_AGGR_TYPE (type))
8d08fdba 587 {
315fb5db
NS
588 gcc_assert (TYPE_HAS_TRIVIAL_INIT_REF (type)
589 || TREE_CODE (init) == CONSTRUCTOR);
e8abc66f 590
6eabb241 591 if (TREE_CODE (init) == TREE_LIST)
8d08fdba 592 {
a82e1a7d 593 error ("constructor syntax used, but no constructor declared "
0cbd7506 594 "for type %qT", type);
4038c495 595 init = build_constructor_from_list (NULL_TREE, nreverse (init));
8d08fdba 596 }
8d08fdba
MS
597 }
598 else if (TREE_CODE (init) == TREE_LIST
599 && TREE_TYPE (init) != unknown_type_node)
600 {
601 if (TREE_CODE (decl) == RESULT_DECL)
c7b62f14
NS
602 init = build_x_compound_expr_from_list (init,
603 "return value initializer");
8d08fdba
MS
604 else if (TREE_CODE (init) == TREE_LIST
605 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
606 {
8251199e 607 error ("cannot initialize arrays using this syntax");
8d08fdba
MS
608 return NULL_TREE;
609 }
610 else
c7b62f14
NS
611 /* We get here with code like `int a (2);' */
612 init = build_x_compound_expr_from_list (init, "initializer");
8d08fdba
MS
613 }
614
615 /* End of special C++ code. */
616
8e3df2de 617 /* Digest the specified initializer into an expression. */
4038c495 618 value = digest_init (type, init);
80439563
MM
619 /* If the initializer is not a constant, fill in DECL_INITIAL with
620 the bits that are constant, and then return an expression that
621 will perform the dynamic initialization. */
622 if (value != error_mark_node
623 && (TREE_SIDE_EFFECTS (value)
624 || ! initializer_constant_valid_p (value, TREE_TYPE (value))))
25ebb82a 625 return split_nonconstant_init (decl, value);
80439563
MM
626 /* If the value is a constant, just put it in DECL_INITIAL. If DECL
627 is an automatic variable, the middle end will turn this into a
628 dynamic initialization later. */
8d08fdba
MS
629 DECL_INITIAL (decl) = value;
630 return NULL_TREE;
631}
94e6e4c4 632
8d08fdba 633\f
4038c495
GB
634/* Process the initializer INIT for a variable of type TYPE, emitting
635 diagnostics for invalid initializers and converting the initializer as
636 appropriate.
8d08fdba 637
4038c495
GB
638 For aggregate types, it assumes that reshape_init has already run, thus the
639 initializer will have the right shape (brace elision has been undone). */
8d08fdba
MS
640
641tree
4038c495 642digest_init (tree type, tree init)
8d08fdba
MS
643{
644 enum tree_code code = TREE_CODE (type);
8d08fdba 645
4038c495 646 if (init == error_mark_node)
8d08fdba
MS
647 return error_mark_node;
648
4038c495 649 gcc_assert (init);
b8b98c66
NS
650
651 /* We must strip the outermost array type when completing the type,
652 because the its bounds might be incomplete at the moment. */
653 if (!complete_type_or_else (TREE_CODE (type) == ARRAY_TYPE
654 ? TREE_TYPE (type) : type, NULL_TREE))
655 return error_mark_node;
c8094d83 656
4038c495
GB
657 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue
658 (g++.old-deja/g++.law/casts2.C). */
8d08fdba
MS
659 if (TREE_CODE (init) == NON_LVALUE_EXPR)
660 init = TREE_OPERAND (init, 0);
661
4038c495
GB
662 /* Initialization of an array of chars from a string constant. The initializer
663 can be optionally enclosed in braces, but reshape_init has already removed
664 them if they were present. */
8d08fdba
MS
665 if (code == ARRAY_TYPE)
666 {
4038c495 667 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
7b019c19 668 if (char_type_p (typ1)
4038c495
GB
669 /*&& init */
670 && TREE_CODE (init) == STRING_CST)
8d08fdba 671 {
4038c495 672 tree char_type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (init)));
8d08fdba 673
4038c495 674 if (char_type != char_type_node
8d08fdba
MS
675 && TYPE_PRECISION (typ1) == BITS_PER_UNIT)
676 {
8251199e 677 error ("char-array initialized from wide string");
8d08fdba
MS
678 return error_mark_node;
679 }
4038c495 680 if (char_type == char_type_node
8d08fdba
MS
681 && TYPE_PRECISION (typ1) != BITS_PER_UNIT)
682 {
8251199e 683 error ("int-array initialized from non-wide string");
8d08fdba
MS
684 return error_mark_node;
685 }
686
4038c495
GB
687 TREE_TYPE (init) = type;
688 if (TYPE_DOMAIN (type) != 0 && TREE_CONSTANT (TYPE_SIZE (type)))
8d08fdba 689 {
926ce8bd 690 int size = TREE_INT_CST_LOW (TYPE_SIZE (type));
8d08fdba
MS
691 size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
692 /* In C it is ok to subtract 1 from the length of the string
693 because it's ok to ignore the terminating null char that is
694 counted in the length of the constant, but in C++ this would
695 be invalid. */
4038c495 696 if (size < TREE_STRING_LENGTH (init))
8251199e 697 pedwarn ("initializer-string for array of chars is too long");
8d08fdba 698 }
4038c495 699 return init;
8d08fdba
MS
700 }
701 }
702
3c955a04 703 /* Handle scalar types (including conversions) and references. */
b8063b29
MM
704 if (TREE_CODE (type) != COMPLEX_TYPE
705 && (SCALAR_TYPE_P (type) || code == REFERENCE_TYPE))
4038c495
GB
706 return convert_for_initialization (0, type, init, LOOKUP_NORMAL,
707 "initialization", NULL_TREE, 0);
708
709 /* Come here only for aggregates: records, arrays, unions, complex numbers
710 and vectors. */
711 gcc_assert (TREE_CODE (type) == ARRAY_TYPE
712 || TREE_CODE (type) == VECTOR_TYPE
713 || TREE_CODE (type) == RECORD_TYPE
714 || TREE_CODE (type) == UNION_TYPE
715 || TREE_CODE (type) == COMPLEX_TYPE);
716
717 if (BRACE_ENCLOSED_INITIALIZER_P (init))
718 return process_init_constructor (type, init);
719 else
8d08fdba 720 {
3b2db49f 721 if (COMPOUND_LITERAL_P (init) && TREE_CODE (type) == ARRAY_TYPE)
8d08fdba 722 {
4038c495
GB
723 error ("cannot initialize aggregate of type %qT with "
724 "a compound literal", type);
8d08fdba 725
4038c495
GB
726 return error_mark_node;
727 }
8e76c2bf
MS
728
729 if (TREE_CODE (type) == ARRAY_TYPE
730 && TREE_CODE (init) != CONSTRUCTOR)
731 {
732 error ("array must be initialized with a brace-enclosed"
733 " initializer");
734 return error_mark_node;
735 }
736
4038c495
GB
737 return convert_for_initialization (NULL_TREE, type, init,
738 LOOKUP_NORMAL | LOOKUP_ONLYCONVERTING,
8d08fdba
MS
739 "initialization", NULL_TREE, 0);
740 }
4038c495
GB
741}
742
743\f
744/* Set of flags used within process_init_constructor to describe the
745 initializers. */
746#define PICFLAG_ERRONEOUS 1
747#define PICFLAG_NOT_ALL_CONSTANT 2
748#define PICFLAG_NOT_ALL_SIMPLE 4
749
750/* Given an initializer INIT, return the flag (PICFLAG_*) which better
751 describe it. */
752
753static int
754picflag_from_initializer (tree init)
755{
756 if (init == error_mark_node)
757 return PICFLAG_ERRONEOUS;
758 else if (!TREE_CONSTANT (init))
759 return PICFLAG_NOT_ALL_CONSTANT;
760 else if (!initializer_constant_valid_p (init, TREE_TYPE (init)))
761 return PICFLAG_NOT_ALL_SIMPLE;
762 return 0;
763}
8d08fdba 764
4038c495 765/* Subroutine of process_init_constructor, which will process an initializer
d732e98f
KH
766 INIT for an array or vector of type TYPE. Returns the flags (PICFLAG_*)
767 which describe the initializers. */
8d08fdba 768
4038c495
GB
769static int
770process_init_constructor_array (tree type, tree init)
771{
772 unsigned HOST_WIDE_INT i, len = 0;
773 int flags = 0;
774 bool unbounded = false;
775 constructor_elt *ce;
776 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (init);
777
778 gcc_assert (TREE_CODE (type) == ARRAY_TYPE
779 || TREE_CODE (type) == VECTOR_TYPE);
780
781 if (TREE_CODE (type) == ARRAY_TYPE)
8d08fdba 782 {
4038c495
GB
783 tree domain = TYPE_DOMAIN (type);
784 if (domain)
785 len = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (domain))
786 - TREE_INT_CST_LOW (TYPE_MIN_VALUE (domain))
787 + 1);
788 else
789 unbounded = true; /* Take as many as there are. */
8d08fdba 790 }
4038c495
GB
791 else
792 /* Vectors are like simple fixed-size arrays. */
793 len = TYPE_VECTOR_SUBPARTS (type);
8d08fdba 794
fb8549a1
MM
795 /* There cannot be more initializers than needed as otherwise
796 reshape_init would have already rejected the initializer. */
4038c495
GB
797 if (!unbounded)
798 gcc_assert (VEC_length (constructor_elt, v) <= len);
799
800 for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
8d08fdba 801 {
4038c495 802 if (ce->index)
8d08fdba 803 {
4038c495
GB
804 gcc_assert (TREE_CODE (ce->index) == INTEGER_CST);
805 if (compare_tree_int (ce->index, i) != 0)
e135a637
SE
806 {
807 ce->value = error_mark_node;
808 sorry ("non-trivial designated initializers not supported");
809 }
8d08fdba 810 }
4038c495
GB
811 else
812 ce->index = size_int (i);
813 gcc_assert (ce->value);
814 ce->value = digest_init (TREE_TYPE (type), ce->value);
d22c8596 815
4038c495
GB
816 if (ce->value != error_mark_node)
817 gcc_assert (same_type_ignoring_top_level_qualifiers_p
818 (TREE_TYPE (type), TREE_TYPE (ce->value)));
dc26f471 819
4038c495 820 flags |= picflag_from_initializer (ce->value);
8d08fdba
MS
821 }
822
4038c495
GB
823 /* No more initializers. If the array is unbounded, we are done. Otherwise,
824 we must add initializers ourselves. */
825 if (!unbounded)
826 for (; i < len; ++i)
827 {
828 tree next;
829
830 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (type)))
831 {
832 /* If this type needs constructors run for default-initialization,
3b426391 833 we can't rely on the back end to do it for us, so build up
4038c495
GB
834 TARGET_EXPRs. If the type in question is a class, just build
835 one up; if it's an array, recurse. */
836 if (IS_AGGR_TYPE (TREE_TYPE (type)))
837 next = build_functional_cast (TREE_TYPE (type), NULL_TREE);
838 else
839 next = build_constructor (NULL_TREE, NULL);
840 next = digest_init (TREE_TYPE (type), next);
841 }
842 else if (!zero_init_p (TREE_TYPE (type)))
843 next = build_zero_init (TREE_TYPE (type),
844 /*nelts=*/NULL_TREE,
845 /*static_storage_p=*/false);
846 else
847 /* The default zero-initialization is fine for us; don't
848 add anything to the CONSTRUCTOR. */
849 break;
850
3db45ab5 851 flags |= picflag_from_initializer (next);
4038c495
GB
852 CONSTRUCTOR_APPEND_ELT (v, size_int (i), next);
853 }
854
855 CONSTRUCTOR_ELTS (init) = v;
856 return flags;
8d08fdba 857}
8d08fdba 858
4038c495
GB
859/* Subroutine of process_init_constructor, which will process an initializer
860 INIT for a class of type TYPE. Returns the flags (PICFLAG_*) which describe
861 the initializers. */
8d08fdba 862
4038c495
GB
863static int
864process_init_constructor_record (tree type, tree init)
8d08fdba 865{
4038c495
GB
866 VEC(constructor_elt,gc) *v = NULL;
867 int flags = 0;
868 tree field;
869 unsigned HOST_WIDE_INT idx = 0;
870
871 gcc_assert (TREE_CODE (type) == RECORD_TYPE);
872 gcc_assert (!CLASSTYPE_VBASECLASSES (type));
873 gcc_assert (!TYPE_BINFO (type)
874 || !BINFO_N_BASE_BINFOS (TYPE_BINFO (type)));
875 gcc_assert (!TYPE_POLYMORPHIC_P (type));
876
877 /* Generally, we will always have an index for each initializer (which is
878 a FIELD_DECL, put by reshape_init), but compound literals don't go trough
879 reshape_init. So we need to handle both cases. */
880 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
8d08fdba 881 {
4038c495 882 tree next;
8d08fdba 883
4038c495 884 if (!DECL_NAME (field) && DECL_C_BIT_FIELD (field))
ca4feb54 885 {
4038c495
GB
886 flags |= picflag_from_initializer (integer_zero_node);
887 CONSTRUCTOR_APPEND_ELT (v, field, integer_zero_node);
888 continue;
ca4feb54 889 }
8d08fdba 890
4038c495
GB
891 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
892 continue;
893
894 if (idx < VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)))
8d08fdba 895 {
4038c495
GB
896 constructor_elt *ce = VEC_index (constructor_elt,
897 CONSTRUCTOR_ELTS (init), idx);
898 if (ce->index)
8d08fdba 899 {
4038c495
GB
900 /* We can have either a FIELD_DECL or an IDENTIFIER_NODE. The
901 latter case can happen in templates where lookup has to be
902 deferred. */
903 gcc_assert (TREE_CODE (ce->index) == FIELD_DECL
904 || TREE_CODE (ce->index) == IDENTIFIER_NODE);
905 if (ce->index != field
3db45ab5 906 && ce->index != DECL_NAME (field))
e135a637
SE
907 {
908 ce->value = error_mark_node;
909 sorry ("non-trivial designated initializers not supported");
910 }
8d08fdba 911 }
e6267549 912
4038c495
GB
913 gcc_assert (ce->value);
914 next = digest_init (TREE_TYPE (field), ce->value);
915 ++idx;
916 }
917 else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (field)))
918 {
919 /* If this type needs constructors run for
3b426391 920 default-initialization, we can't rely on the back end to do it
4038c495
GB
921 for us, so build up TARGET_EXPRs. If the type in question is
922 a class, just build one up; if it's an array, recurse. */
923 if (IS_AGGR_TYPE (TREE_TYPE (field)))
924 next = build_functional_cast (TREE_TYPE (field), NULL_TREE);
925 else
926 next = build_constructor (NULL_TREE, NULL);
927
928 next = digest_init (TREE_TYPE (field), next);
929
930 /* Warn when some struct elements are implicitly initialized. */
931 warning (OPT_Wmissing_field_initializers,
932 "missing initializer for member %qD", field);
933 }
934 else
935 {
936 if (TREE_READONLY (field))
937 error ("uninitialized const member %qD", field);
938 else if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
939 error ("member %qD with uninitialized const fields", field);
940 else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
941 error ("member %qD is uninitialized reference", field);
942
943 /* Warn when some struct elements are implicitly initialized
944 to zero. */
945 warning (OPT_Wmissing_field_initializers,
946 "missing initializer for member %qD", field);
947
948 if (!zero_init_p (TREE_TYPE (field)))
949 next = build_zero_init (TREE_TYPE (field), /*nelts=*/NULL_TREE,
950 /*static_storage_p=*/false);
e6267549
JM
951 else
952 /* The default zero-initialization is fine for us; don't
4038c495
GB
953 add anything to the CONSTRUCTOR. */
954 continue;
8d08fdba 955 }
4038c495
GB
956
957 flags |= picflag_from_initializer (next);
958 CONSTRUCTOR_APPEND_ELT (v, field, next);
8d08fdba 959 }
8d08fdba 960
4038c495
GB
961 CONSTRUCTOR_ELTS (init) = v;
962 return flags;
963}
8d08fdba 964
4038c495 965/* Subroutine of process_init_constructor, which will process a single
13a44ee0 966 initializer INIT for a union of type TYPE. Returns the flags (PICFLAG_*)
4038c495 967 which describe the initializer. */
8d08fdba 968
4038c495
GB
969static int
970process_init_constructor_union (tree type, tree init)
971{
972 constructor_elt *ce;
8d08fdba 973
4038c495
GB
974 /* If the initializer was empty, use default zero initialization. */
975 if (VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (init)))
976 return 0;
977
978 gcc_assert (VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)) == 1);
979 ce = VEC_index (constructor_elt, CONSTRUCTOR_ELTS (init), 0);
980
981 /* If this element specifies a field, initialize via that field. */
982 if (ce->index)
983 {
984 if (TREE_CODE (ce->index) == FIELD_DECL)
985 ;
986 else if (TREE_CODE (ce->index) == IDENTIFIER_NODE)
987 {
988 /* This can happen within a cast, see g++.dg/opt/cse2.C. */
989 tree name = ce->index;
990 tree field;
991 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
992 if (DECL_NAME (field) == name)
993 break;
994 if (!field)
8d08fdba 995 {
4038c495
GB
996 error ("no field %qD found in union being initialized", field);
997 ce->value = error_mark_node;
8d08fdba 998 }
4038c495
GB
999 ce->index = field;
1000 }
1001 else
1002 {
1003 gcc_assert (TREE_CODE (ce->index) == INTEGER_CST
1004 || TREE_CODE (ce->index) == RANGE_EXPR);
1005 error ("index value instead of field name in union initializer");
1006 ce->value = error_mark_node;
8d08fdba 1007 }
8d08fdba 1008 }
4038c495 1009 else
8d08fdba 1010 {
8d08fdba
MS
1011 /* Find the first named field. ANSI decided in September 1990
1012 that only named fields count here. */
4038c495 1013 tree field = TYPE_FIELDS (type);
17bbb839 1014 while (field && (!DECL_NAME (field) || TREE_CODE (field) != FIELD_DECL))
8d08fdba 1015 field = TREE_CHAIN (field);
cdfc2f2b 1016 gcc_assert (field);
4038c495
GB
1017 ce->index = field;
1018 }
8d08fdba 1019
4038c495
GB
1020 if (ce->value && ce->value != error_mark_node)
1021 ce->value = digest_init (TREE_TYPE (ce->index), ce->value);
8d08fdba 1022
4038c495
GB
1023 return picflag_from_initializer (ce->value);
1024}
8d08fdba 1025
4038c495
GB
1026/* Process INIT, a constructor for a variable of aggregate type TYPE. The
1027 constructor is a brace-enclosed initializer, and will be modified in-place.
1028
1029 Each element is converted to the right type through digest_init, and
1030 missing initializers are added following the language rules (zero-padding,
1031 etc.).
8d08fdba 1032
4038c495
GB
1033 After the execution, the initializer will have TREE_CONSTANT if all elts are
1034 constant, and TREE_STATIC set if, in addition, all elts are simple enough
1035 constants that the assembler and linker can compute them.
3db45ab5 1036
4038c495
GB
1037 The function returns the initializer itself, or error_mark_node in case
1038 of error. */
1039
1040static tree
1041process_init_constructor (tree type, tree init)
1042{
1043 int flags;
1044
1045 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
1046
1047 if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
1048 flags = process_init_constructor_array (type, init);
1049 else if (TREE_CODE (type) == RECORD_TYPE)
1050 flags = process_init_constructor_record (type, init);
1051 else if (TREE_CODE (type) == UNION_TYPE)
1052 flags = process_init_constructor_union (type, init);
1053 else
1054 gcc_unreachable ();
8d08fdba 1055
4038c495 1056 if (flags & PICFLAG_ERRONEOUS)
8d08fdba
MS
1057 return error_mark_node;
1058
4038c495 1059 TREE_TYPE (init) = type;
8c081e84 1060 if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE)
4038c495
GB
1061 cp_complete_array_type (&TREE_TYPE (init), init, /*do_default=*/0);
1062 if (!(flags & PICFLAG_NOT_ALL_CONSTANT))
6de9cd9a 1063 {
4038c495
GB
1064 TREE_CONSTANT (init) = 1;
1065 TREE_INVARIANT (init) = 1;
1066 if (!(flags & PICFLAG_NOT_ALL_SIMPLE))
1067 TREE_STATIC (init) = 1;
6de9cd9a 1068 }
4038c495 1069 return init;
8d08fdba
MS
1070}
1071\f
1072/* Given a structure or union value DATUM, construct and return
1073 the structure or union component which results from narrowing
a29e1034 1074 that value to the base specified in BASETYPE. For example, given the
8d08fdba
MS
1075 hierarchy
1076
1077 class L { int ii; };
1078 class A : L { ... };
1079 class B : L { ... };
1080 class C : A, B { ... };
1081
1082 and the declaration
1083
1084 C x;
1085
1086 then the expression
1087
be99da77 1088 x.A::ii refers to the ii member of the L part of
38e01259 1089 the A part of the C object named by X. In this case,
aa52c1ff
JM
1090 DATUM would be x, and BASETYPE would be A.
1091
477f6664
JM
1092 I used to think that this was nonconformant, that the standard specified
1093 that first we look up ii in A, then convert x to an L& and pull out the
1094 ii part. But in fact, it does say that we convert x to an A&; A here
a29e1034
JM
1095 is known as the "naming class". (jason 2000-12-19)
1096
1097 BINFO_P points to a variable initialized either to NULL_TREE or to the
1098 binfo for the specific base subobject we want to convert to. */
8d08fdba
MS
1099
1100tree
0a8cb79e 1101build_scoped_ref (tree datum, tree basetype, tree* binfo_p)
8d08fdba 1102{
338d90b8 1103 tree binfo;
8d08fdba
MS
1104
1105 if (datum == error_mark_node)
1106 return error_mark_node;
a29e1034
JM
1107 if (*binfo_p)
1108 binfo = *binfo_p;
1109 else
1110 binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check, NULL);
8d08fdba 1111
a29e1034
JM
1112 if (!binfo || binfo == error_mark_node)
1113 {
1114 *binfo_p = NULL_TREE;
1115 if (!binfo)
1116 error_not_base_type (basetype, TREE_TYPE (datum));
1117 return error_mark_node;
1118 }
8d08fdba 1119
a29e1034
JM
1120 *binfo_p = binfo;
1121 return build_base_path (PLUS_EXPR, datum, binfo, 1);
8d08fdba
MS
1122}
1123
1124/* Build a reference to an object specified by the C++ `->' operator.
1125 Usually this just involves dereferencing the object, but if the
1126 `->' operator is overloaded, then such overloads must be
1127 performed until an object which does not have the `->' operator
1128 overloaded is found. An error is reported when circular pointer
1129 delegation is detected. */
e92cc029 1130
8d08fdba 1131tree
d17811fd 1132build_x_arrow (tree expr)
8d08fdba 1133{
d17811fd 1134 tree orig_expr = expr;
8d08fdba 1135 tree types_memoized = NULL_TREE;
d17811fd 1136 tree type = TREE_TYPE (expr);
a703fb38 1137 tree last_rval = NULL_TREE;
8d08fdba
MS
1138
1139 if (type == error_mark_node)
1140 return error_mark_node;
1141
5156628f 1142 if (processing_template_decl)
d17811fd
MM
1143 {
1144 if (type_dependent_expression_p (expr))
1145 return build_min_nt (ARROW_EXPR, expr);
1146 expr = build_non_dependent_expr (expr);
1147 }
5566b478 1148
3c215895 1149 if (IS_AGGR_TYPE (type))
8d08fdba 1150 {
d17811fd 1151 while ((expr = build_new_op (COMPONENT_REF, LOOKUP_NORMAL, expr,
ec835fb2
MM
1152 NULL_TREE, NULL_TREE,
1153 /*overloaded_p=*/NULL)))
8d08fdba 1154 {
d17811fd 1155 if (expr == error_mark_node)
8d08fdba
MS
1156 return error_mark_node;
1157
d17811fd 1158 if (value_member (TREE_TYPE (expr), types_memoized))
8d08fdba 1159 {
8251199e 1160 error ("circular pointer delegation detected");
8d08fdba
MS
1161 return error_mark_node;
1162 }
1163 else
1164 {
d17811fd 1165 types_memoized = tree_cons (NULL_TREE, TREE_TYPE (expr),
8d08fdba
MS
1166 types_memoized);
1167 }
d17811fd 1168 last_rval = expr;
c8094d83 1169 }
297dcfb3
MM
1170
1171 if (last_rval == NULL_TREE)
1172 {
a82e1a7d 1173 error ("base operand of %<->%> has non-pointer type %qT", type);
297dcfb3
MM
1174 return error_mark_node;
1175 }
1176
8d08fdba
MS
1177 if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1178 last_rval = convert_from_reference (last_rval);
1179 }
1180 else
d17811fd 1181 last_rval = decay_conversion (expr);
8d08fdba 1182
8d08fdba 1183 if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
d17811fd
MM
1184 {
1185 if (processing_template_decl)
8e1daa34
NS
1186 {
1187 expr = build_min_non_dep (ARROW_EXPR, last_rval, orig_expr);
04c06002 1188 /* It will be dereferenced. */
8e1daa34
NS
1189 TREE_TYPE (expr) = TREE_TYPE (TREE_TYPE (last_rval));
1190 return expr;
1191 }
d17811fd
MM
1192
1193 return build_indirect_ref (last_rval, NULL);
1194 }
8d08fdba 1195
8d08fdba 1196 if (types_memoized)
a82e1a7d 1197 error ("result of %<operator->()%> yields non-pointer result");
8d08fdba 1198 else
a82e1a7d 1199 error ("base operand of %<->%> is not a pointer");
8d08fdba
MS
1200 return error_mark_node;
1201}
1202
d6b4ea85
MM
1203/* Return an expression for "DATUM .* COMPONENT". DATUM has not
1204 already been checked out to be of aggregate type. */
e92cc029 1205
8d08fdba 1206tree
0a8cb79e 1207build_m_component_ref (tree datum, tree component)
8d08fdba 1208{
d6b4ea85 1209 tree ptrmem_type;
c3e899c1 1210 tree objtype;
d6b4ea85 1211 tree type;
71851aaa 1212 tree binfo;
cad7e87b 1213 tree ctype;
8d08fdba 1214
a8fe5a30 1215 if (error_operand_p (datum) || error_operand_p (component))
f1a3f197
MM
1216 return error_mark_node;
1217
d6b4ea85 1218 ptrmem_type = TREE_TYPE (component);
a5ac359a 1219 if (!TYPE_PTR_TO_MEMBER_P (ptrmem_type))
8d08fdba 1220 {
a82e1a7d 1221 error ("%qE cannot be used as a member pointer, since it is of "
0cbd7506 1222 "type %qT",
d6b4ea85 1223 component, ptrmem_type);
8d08fdba
MS
1224 return error_mark_node;
1225 }
c8094d83
MS
1226
1227 objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
51c184be
MS
1228 if (! IS_AGGR_TYPE (objtype))
1229 {
a82e1a7d 1230 error ("cannot apply member pointer %qE to %qE, which is of "
41990f96 1231 "non-class type %qT",
0cbd7506 1232 component, datum, objtype);
51c184be
MS
1233 return error_mark_node;
1234 }
71851aaa 1235
d6b4ea85 1236 type = TYPE_PTRMEM_POINTED_TO_TYPE (ptrmem_type);
cad7e87b
NS
1237 ctype = complete_type (TYPE_PTRMEM_CLASS_TYPE (ptrmem_type));
1238
1239 if (!COMPLETE_TYPE_P (ctype))
8d08fdba 1240 {
cad7e87b
NS
1241 if (!same_type_p (ctype, objtype))
1242 goto mismatch;
1243 binfo = NULL;
1244 }
1245 else
1246 {
1247 binfo = lookup_base (objtype, ctype, ba_check, NULL);
c8094d83 1248
cad7e87b
NS
1249 if (!binfo)
1250 {
1251 mismatch:
a82e1a7d 1252 error ("pointer to member type %qT incompatible with object "
0cbd7506 1253 "type %qT",
cad7e87b
NS
1254 type, objtype);
1255 return error_mark_node;
1256 }
1257 else if (binfo == error_mark_node)
1258 return error_mark_node;
8d08fdba
MS
1259 }
1260
d6b4ea85
MM
1261 if (TYPE_PTRMEM_P (ptrmem_type))
1262 {
b5119fa1
RG
1263 tree ptype;
1264
d6b4ea85
MM
1265 /* Compute the type of the field, as described in [expr.ref].
1266 There's no such thing as a mutable pointer-to-member, so
1267 things are not as complex as they are for references to
1268 non-static data members. */
1269 type = cp_build_qualified_type (type,
c8094d83 1270 (cp_type_quals (type)
d6b4ea85 1271 | cp_type_quals (TREE_TYPE (datum))));
cad7e87b
NS
1272
1273 datum = build_address (datum);
c8094d83 1274
cad7e87b
NS
1275 /* Convert object to the correct base. */
1276 if (binfo)
1277 datum = build_base_path (PLUS_EXPR, datum, binfo, 1);
c8094d83 1278
a5ac359a
MM
1279 /* Build an expression for "object + offset" where offset is the
1280 value stored in the pointer-to-data-member. */
b5119fa1
RG
1281 ptype = build_pointer_type (type);
1282 datum = build2 (POINTER_PLUS_EXPR, ptype,
1283 fold_convert (ptype, datum),
1284 build_nop (sizetype, component));
d6b4ea85
MM
1285 return build_indirect_ref (datum, 0);
1286 }
1287 else
f293ce4b 1288 return build2 (OFFSET_REF, type, datum, component);
8d08fdba
MS
1289}
1290
fc378698 1291/* Return a tree node for the expression TYPENAME '(' PARMS ')'. */
e92cc029 1292
8d08fdba 1293tree
0a8cb79e 1294build_functional_cast (tree exp, tree parms)
8d08fdba
MS
1295{
1296 /* This is either a call to a constructor,
1297 or a C cast in C++'s `functional' notation. */
fc378698 1298 tree type;
8d08fdba
MS
1299
1300 if (exp == error_mark_node || parms == error_mark_node)
1301 return error_mark_node;
1302
4b0d3cbe 1303 if (TREE_CODE (exp) == TYPE_DECL)
45537677 1304 type = TREE_TYPE (exp);
8d08fdba
MS
1305 else
1306 type = exp;
1307
5156628f 1308 if (processing_template_decl)
8e1daa34
NS
1309 {
1310 tree t = build_min (CAST_EXPR, type, parms);
1311 /* We don't know if it will or will not have side effects. */
1312 TREE_SIDE_EFFECTS (t) = 1;
1313 return t;
1314 }
5566b478 1315
8d08fdba
MS
1316 if (! IS_AGGR_TYPE (type))
1317 {
8d08fdba 1318 if (parms == NULL_TREE)
f0b99d6c 1319 return cp_convert (type, integer_zero_node);
8ccc31eb 1320
f0b99d6c
RS
1321 /* This must build a C cast. */
1322 parms = build_x_compound_expr_from_list (parms, "functional cast");
faf5394a 1323 return build_c_cast (type, parms);
8d08fdba
MS
1324 }
1325
45537677
MS
1326 /* Prepare to evaluate as a call to a constructor. If this expression
1327 is actually used, for example,
c8094d83 1328
45537677 1329 return X (arg1, arg2, ...);
c8094d83 1330
45537677
MS
1331 then the slot being initialized will be filled in. */
1332
d0f062fb
NS
1333 if (!complete_type_or_else (type, NULL_TREE))
1334 return error_mark_node;
a7a64a77
MM
1335 if (abstract_virtuals_error (NULL_TREE, type))
1336 return error_mark_node;
8d08fdba
MS
1337
1338 if (parms && TREE_CHAIN (parms) == NULL_TREE)
faf5394a 1339 return build_c_cast (type, TREE_VALUE (parms));
8d08fdba 1340
c7b0e027
MM
1341 /* We need to zero-initialize POD types. */
1342 if (parms == NULL_TREE
1343 && !CLASSTYPE_NON_POD_P (type)
3551c177
JM
1344 && TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
1345 {
32a11c08
MM
1346 exp = build_zero_init (type,
1347 /*nelts=*/NULL_TREE,
1348 /*static_storage_p=*/false);
3551c177
JM
1349 return get_target_expr (exp);
1350 }
1351
4ba126e4 1352 exp = build_special_member_call (NULL_TREE, complete_ctor_identifier, parms,
cad7e87b 1353 type, LOOKUP_NORMAL);
8d08fdba 1354
fc378698 1355 if (exp == error_mark_node)
a0a33927 1356 return error_mark_node;
8d08fdba 1357
fc378698 1358 return build_cplus_new (type, exp);
8d08fdba
MS
1359}
1360\f
46b02c6d 1361
4cc1d462
NS
1362/* Add new exception specifier SPEC, to the LIST we currently have.
1363 If it's already in LIST then do nothing.
1364 Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1365 know what we're doing. */
1366
1367tree
0a8cb79e 1368add_exception_specifier (tree list, tree spec, int complain)
4cc1d462 1369{
ef09717a 1370 bool ok;
4cc1d462 1371 tree core = spec;
ef09717a 1372 bool is_ptr;
5aa3396c 1373 int diag_type = -1; /* none */
c8094d83 1374
4cc1d462
NS
1375 if (spec == error_mark_node)
1376 return list;
c8094d83 1377
50bc768d 1378 gcc_assert (spec && (!list || TREE_VALUE (list)));
c8094d83 1379
4cc1d462
NS
1380 /* [except.spec] 1, type in an exception specifier shall not be
1381 incomplete, or pointer or ref to incomplete other than pointer
1382 to cv void. */
1383 is_ptr = TREE_CODE (core) == POINTER_TYPE;
1384 if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1385 core = TREE_TYPE (core);
1386 if (complain < 0)
ef09717a 1387 ok = true;
b72801e2 1388 else if (VOID_TYPE_P (core))
4cc1d462
NS
1389 ok = is_ptr;
1390 else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
ef09717a 1391 ok = true;
baeb4732 1392 else if (processing_template_decl)
ef09717a 1393 ok = true;
4cc1d462 1394 else
5aa3396c 1395 {
ef09717a 1396 ok = true;
5aa3396c 1397 /* 15.4/1 says that types in an exception specifier must be complete,
0cbd7506
MS
1398 but it seems more reasonable to only require this on definitions
1399 and calls. So just give a pedwarn at this point; we will give an
1400 error later if we hit one of those two cases. */
5aa3396c
JM
1401 if (!COMPLETE_TYPE_P (complete_type (core)))
1402 diag_type = 2; /* pedwarn */
1403 }
baeb4732 1404
4cc1d462
NS
1405 if (ok)
1406 {
1407 tree probe;
c8094d83 1408
4cc1d462 1409 for (probe = list; probe; probe = TREE_CHAIN (probe))
0cbd7506
MS
1410 if (same_type_p (TREE_VALUE (probe), spec))
1411 break;
4cc1d462 1412 if (!probe)
80b1331c 1413 list = tree_cons (NULL_TREE, spec, list);
4cc1d462 1414 }
5aa3396c
JM
1415 else
1416 diag_type = 0; /* error */
c8094d83 1417
5aa3396c
JM
1418 if (diag_type >= 0 && complain)
1419 cxx_incomplete_type_diagnostic (NULL_TREE, core, diag_type);
1420
4cc1d462
NS
1421 return list;
1422}
03378143
NS
1423
1424/* Combine the two exceptions specifier lists LIST and ADD, and return
c6002625 1425 their union. */
03378143
NS
1426
1427tree
0a8cb79e 1428merge_exception_specifiers (tree list, tree add)
03378143
NS
1429{
1430 if (!list || !add)
1431 return NULL_TREE;
1432 else if (!TREE_VALUE (list))
1433 return add;
1434 else if (!TREE_VALUE (add))
1435 return list;
1436 else
1437 {
1438 tree orig_list = list;
c8094d83 1439
03378143 1440 for (; add; add = TREE_CHAIN (add))
0cbd7506
MS
1441 {
1442 tree spec = TREE_VALUE (add);
1443 tree probe;
1444
1445 for (probe = orig_list; probe; probe = TREE_CHAIN (probe))
1446 if (same_type_p (TREE_VALUE (probe), spec))
1447 break;
1448 if (!probe)
1449 {
1450 spec = build_tree_list (NULL_TREE, spec);
1451 TREE_CHAIN (spec) = list;
1452 list = spec;
1453 }
1454 }
03378143
NS
1455 }
1456 return list;
1457}
5aa3396c
JM
1458
1459/* Subroutine of build_call. Ensure that each of the types in the
1460 exception specification is complete. Technically, 15.4/1 says that
1461 they need to be complete when we see a declaration of the function,
1462 but we should be able to get away with only requiring this when the
1463 function is defined or called. See also add_exception_specifier. */
1464
1465void
0a8cb79e 1466require_complete_eh_spec_types (tree fntype, tree decl)
5aa3396c
JM
1467{
1468 tree raises;
1469 /* Don't complain about calls to op new. */
1470 if (decl && DECL_ARTIFICIAL (decl))
1471 return;
1472 for (raises = TYPE_RAISES_EXCEPTIONS (fntype); raises;
1473 raises = TREE_CHAIN (raises))
1474 {
1475 tree type = TREE_VALUE (raises);
1476 if (type && !COMPLETE_TYPE_P (type))
1477 {
1478 if (decl)
1479 error
a82e1a7d 1480 ("call to function %qD which throws incomplete type %q#T",
5aa3396c
JM
1481 decl, type);
1482 else
a82e1a7d 1483 error ("call to function which throws incomplete type %q#T",
5aa3396c
JM
1484 decl);
1485 }
1486 }
1487}
7fb213d8
GB
1488
1489\f
1490#include "gt-cp-typeck2.h"