OSDN Git Service

* tree.c (stabilize_expr): Handle xvalues properly.
[pf3gnuchains/gcc-fork.git] / gcc / cp / typeck2.c
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)
7
8 This file is part of GCC.
9
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)
13 any later version.
14
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.
19
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/>.  */
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
28    checks, and some optimization.  */
29
30 #include "config.h"
31 #include "system.h"
32 #include "coretypes.h"
33 #include "tm.h"
34 #include "tree.h"
35 #include "intl.h"
36 #include "cp-tree.h"
37 #include "flags.h"
38 #include "toplev.h"
39 #include "output.h"
40 #include "diagnostic-core.h"
41
42 static tree
43 process_init_constructor (tree type, tree init);
44
45
46 /* Print an error message stemming from an attempt to use
47    BASETYPE as a base class for TYPE.  */
48
49 tree
50 error_not_base_type (tree basetype, tree type)
51 {
52   if (TREE_CODE (basetype) == FUNCTION_DECL)
53     basetype = DECL_CONTEXT (basetype);
54   error ("type %qT is not a base type for type %qT", basetype, type);
55   return error_mark_node;
56 }
57
58 tree
59 binfo_or_else (tree base, tree type)
60 {
61   tree binfo = lookup_base (type, base, ba_unique, NULL);
62
63   if (binfo == error_mark_node)
64     return NULL_TREE;
65   else if (!binfo)
66     error_not_base_type (base, type);
67   return binfo;
68 }
69
70 /* According to ARM $7.1.6, "A `const' object may be initialized, but its
71    value may not be changed thereafter.  */
72
73 void
74 readonly_error (tree arg, readonly_error_kind errstring)
75 {
76  
77 /* This macro is used to emit diagnostics to ensure that all format
78    strings are complete sentences, visible to gettext and checked at
79    compile time.  */
80  
81 #define ERROR_FOR_ASSIGNMENT(AS, ASM, IN, DE, ARG)                      \
82   do {                                                                  \
83     switch (errstring)                                                  \
84       {                                                                 \
85       case REK_ASSIGNMENT:                                              \
86         error(AS, ARG);                                                 \
87         break;                                                          \
88       case REK_ASSIGNMENT_ASM:                                          \
89         error(ASM, ARG);                                                \
90         break;                                                          \
91       case REK_INCREMENT:                                               \
92         error (IN, ARG);                                                \
93         break;                                                          \
94       case REK_DECREMENT:                                               \
95         error (DE, ARG);                                                \
96         break;                                                          \
97       default:                                                          \
98         gcc_unreachable ();                                             \
99       }                                                                 \
100   } while (0)
101
102   if (TREE_CODE (arg) == COMPONENT_REF)
103     {
104       if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
105         ERROR_FOR_ASSIGNMENT (G_("assignment of "
106                                  "data-member %qD in read-only structure"),
107                               G_("assignment (via 'asm' output) of "
108                                  "data-member %qD in read-only structure"),
109                               G_("increment of "
110                                  "data-member %qD in read-only structure"),
111                               G_("decrement of "
112                                  "data-member %qD in read-only structure"),
113                               TREE_OPERAND (arg, 1));
114       else
115         ERROR_FOR_ASSIGNMENT (G_("assignment of "
116                                  "read-only data-member %qD"),
117                               G_("assignment (via 'asm' output) of "
118                                  "read-only data-member %qD"),
119                               G_("increment of "
120                                  "read-only data-member %qD"),
121                               G_("decrement of "
122                                  "read-only data-member %qD"),
123                               TREE_OPERAND (arg, 1));
124     }
125   else if (TREE_CODE (arg) == VAR_DECL)
126     {
127       if (DECL_LANG_SPECIFIC (arg)
128           && DECL_IN_AGGR_P (arg)
129           && !TREE_STATIC (arg))
130         ERROR_FOR_ASSIGNMENT (G_("assignment of "
131                               "constant field %qD"),
132                               G_("assignment (via 'asm' output) of "
133                               "constant field %qD"),
134                               G_("increment of "
135                               "constant field %qD"),
136                               G_("decrement of "
137                               "constant field %qD"),
138                               arg);
139       else
140         ERROR_FOR_ASSIGNMENT (G_("assignment of "
141                               "read-only variable %qD"),
142                               G_("assignment (via 'asm' output) of "
143                               "read-only variable %qD"),
144                               G_("increment of "
145                               "read-only variable %qD"),
146                               G_("decrement of "
147                               "read-only variable %qD"),
148                               arg);
149
150     }
151   else if (TREE_CODE (arg) == PARM_DECL)
152     ERROR_FOR_ASSIGNMENT (G_("assignment of "
153                              "read-only parameter %qD"),
154                           G_("assignment (via 'asm' output) of "
155                              "read-only parameter %qD"),
156                           G_("increment of "
157                              "read-only parameter %qD"),
158                           G_("decrement of "
159                              "read-only parameter %qD"),
160                           arg);  
161   else if (TREE_CODE (arg) == INDIRECT_REF
162            && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
163            && (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL
164                || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
165     ERROR_FOR_ASSIGNMENT (G_("assignment of "
166                              "read-only reference %qD"),
167                           G_("assignment (via 'asm' output) of "
168                              "read-only reference %qD"), 
169                           G_("increment of "
170                              "read-only reference %qD"),
171                           G_("decrement of "
172                              "read-only reference %qD"),
173                           TREE_OPERAND (arg, 0));
174   else if (TREE_CODE (arg) == RESULT_DECL)
175     ERROR_FOR_ASSIGNMENT (G_("assignment of "
176                              "read-only named return value %qD"),
177                           G_("assignment (via 'asm' output) of "
178                              "read-only named return value %qD"),
179                           G_("increment of "
180                              "read-only named return value %qD"),
181                           G_("decrement of "
182                              "read-only named return value %qD"),
183                           arg);
184   else if (TREE_CODE (arg) == FUNCTION_DECL)
185     ERROR_FOR_ASSIGNMENT (G_("assignment of "
186                              "function %qD"),
187                           G_("assignment (via 'asm' output) of "
188                              "function %qD"),
189                           G_("increment of "
190                              "function %qD"),
191                           G_("decrement of "
192                              "function %qD"),
193                           arg);
194   else
195     ERROR_FOR_ASSIGNMENT (G_("assignment of "
196                              "read-only location %qE"),
197                           G_("assignment (via 'asm' output) of "
198                              "read-only location %qE"),
199                           G_("increment of "
200                              "read-only location %qE"),
201                           G_("decrement of "
202                              "read-only location %qE"),
203                           arg);
204 }
205
206 \f
207 /* Structure that holds information about declarations whose type was
208    incomplete and we could not check whether it was abstract or not.  */
209
210 struct GTY((chain_next ("%h.next"))) pending_abstract_type {
211   /* Declaration which we are checking for abstractness. It is either
212      a DECL node, or an IDENTIFIER_NODE if we do not have a full
213      declaration available.  */
214   tree decl;
215
216   /* Type which will be checked for abstractness.  */
217   tree type;
218
219   /* Position of the declaration. This is only needed for IDENTIFIER_NODEs,
220      because DECLs already carry locus information.  */
221   location_t locus;
222
223   /* Link to the next element in list.  */
224   struct pending_abstract_type* next;
225 };
226
227
228 /* Compute the hash value of the node VAL. This function is used by the
229    hash table abstract_pending_vars.  */
230
231 static hashval_t
232 pat_calc_hash (const void* val)
233 {
234   const struct pending_abstract_type *pat =
235      (const struct pending_abstract_type *) val;
236   return (hashval_t) TYPE_UID (pat->type);
237 }
238
239
240 /* Compare node VAL1 with the type VAL2. This function is used by the
241    hash table abstract_pending_vars.  */
242
243 static int
244 pat_compare (const void* val1, const void* val2)
245 {
246   const struct pending_abstract_type *const pat1 =
247      (const struct pending_abstract_type *) val1;
248   const_tree const type2 = (const_tree)val2;
249
250   return (pat1->type == type2);
251 }
252
253 /* Hash table that maintains pending_abstract_type nodes, for which we still
254    need to check for type abstractness.  The key of the table is the type
255    of the declaration.  */
256 static GTY ((param_is (struct pending_abstract_type)))
257 htab_t abstract_pending_vars = NULL;
258
259
260 /* This function is called after TYPE is completed, and will check if there
261    are pending declarations for which we still need to verify the abstractness
262    of TYPE, and emit a diagnostic (through abstract_virtuals_error) if TYPE
263    turned out to be incomplete.  */
264
265 void
266 complete_type_check_abstract (tree type)
267 {
268   void **slot;
269   struct pending_abstract_type *pat;
270   location_t cur_loc = input_location;
271
272   gcc_assert (COMPLETE_TYPE_P (type));
273
274   if (!abstract_pending_vars)
275     return;
276
277   /* Retrieve the list of pending declarations for this type.  */
278   slot = htab_find_slot_with_hash (abstract_pending_vars, type,
279                                    (hashval_t)TYPE_UID (type), NO_INSERT);
280   if (!slot)
281     return;
282   pat = (struct pending_abstract_type*)*slot;
283   gcc_assert (pat);
284
285   /* If the type is not abstract, do not do anything.  */
286   if (CLASSTYPE_PURE_VIRTUALS (type))
287     {
288       struct pending_abstract_type *prev = 0, *next;
289
290       /* Reverse the list to emit the errors in top-down order.  */
291       for (; pat; pat = next)
292         {
293           next = pat->next;
294           pat->next = prev;
295           prev = pat;
296         }
297       pat = prev;
298
299       /* Go through the list, and call abstract_virtuals_error for each
300         element: it will issue a diagnostic if the type is abstract.  */
301       while (pat)
302         {
303           gcc_assert (type == pat->type);
304
305           /* Tweak input_location so that the diagnostic appears at the correct
306             location. Notice that this is only needed if the decl is an
307             IDENTIFIER_NODE.  */
308           input_location = pat->locus;
309           abstract_virtuals_error (pat->decl, pat->type);
310           pat = pat->next;
311         }
312     }
313
314   htab_clear_slot (abstract_pending_vars, slot);
315
316   input_location = cur_loc;
317 }
318
319
320 /* If TYPE has abstract virtual functions, issue an error about trying
321    to create an object of that type.  DECL is the object declared, or
322    NULL_TREE if the declaration is unavailable.  Returns 1 if an error
323    occurred; zero if all was well.  */
324
325 int
326 abstract_virtuals_error (tree decl, tree type)
327 {
328   VEC(tree,gc) *pure;
329
330   /* This function applies only to classes. Any other entity can never
331      be abstract.  */
332   if (!CLASS_TYPE_P (type))
333     return 0;
334   type = TYPE_MAIN_VARIANT (type);
335
336   /* If the type is incomplete, we register it within a hash table,
337      so that we can check again once it is completed. This makes sense
338      only for objects for which we have a declaration or at least a
339      name.  */
340   if (!COMPLETE_TYPE_P (type))
341     {
342       void **slot;
343       struct pending_abstract_type *pat;
344
345       gcc_assert (!decl || DECL_P (decl)
346                   || TREE_CODE (decl) == IDENTIFIER_NODE);
347
348       if (!abstract_pending_vars)
349         abstract_pending_vars = htab_create_ggc (31, &pat_calc_hash,
350                                                 &pat_compare, NULL);
351
352       slot = htab_find_slot_with_hash (abstract_pending_vars, type,
353                                       (hashval_t)TYPE_UID (type), INSERT);
354
355       pat = ggc_alloc_pending_abstract_type ();
356       pat->type = type;
357       pat->decl = decl;
358       pat->locus = ((decl && DECL_P (decl))
359                     ? DECL_SOURCE_LOCATION (decl)
360                     : input_location);
361
362       pat->next = (struct pending_abstract_type *) *slot;
363       *slot = pat;
364
365       return 0;
366     }
367
368   if (!TYPE_SIZE (type))
369     /* TYPE is being defined, and during that time
370        CLASSTYPE_PURE_VIRTUALS holds the inline friends.  */
371     return 0;
372
373   pure = CLASSTYPE_PURE_VIRTUALS (type);
374   if (!pure)
375     return 0;
376
377   if (decl)
378     {
379       if (TREE_CODE (decl) == RESULT_DECL)
380         return 0;
381
382       if (TREE_CODE (decl) == VAR_DECL)
383         error ("cannot declare variable %q+D to be of abstract "
384                "type %qT", decl, type);
385       else if (TREE_CODE (decl) == PARM_DECL)
386         error ("cannot declare parameter %q+D to be of abstract type %qT",
387                decl, type);
388       else if (TREE_CODE (decl) == FIELD_DECL)
389         error ("cannot declare field %q+D to be of abstract type %qT",
390                decl, type);
391       else if (TREE_CODE (decl) == FUNCTION_DECL
392                && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
393         error ("invalid abstract return type for member function %q+#D", decl);
394       else if (TREE_CODE (decl) == FUNCTION_DECL)
395         error ("invalid abstract return type for function %q+#D", decl);
396       else if (TREE_CODE (decl) == IDENTIFIER_NODE)
397         /* Here we do not have location information.  */
398         error ("invalid abstract type %qT for %qE", type, decl);
399       else
400         error ("invalid abstract type for %q+D", decl);
401     }
402   else
403     error ("cannot allocate an object of abstract type %qT", type);
404
405   /* Only go through this once.  */
406   if (VEC_length (tree, pure))
407     {
408       unsigned ix;
409       tree fn;
410
411       inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
412               "  because the following virtual functions are pure within %qT:",
413               type);
414
415       FOR_EACH_VEC_ELT (tree, pure, ix, fn)
416         inform (input_location, "\t%+#D", fn);
417       /* Now truncate the vector.  This leaves it non-null, so we know
418          there are pure virtuals, but empty so we don't list them out
419          again.  */
420       VEC_truncate (tree, pure, 0);
421     }
422   else
423     inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
424             "  since type %qT has pure virtual functions",
425             type);
426
427   return 1;
428 }
429
430 /* Print an error message for invalid use of an incomplete type.
431    VALUE is the expression that was used (or 0 if that isn't known)
432    and TYPE is the type that was invalid.  DIAG_KIND indicates the
433    type of diagnostic (see diagnostic.def).  */
434
435 void
436 cxx_incomplete_type_diagnostic (const_tree value, const_tree type, 
437                                 diagnostic_t diag_kind)
438 {
439   int decl = 0;
440
441   gcc_assert (diag_kind == DK_WARNING 
442               || diag_kind == DK_PEDWARN 
443               || diag_kind == DK_ERROR);
444
445   /* Avoid duplicate error message.  */
446   if (TREE_CODE (type) == ERROR_MARK)
447     return;
448
449   if (value != 0 && (TREE_CODE (value) == VAR_DECL
450                      || TREE_CODE (value) == PARM_DECL
451                      || TREE_CODE (value) == FIELD_DECL))
452     {
453       emit_diagnostic (diag_kind, input_location, 0,
454                        "%q+D has incomplete type", value);
455       decl = 1;
456     }
457  retry:
458   /* We must print an error message.  Be clever about what it says.  */
459
460   switch (TREE_CODE (type))
461     {
462     case RECORD_TYPE:
463     case UNION_TYPE:
464     case ENUMERAL_TYPE:
465       if (!decl)
466         emit_diagnostic (diag_kind, input_location, 0,
467                          "invalid use of incomplete type %q#T", type);
468       if (!TYPE_TEMPLATE_INFO (type))
469         emit_diagnostic (diag_kind, input_location, 0,
470                          "forward declaration of %q+#T", type);
471       else
472         emit_diagnostic (diag_kind, input_location, 0,
473                          "declaration of %q+#T", type);
474       break;
475
476     case VOID_TYPE:
477       emit_diagnostic (diag_kind, input_location, 0,
478                        "invalid use of %qT", type);
479       break;
480
481     case ARRAY_TYPE:
482       if (TYPE_DOMAIN (type))
483         {
484           type = TREE_TYPE (type);
485           goto retry;
486         }
487       emit_diagnostic (diag_kind, input_location, 0,
488                        "invalid use of array with unspecified bounds");
489       break;
490
491     case OFFSET_TYPE:
492     bad_member:
493       emit_diagnostic (diag_kind, input_location, 0,
494                        "invalid use of member (did you forget the %<&%> ?)");
495       break;
496
497     case TEMPLATE_TYPE_PARM:
498       if (is_auto (type))
499         emit_diagnostic (diag_kind, input_location, 0,
500                          "invalid use of %<auto%>");
501       else
502         emit_diagnostic (diag_kind, input_location, 0,
503                          "invalid use of template type parameter %qT", type);
504       break;
505
506     case BOUND_TEMPLATE_TEMPLATE_PARM:
507       emit_diagnostic (diag_kind, input_location, 0,
508                        "invalid use of template template parameter %qT",
509                        TYPE_NAME (type));
510       break;
511
512     case TYPENAME_TYPE:
513       emit_diagnostic (diag_kind, input_location, 0,
514                        "invalid use of dependent type %qT", type);
515       break;
516
517     case LANG_TYPE:
518       gcc_assert (type == unknown_type_node);
519       if (value && TREE_CODE (value) == COMPONENT_REF)
520         goto bad_member;
521       else if (value && TREE_CODE (value) == ADDR_EXPR)
522         emit_diagnostic (diag_kind, input_location, 0,
523                          "address of overloaded function with no contextual "
524                          "type information");
525       else if (value && TREE_CODE (value) == OVERLOAD)
526         emit_diagnostic (diag_kind, input_location, 0,
527                          "overloaded function with no contextual type information");
528       else
529         emit_diagnostic (diag_kind, input_location, 0,
530                          "insufficient contextual information to determine type");
531       break;
532
533     default:
534       gcc_unreachable ();
535     }
536 }
537
538 /* Backward-compatibility interface to incomplete_type_diagnostic;
539    required by ../tree.c.  */
540 #undef cxx_incomplete_type_error
541 void
542 cxx_incomplete_type_error (const_tree value, const_tree type)
543 {
544   cxx_incomplete_type_diagnostic (value, type, DK_ERROR);
545 }
546
547 \f
548 /* The recursive part of split_nonconstant_init.  DEST is an lvalue
549    expression to which INIT should be assigned.  INIT is a CONSTRUCTOR.  */
550
551 static void
552 split_nonconstant_init_1 (tree dest, tree *initp)
553 {
554   unsigned HOST_WIDE_INT idx;
555   tree init = *initp;
556   tree field_index, value;
557   tree type = TREE_TYPE (dest);
558   tree inner_type = NULL;
559   bool array_type_p = false;
560   HOST_WIDE_INT num_type_elements, num_initialized_elements;
561
562   switch (TREE_CODE (type))
563     {
564     case ARRAY_TYPE:
565       inner_type = TREE_TYPE (type);
566       array_type_p = true;
567       /* FALLTHRU */
568
569     case RECORD_TYPE:
570     case UNION_TYPE:
571     case QUAL_UNION_TYPE:
572       num_initialized_elements = 0;
573       FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init), idx,
574                                 field_index, value)
575         {
576           /* The current implementation of this algorithm assumes that
577              the field was set for all the elements. This is usually done
578              by process_init_constructor.  */
579           gcc_assert (field_index);
580
581           if (!array_type_p)
582             inner_type = TREE_TYPE (field_index);
583
584           if (TREE_CODE (value) == CONSTRUCTOR)
585             {
586               tree sub;
587
588               if (array_type_p)
589                 sub = build4 (ARRAY_REF, inner_type, dest, field_index,
590                               NULL_TREE, NULL_TREE);
591               else
592                 sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
593                               NULL_TREE);
594
595               split_nonconstant_init_1 (sub, &value);
596             }
597           else if (!initializer_constant_valid_p (value, inner_type))
598             {
599               tree code;
600               tree sub;
601               HOST_WIDE_INT inner_elements;
602
603               /* FIXME: Ordered removal is O(1) so the whole function is
604                  worst-case quadratic. This could be fixed using an aside
605                  bitmap to record which elements must be removed and remove
606                  them all at the same time. Or by merging
607                  split_non_constant_init into process_init_constructor_array,
608                  that is separating constants from non-constants while building
609                  the vector.  */
610               VEC_ordered_remove (constructor_elt, CONSTRUCTOR_ELTS (init),
611                                   idx);
612               --idx;
613
614               if (array_type_p)
615                 sub = build4 (ARRAY_REF, inner_type, dest, field_index,
616                               NULL_TREE, NULL_TREE);
617               else
618                 sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
619                               NULL_TREE);
620
621               code = build2 (INIT_EXPR, inner_type, sub, value);
622               code = build_stmt (input_location, EXPR_STMT, code);
623               add_stmt (code);
624
625               inner_elements = count_type_elements (inner_type, true);
626               if (inner_elements < 0)
627                 num_initialized_elements = -1;
628               else if (num_initialized_elements >= 0)
629                 num_initialized_elements += inner_elements;
630               continue;
631             }
632         }
633
634       num_type_elements = count_type_elements (type, true);
635       /* If all elements of the initializer are non-constant and
636          have been split out, we don't need the empty CONSTRUCTOR.  */
637       if (num_type_elements > 0
638           && num_type_elements == num_initialized_elements)
639         *initp = NULL;
640       break;
641
642     case VECTOR_TYPE:
643       if (!initializer_constant_valid_p (init, type))
644         {
645           tree code;
646           tree cons = copy_node (init);
647           CONSTRUCTOR_ELTS (init) = NULL;
648           code = build2 (MODIFY_EXPR, type, dest, cons);
649           code = build_stmt (input_location, EXPR_STMT, code);
650           add_stmt (code);
651         }
652       break;
653
654     default:
655       gcc_unreachable ();
656     }
657
658   /* The rest of the initializer is now a constant. */
659   TREE_CONSTANT (init) = 1;
660 }
661
662 /* A subroutine of store_init_value.  Splits non-constant static
663    initializer INIT into a constant part and generates code to
664    perform the non-constant part of the initialization to DEST.
665    Returns the code for the runtime init.  */
666
667 static tree
668 split_nonconstant_init (tree dest, tree init)
669 {
670   tree code;
671
672   if (TREE_CODE (init) == CONSTRUCTOR)
673     {
674       code = push_stmt_list ();
675       split_nonconstant_init_1 (dest, &init);
676       code = pop_stmt_list (code);
677       DECL_INITIAL (dest) = init;
678       TREE_READONLY (dest) = 0;
679     }
680   else
681     code = build2 (INIT_EXPR, TREE_TYPE (dest), dest, init);
682
683   return code;
684 }
685
686 /* Perform appropriate conversions on the initial value of a variable,
687    store it in the declaration DECL,
688    and print any error messages that are appropriate.
689    If the init is invalid, store an ERROR_MARK.
690
691    C++: Note that INIT might be a TREE_LIST, which would mean that it is
692    a base class initializer for some aggregate type, hopefully compatible
693    with DECL.  If INIT is a single element, and DECL is an aggregate
694    type, we silently convert INIT into a TREE_LIST, allowing a constructor
695    to be called.
696
697    If INIT is a TREE_LIST and there is no constructor, turn INIT
698    into a CONSTRUCTOR and use standard initialization techniques.
699    Perhaps a warning should be generated?
700
701    Returns code to be executed if initialization could not be performed
702    for static variable.  In that case, caller must emit the code.  */
703
704 tree
705 store_init_value (tree decl, tree init, int flags)
706 {
707   tree value, type;
708
709   /* If variable's type was invalidly declared, just ignore it.  */
710
711   type = TREE_TYPE (decl);
712   if (TREE_CODE (type) == ERROR_MARK)
713     return NULL_TREE;
714
715   if (MAYBE_CLASS_TYPE_P (type))
716     {
717       gcc_assert (!type_has_nontrivial_copy_init (type)
718                   || TREE_CODE (init) == CONSTRUCTOR);
719
720       if (TREE_CODE (init) == TREE_LIST)
721         {
722           error ("constructor syntax used, but no constructor declared "
723                  "for type %qT", type);
724           init = build_constructor_from_list (init_list_type_node, nreverse (init));
725         }
726     }
727   else if (TREE_CODE (init) == TREE_LIST
728            && TREE_TYPE (init) != unknown_type_node)
729     {
730       gcc_assert (TREE_CODE (decl) != RESULT_DECL);
731
732       if (TREE_CODE (init) == TREE_LIST
733                && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
734         {
735           error ("cannot initialize arrays using this syntax");
736           return NULL_TREE;
737         }
738       else
739         /* We get here with code like `int a (2);' */
740         init = build_x_compound_expr_from_list (init, ELK_INIT,
741                                                 tf_warning_or_error);
742     }
743
744   /* End of special C++ code.  */
745
746   /* Digest the specified initializer into an expression.  */
747   value = digest_init_flags (type, init, flags);
748   /* If the initializer is not a constant, fill in DECL_INITIAL with
749      the bits that are constant, and then return an expression that
750      will perform the dynamic initialization.  */
751   if (value != error_mark_node
752       && (TREE_SIDE_EFFECTS (value)
753            || ! initializer_constant_valid_p (value, TREE_TYPE (value))))
754     return split_nonconstant_init (decl, value);
755   /* If the value is a constant, just put it in DECL_INITIAL.  If DECL
756      is an automatic variable, the middle end will turn this into a
757      dynamic initialization later.  */
758   DECL_INITIAL (decl) = value;
759   return NULL_TREE;
760 }
761
762 \f
763 /* Give errors about narrowing conversions within { }.  */
764
765 void
766 check_narrowing (tree type, tree init)
767 {
768   tree ftype = unlowered_expr_type (init);
769   bool ok = true;
770   REAL_VALUE_TYPE d;
771
772   if (DECL_P (init))
773     init = decl_constant_value (init);
774
775   if (TREE_CODE (type) == INTEGER_TYPE
776       && TREE_CODE (ftype) == REAL_TYPE)
777     ok = false;
778   else if (INTEGRAL_OR_ENUMERATION_TYPE_P (ftype)
779            && CP_INTEGRAL_TYPE_P (type))
780     {
781       if (TYPE_PRECISION (type) < TYPE_PRECISION (ftype)
782           && (TREE_CODE (init) != INTEGER_CST
783               || !int_fits_type_p (init, type)))
784         ok = false;
785     }
786   else if (TREE_CODE (ftype) == REAL_TYPE
787            && TREE_CODE (type) == REAL_TYPE)
788     {
789       if (TYPE_PRECISION (type) < TYPE_PRECISION (ftype))
790         {
791           if (TREE_CODE (init) == REAL_CST)
792             {
793               /* Issue 703: Loss of precision is OK as long as the value is
794                  within the representable range of the new type.  */
795               REAL_VALUE_TYPE r;
796               d = TREE_REAL_CST (init);
797               real_convert (&r, TYPE_MODE (type), &d);
798               if (real_isinf (&r))
799                 ok = false;
800             }
801           else
802             ok = false;
803         }
804     }
805   else if (INTEGRAL_OR_ENUMERATION_TYPE_P (ftype)
806            && TREE_CODE (type) == REAL_TYPE)
807     {
808       ok = false;
809       if (TREE_CODE (init) == INTEGER_CST)
810         {
811           d = real_value_from_int_cst (0, init);
812           if (exact_real_truncate (TYPE_MODE (type), &d))
813             ok = true;
814         }
815     }
816
817   if (!ok)
818     permerror (input_location, "narrowing conversion of %qE from %qT to %qT inside { }",
819                init, ftype, type);
820 }
821
822 /* Process the initializer INIT for a variable of type TYPE, emitting
823    diagnostics for invalid initializers and converting the initializer as
824    appropriate.
825
826    For aggregate types, it assumes that reshape_init has already run, thus the
827    initializer will have the right shape (brace elision has been undone).
828
829    NESTED is true iff we are being called for an element of a CONSTRUCTOR.  */
830
831 static tree
832 digest_init_r (tree type, tree init, bool nested, int flags)
833 {
834   enum tree_code code = TREE_CODE (type);
835
836   if (error_operand_p (init))
837     return error_mark_node;
838
839   gcc_assert (init);
840
841   /* We must strip the outermost array type when completing the type,
842      because the its bounds might be incomplete at the moment.  */
843   if (!complete_type_or_else (TREE_CODE (type) == ARRAY_TYPE
844                               ? TREE_TYPE (type) : type, NULL_TREE))
845     return error_mark_node;
846
847   /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue
848      (g++.old-deja/g++.law/casts2.C).  */
849   if (TREE_CODE (init) == NON_LVALUE_EXPR)
850     init = TREE_OPERAND (init, 0);
851
852   /* Initialization of an array of chars from a string constant. The initializer
853      can be optionally enclosed in braces, but reshape_init has already removed
854      them if they were present.  */
855   if (code == ARRAY_TYPE)
856     {
857       tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
858       if (char_type_p (typ1)
859           /*&& init */
860           && TREE_CODE (init) == STRING_CST)
861         {
862           tree char_type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (init)));
863
864           if (TYPE_PRECISION (typ1) == BITS_PER_UNIT)
865             {
866               if (char_type != char_type_node)
867                 {
868                   error ("char-array initialized from wide string");
869                   return error_mark_node;
870                 }
871             }
872           else
873             {
874               if (char_type == char_type_node)
875                 {
876                   error ("int-array initialized from non-wide string");
877                   return error_mark_node;
878                 }
879               else if (char_type != typ1)
880                 {
881                   error ("int-array initialized from incompatible wide string");
882                   return error_mark_node;
883                 }
884             }
885
886           TREE_TYPE (init) = type;
887           if (TYPE_DOMAIN (type) != 0 && TREE_CONSTANT (TYPE_SIZE (type)))
888             {
889               int size = TREE_INT_CST_LOW (TYPE_SIZE (type));
890               size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
891               /* In C it is ok to subtract 1 from the length of the string
892                  because it's ok to ignore the terminating null char that is
893                  counted in the length of the constant, but in C++ this would
894                  be invalid.  */
895               if (size < TREE_STRING_LENGTH (init))
896                 permerror (input_location, "initializer-string for array of chars is too long");
897             }
898           return init;
899         }
900     }
901
902   /* Handle scalar types (including conversions) and references.  */
903   if ((TREE_CODE (type) != COMPLEX_TYPE
904        || BRACE_ENCLOSED_INITIALIZER_P (init))
905       && (SCALAR_TYPE_P (type) || code == REFERENCE_TYPE))
906     {
907       tree *exp;
908
909       if (cxx_dialect != cxx98 && nested)
910         check_narrowing (type, init);
911       init = convert_for_initialization (0, type, init, flags,
912                                          ICR_INIT, NULL_TREE, 0,
913                                          tf_warning_or_error);
914       exp = &init;
915
916       /* Skip any conversions since we'll be outputting the underlying
917          constant.  */
918       while (CONVERT_EXPR_P (*exp)
919              || TREE_CODE (*exp) == NON_LVALUE_EXPR)
920         exp = &TREE_OPERAND (*exp, 0);
921
922       *exp = cplus_expand_constant (*exp);
923
924       return init;
925     }
926
927   /* Come here only for aggregates: records, arrays, unions, complex numbers
928      and vectors.  */
929   gcc_assert (TREE_CODE (type) == ARRAY_TYPE
930               || TREE_CODE (type) == VECTOR_TYPE
931               || TREE_CODE (type) == RECORD_TYPE
932               || TREE_CODE (type) == UNION_TYPE
933               || TREE_CODE (type) == COMPLEX_TYPE);
934
935   if (BRACE_ENCLOSED_INITIALIZER_P (init)
936       && !TYPE_NON_AGGREGATE_CLASS (type))
937     return process_init_constructor (type, init);
938   else
939     {
940       if (COMPOUND_LITERAL_P (init) && TREE_CODE (type) == ARRAY_TYPE)
941         {
942           error ("cannot initialize aggregate of type %qT with "
943                  "a compound literal", type);
944
945           return error_mark_node;
946         }
947
948       if (TREE_CODE (type) == ARRAY_TYPE
949           && !BRACE_ENCLOSED_INITIALIZER_P (init))
950         {
951           /* Allow the result of build_array_copy and of
952              build_value_init_noctor.  */
953           if ((TREE_CODE (init) == TARGET_EXPR
954                || TREE_CODE (init) == CONSTRUCTOR)
955               && (same_type_ignoring_top_level_qualifiers_p
956                   (type, TREE_TYPE (init))))
957             return init;
958
959           error ("array must be initialized with a brace-enclosed"
960                  " initializer");
961           return error_mark_node;
962         }
963
964       return convert_for_initialization (NULL_TREE, type, init,
965                                          flags,
966                                          ICR_INIT, NULL_TREE, 0,
967                                          tf_warning_or_error);
968     }
969 }
970
971 tree
972 digest_init (tree type, tree init)
973 {
974   return digest_init_r (type, init, false, LOOKUP_IMPLICIT);
975 }
976
977 tree
978 digest_init_flags (tree type, tree init, int flags)
979 {
980   return digest_init_r (type, init, false, flags);
981 }
982 \f
983 /* Set of flags used within process_init_constructor to describe the
984    initializers.  */
985 #define PICFLAG_ERRONEOUS 1
986 #define PICFLAG_NOT_ALL_CONSTANT 2
987 #define PICFLAG_NOT_ALL_SIMPLE 4
988
989 /* Given an initializer INIT, return the flag (PICFLAG_*) which better
990    describe it.  */
991
992 static int
993 picflag_from_initializer (tree init)
994 {
995   if (init == error_mark_node)
996     return PICFLAG_ERRONEOUS;
997   else if (!TREE_CONSTANT (init))
998     return PICFLAG_NOT_ALL_CONSTANT;
999   else if (!initializer_constant_valid_p (init, TREE_TYPE (init)))
1000     return PICFLAG_NOT_ALL_SIMPLE;
1001   return 0;
1002 }
1003
1004 /* Subroutine of process_init_constructor, which will process an initializer
1005    INIT for an array or vector of type TYPE. Returns the flags (PICFLAG_*)
1006    which describe the initializers.  */
1007
1008 static int
1009 process_init_constructor_array (tree type, tree init)
1010 {
1011   unsigned HOST_WIDE_INT i, len = 0;
1012   int flags = 0;
1013   bool unbounded = false;
1014   constructor_elt *ce;
1015   VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (init);
1016
1017   gcc_assert (TREE_CODE (type) == ARRAY_TYPE
1018               || TREE_CODE (type) == VECTOR_TYPE);
1019
1020   if (TREE_CODE (type) == ARRAY_TYPE)
1021     {
1022       tree domain = TYPE_DOMAIN (type);
1023       if (domain)
1024         len = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (domain))
1025               - TREE_INT_CST_LOW (TYPE_MIN_VALUE (domain))
1026               + 1);
1027       else
1028         unbounded = true;  /* Take as many as there are.  */
1029     }
1030   else
1031     /* Vectors are like simple fixed-size arrays.  */
1032     len = TYPE_VECTOR_SUBPARTS (type);
1033
1034   /* There must not be more initializers than needed.  */
1035   if (!unbounded && VEC_length (constructor_elt, v)  > len)
1036     error ("too many initializers for %qT", type);
1037
1038   FOR_EACH_VEC_ELT (constructor_elt, v, i, ce)
1039     {
1040       if (ce->index)
1041         {
1042           gcc_assert (TREE_CODE (ce->index) == INTEGER_CST);
1043           if (compare_tree_int (ce->index, i) != 0)
1044             {
1045               ce->value = error_mark_node;
1046               sorry ("non-trivial designated initializers not supported");
1047             }
1048         }
1049       else
1050         ce->index = size_int (i);
1051       gcc_assert (ce->value);
1052       ce->value = digest_init_r (TREE_TYPE (type), ce->value, true, LOOKUP_IMPLICIT);
1053
1054       if (ce->value != error_mark_node)
1055         gcc_assert (same_type_ignoring_top_level_qualifiers_p
1056                       (TREE_TYPE (type), TREE_TYPE (ce->value)));
1057
1058       flags |= picflag_from_initializer (ce->value);
1059     }
1060
1061   /* No more initializers. If the array is unbounded, we are done. Otherwise,
1062      we must add initializers ourselves.  */
1063   if (!unbounded)
1064     for (; i < len; ++i)
1065       {
1066         tree next;
1067
1068         if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (type)))
1069           {
1070             /* If this type needs constructors run for default-initialization,
1071               we can't rely on the back end to do it for us, so build up
1072               TARGET_EXPRs.  If the type in question is a class, just build
1073               one up; if it's an array, recurse.  */
1074             if (MAYBE_CLASS_TYPE_P (TREE_TYPE (type)))
1075               next = build_functional_cast (TREE_TYPE (type), NULL_TREE,
1076                                             tf_warning_or_error);
1077             else
1078               next = build_constructor (init_list_type_node, NULL);
1079             next = digest_init (TREE_TYPE (type), next);
1080           }
1081         else if (!zero_init_p (TREE_TYPE (type)))
1082           next = build_zero_init (TREE_TYPE (type),
1083                                   /*nelts=*/NULL_TREE,
1084                                   /*static_storage_p=*/false);
1085         else
1086           /* The default zero-initialization is fine for us; don't
1087              add anything to the CONSTRUCTOR.  */
1088           break;
1089
1090         flags |= picflag_from_initializer (next);
1091         CONSTRUCTOR_APPEND_ELT (v, size_int (i), next);
1092       }
1093
1094   CONSTRUCTOR_ELTS (init) = v;
1095   return flags;
1096 }
1097
1098 /* Subroutine of process_init_constructor, which will process an initializer
1099    INIT for a class of type TYPE. Returns the flags (PICFLAG_*) which describe
1100    the initializers.  */
1101
1102 static int
1103 process_init_constructor_record (tree type, tree init)
1104 {
1105   VEC(constructor_elt,gc) *v = NULL;
1106   int flags = 0;
1107   tree field;
1108   unsigned HOST_WIDE_INT idx = 0;
1109
1110   gcc_assert (TREE_CODE (type) == RECORD_TYPE);
1111   gcc_assert (!CLASSTYPE_VBASECLASSES (type));
1112   gcc_assert (!TYPE_BINFO (type)
1113               || !BINFO_N_BASE_BINFOS (TYPE_BINFO (type)));
1114   gcc_assert (!TYPE_POLYMORPHIC_P (type));
1115
1116   /* Generally, we will always have an index for each initializer (which is
1117      a FIELD_DECL, put by reshape_init), but compound literals don't go trough
1118      reshape_init. So we need to handle both cases.  */
1119   for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
1120     {
1121       tree next;
1122       tree type;
1123
1124       if (!DECL_NAME (field) && DECL_C_BIT_FIELD (field))
1125         {
1126           flags |= picflag_from_initializer (integer_zero_node);
1127           CONSTRUCTOR_APPEND_ELT (v, field, integer_zero_node);
1128           continue;
1129         }
1130
1131       if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
1132         continue;
1133
1134       /* If this is a bitfield, first convert to the declared type.  */
1135       type = TREE_TYPE (field);
1136       if (DECL_BIT_FIELD_TYPE (field))
1137         type = DECL_BIT_FIELD_TYPE (field);
1138
1139       if (idx < VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)))
1140         {
1141           constructor_elt *ce = VEC_index (constructor_elt,
1142                                            CONSTRUCTOR_ELTS (init), idx);
1143           if (ce->index)
1144             {
1145               /* We can have either a FIELD_DECL or an IDENTIFIER_NODE. The
1146                  latter case can happen in templates where lookup has to be
1147                  deferred.  */
1148               gcc_assert (TREE_CODE (ce->index) == FIELD_DECL
1149                           || TREE_CODE (ce->index) == IDENTIFIER_NODE);
1150               if (ce->index != field
1151                   && ce->index != DECL_NAME (field))
1152                 {
1153                   ce->value = error_mark_node;
1154                   sorry ("non-trivial designated initializers not supported");
1155                 }
1156             }
1157
1158           gcc_assert (ce->value);
1159           next = digest_init_r (type, ce->value, true, LOOKUP_IMPLICIT);
1160           ++idx;
1161         }
1162       else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (field)))
1163         {
1164           /* If this type needs constructors run for
1165              default-initialization, we can't rely on the back end to do it
1166              for us, so build up TARGET_EXPRs.  If the type in question is
1167              a class, just build one up; if it's an array, recurse.  */
1168           next = build_constructor (init_list_type_node, NULL);
1169           if (MAYBE_CLASS_TYPE_P (TREE_TYPE (field)))
1170             {
1171               next = finish_compound_literal (TREE_TYPE (field), next);
1172               /* direct-initialize the target. No temporary is going
1173                   to be involved.  */
1174               if (TREE_CODE (next) == TARGET_EXPR)
1175                 TARGET_EXPR_DIRECT_INIT_P (next) = true;
1176             }
1177
1178           next = digest_init_r (TREE_TYPE (field), next, true, LOOKUP_IMPLICIT);
1179
1180           /* Warn when some struct elements are implicitly initialized.  */
1181           warning (OPT_Wmissing_field_initializers,
1182                    "missing initializer for member %qD", field);
1183         }
1184       else
1185         {
1186           if (TREE_READONLY (field))
1187             error ("uninitialized const member %qD", field);
1188           else if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
1189             error ("member %qD with uninitialized const fields", field);
1190           else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
1191             error ("member %qD is uninitialized reference", field);
1192
1193           /* Warn when some struct elements are implicitly initialized
1194              to zero.  */
1195           warning (OPT_Wmissing_field_initializers,
1196                    "missing initializer for member %qD", field);
1197
1198           if (!zero_init_p (TREE_TYPE (field)))
1199             next = build_zero_init (TREE_TYPE (field), /*nelts=*/NULL_TREE,
1200                                     /*static_storage_p=*/false);
1201           else
1202             /* The default zero-initialization is fine for us; don't
1203             add anything to the CONSTRUCTOR.  */
1204             continue;
1205         }
1206
1207       /* If this is a bitfield, now convert to the lowered type.  */
1208       if (type != TREE_TYPE (field))
1209         next = cp_convert_and_check (TREE_TYPE (field), next);
1210       flags |= picflag_from_initializer (next);
1211       CONSTRUCTOR_APPEND_ELT (v, field, next);
1212     }
1213
1214   if (idx < VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)))
1215     error ("too many initializers for %qT", type);
1216     
1217   CONSTRUCTOR_ELTS (init) = v;
1218   return flags;
1219 }
1220
1221 /* Subroutine of process_init_constructor, which will process a single
1222    initializer INIT for a union of type TYPE. Returns the flags (PICFLAG_*)
1223    which describe the initializer.  */
1224
1225 static int
1226 process_init_constructor_union (tree type, tree init)
1227 {
1228   constructor_elt *ce;
1229   int len;
1230
1231   /* If the initializer was empty, use default zero initialization.  */
1232   if (VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (init)))
1233     return 0;
1234
1235   len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
1236   if (len > 1)
1237     {
1238       error ("too many initializers for %qT", type);
1239       VEC_block_remove (constructor_elt, CONSTRUCTOR_ELTS (init), 1, len-1);
1240     }
1241
1242   ce = VEC_index (constructor_elt, CONSTRUCTOR_ELTS (init), 0);
1243
1244   /* If this element specifies a field, initialize via that field.  */
1245   if (ce->index)
1246     {
1247       if (TREE_CODE (ce->index) == FIELD_DECL)
1248         ;
1249       else if (TREE_CODE (ce->index) == IDENTIFIER_NODE)
1250         {
1251           /* This can happen within a cast, see g++.dg/opt/cse2.C.  */
1252           tree name = ce->index;
1253           tree field;
1254           for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1255             if (DECL_NAME (field) == name)
1256               break;
1257           if (!field)
1258             {
1259               error ("no field %qD found in union being initialized", field);
1260               ce->value = error_mark_node;
1261             }
1262           ce->index = field;
1263         }
1264       else
1265         {
1266           gcc_assert (TREE_CODE (ce->index) == INTEGER_CST
1267                       || TREE_CODE (ce->index) == RANGE_EXPR);
1268           error ("index value instead of field name in union initializer");
1269           ce->value = error_mark_node;
1270         }
1271     }
1272   else
1273     {
1274       /* Find the first named field.  ANSI decided in September 1990
1275          that only named fields count here.  */
1276       tree field = TYPE_FIELDS (type);
1277       while (field && (!DECL_NAME (field) || TREE_CODE (field) != FIELD_DECL))
1278         field = TREE_CHAIN (field);
1279       if (field == NULL_TREE)
1280         {
1281           error ("too many initializers for %qT", type);
1282           ce->value = error_mark_node;
1283         }
1284       ce->index = field;
1285     }
1286
1287   if (ce->value && ce->value != error_mark_node)
1288     ce->value = digest_init_r (TREE_TYPE (ce->index), ce->value, true, LOOKUP_IMPLICIT);
1289
1290   return picflag_from_initializer (ce->value);
1291 }
1292
1293 /* Process INIT, a constructor for a variable of aggregate type TYPE. The
1294    constructor is a brace-enclosed initializer, and will be modified in-place.
1295
1296    Each element is converted to the right type through digest_init, and
1297    missing initializers are added following the language rules (zero-padding,
1298    etc.).
1299
1300    After the execution, the initializer will have TREE_CONSTANT if all elts are
1301    constant, and TREE_STATIC set if, in addition, all elts are simple enough
1302    constants that the assembler and linker can compute them.
1303
1304    The function returns the initializer itself, or error_mark_node in case
1305    of error.  */
1306
1307 static tree
1308 process_init_constructor (tree type, tree init)
1309 {
1310   int flags;
1311
1312   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
1313
1314   if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
1315     flags = process_init_constructor_array (type, init);
1316   else if (TREE_CODE (type) == RECORD_TYPE)
1317     flags = process_init_constructor_record (type, init);
1318   else if (TREE_CODE (type) == UNION_TYPE)
1319     flags = process_init_constructor_union (type, init);
1320   else
1321     gcc_unreachable ();
1322
1323   if (flags & PICFLAG_ERRONEOUS)
1324     return error_mark_node;
1325
1326   TREE_TYPE (init) = type;
1327   if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE)
1328     cp_complete_array_type (&TREE_TYPE (init), init, /*do_default=*/0);
1329   if (!(flags & PICFLAG_NOT_ALL_CONSTANT))
1330     {
1331       TREE_CONSTANT (init) = 1;
1332       if (!(flags & PICFLAG_NOT_ALL_SIMPLE))
1333         TREE_STATIC (init) = 1;
1334     }
1335   return init;
1336 }
1337 \f
1338 /* Given a structure or union value DATUM, construct and return
1339    the structure or union component which results from narrowing
1340    that value to the base specified in BASETYPE.  For example, given the
1341    hierarchy
1342
1343    class L { int ii; };
1344    class A : L { ... };
1345    class B : L { ... };
1346    class C : A, B { ... };
1347
1348    and the declaration
1349
1350    C x;
1351
1352    then the expression
1353
1354    x.A::ii refers to the ii member of the L part of
1355    the A part of the C object named by X.  In this case,
1356    DATUM would be x, and BASETYPE would be A.
1357
1358    I used to think that this was nonconformant, that the standard specified
1359    that first we look up ii in A, then convert x to an L& and pull out the
1360    ii part.  But in fact, it does say that we convert x to an A&; A here
1361    is known as the "naming class".  (jason 2000-12-19)
1362
1363    BINFO_P points to a variable initialized either to NULL_TREE or to the
1364    binfo for the specific base subobject we want to convert to.  */
1365
1366 tree
1367 build_scoped_ref (tree datum, tree basetype, tree* binfo_p)
1368 {
1369   tree binfo;
1370
1371   if (datum == error_mark_node)
1372     return error_mark_node;
1373   if (*binfo_p)
1374     binfo = *binfo_p;
1375   else
1376     binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check, NULL);
1377
1378   if (!binfo || binfo == error_mark_node)
1379     {
1380       *binfo_p = NULL_TREE;
1381       if (!binfo)
1382         error_not_base_type (basetype, TREE_TYPE (datum));
1383       return error_mark_node;
1384     }
1385
1386   *binfo_p = binfo;
1387   return build_base_path (PLUS_EXPR, datum, binfo, 1);
1388 }
1389
1390 /* Build a reference to an object specified by the C++ `->' operator.
1391    Usually this just involves dereferencing the object, but if the
1392    `->' operator is overloaded, then such overloads must be
1393    performed until an object which does not have the `->' operator
1394    overloaded is found.  An error is reported when circular pointer
1395    delegation is detected.  */
1396
1397 tree
1398 build_x_arrow (tree expr)
1399 {
1400   tree orig_expr = expr;
1401   tree type = TREE_TYPE (expr);
1402   tree last_rval = NULL_TREE;
1403   VEC(tree,gc) *types_memoized = NULL;
1404
1405   if (type == error_mark_node)
1406     return error_mark_node;
1407
1408   if (processing_template_decl)
1409     {
1410       if (type_dependent_expression_p (expr))
1411         return build_min_nt (ARROW_EXPR, expr);
1412       expr = build_non_dependent_expr (expr);
1413     }
1414
1415   if (MAYBE_CLASS_TYPE_P (type))
1416     {
1417       while ((expr = build_new_op (COMPONENT_REF, LOOKUP_NORMAL, expr,
1418                                    NULL_TREE, NULL_TREE,
1419                                    /*overloaded_p=*/NULL, 
1420                                    tf_warning_or_error)))
1421         {
1422           if (expr == error_mark_node)
1423             return error_mark_node;
1424
1425           if (vec_member (TREE_TYPE (expr), types_memoized))
1426             {
1427               error ("circular pointer delegation detected");
1428               return error_mark_node;
1429             }
1430
1431           VEC_safe_push (tree, gc, types_memoized, TREE_TYPE (expr));
1432           last_rval = expr;
1433         }
1434
1435       if (last_rval == NULL_TREE)
1436         {
1437           error ("base operand of %<->%> has non-pointer type %qT", type);
1438           return error_mark_node;
1439         }
1440
1441       if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1442         last_rval = convert_from_reference (last_rval);
1443     }
1444   else
1445     last_rval = decay_conversion (expr);
1446
1447   if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1448     {
1449       if (processing_template_decl)
1450         {
1451           expr = build_min_non_dep (ARROW_EXPR, last_rval, orig_expr);
1452           /* It will be dereferenced.  */
1453           TREE_TYPE (expr) = TREE_TYPE (TREE_TYPE (last_rval));
1454           return expr;
1455         }
1456
1457       return cp_build_indirect_ref (last_rval, RO_NULL, tf_warning_or_error);
1458     }
1459
1460   if (types_memoized)
1461     error ("result of %<operator->()%> yields non-pointer result");
1462   else
1463     error ("base operand of %<->%> is not a pointer");
1464   return error_mark_node;
1465 }
1466
1467 /* Return an expression for "DATUM .* COMPONENT".  DATUM has not
1468    already been checked out to be of aggregate type.  */
1469
1470 tree
1471 build_m_component_ref (tree datum, tree component)
1472 {
1473   tree ptrmem_type;
1474   tree objtype;
1475   tree type;
1476   tree binfo;
1477   tree ctype;
1478
1479   if (error_operand_p (datum) || error_operand_p (component))
1480     return error_mark_node;
1481
1482   datum = mark_lvalue_use (datum);
1483   component = mark_rvalue_use (component);
1484
1485   ptrmem_type = TREE_TYPE (component);
1486   if (!TYPE_PTR_TO_MEMBER_P (ptrmem_type))
1487     {
1488       error ("%qE cannot be used as a member pointer, since it is of "
1489              "type %qT",
1490              component, ptrmem_type);
1491       return error_mark_node;
1492     }
1493
1494   objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
1495   if (! MAYBE_CLASS_TYPE_P (objtype))
1496     {
1497       error ("cannot apply member pointer %qE to %qE, which is of "
1498              "non-class type %qT",
1499              component, datum, objtype);
1500       return error_mark_node;
1501     }
1502
1503   type = TYPE_PTRMEM_POINTED_TO_TYPE (ptrmem_type);
1504   ctype = complete_type (TYPE_PTRMEM_CLASS_TYPE (ptrmem_type));
1505
1506   if (!COMPLETE_TYPE_P (ctype))
1507     {
1508       if (!same_type_p (ctype, objtype))
1509         goto mismatch;
1510       binfo = NULL;
1511     }
1512   else
1513     {
1514       binfo = lookup_base (objtype, ctype, ba_check, NULL);
1515
1516       if (!binfo)
1517         {
1518         mismatch:
1519           error ("pointer to member type %qT incompatible with object "
1520                  "type %qT",
1521                  type, objtype);
1522           return error_mark_node;
1523         }
1524       else if (binfo == error_mark_node)
1525         return error_mark_node;
1526     }
1527
1528   if (TYPE_PTRMEM_P (ptrmem_type))
1529     {
1530       tree ptype;
1531
1532       /* Compute the type of the field, as described in [expr.ref].
1533          There's no such thing as a mutable pointer-to-member, so
1534          things are not as complex as they are for references to
1535          non-static data members.  */
1536       type = cp_build_qualified_type (type,
1537                                       (cp_type_quals (type)
1538                                        | cp_type_quals (TREE_TYPE (datum))));
1539
1540       datum = build_address (datum);
1541
1542       /* Convert object to the correct base.  */
1543       if (binfo)
1544         datum = build_base_path (PLUS_EXPR, datum, binfo, 1);
1545
1546       /* Build an expression for "object + offset" where offset is the
1547          value stored in the pointer-to-data-member.  */
1548       ptype = build_pointer_type (type);
1549       datum = build2 (POINTER_PLUS_EXPR, ptype,
1550                       fold_convert (ptype, datum),
1551                       build_nop (sizetype, component));
1552       return cp_build_indirect_ref (datum, RO_NULL, tf_warning_or_error);
1553     }
1554   else
1555     return build2 (OFFSET_REF, type, datum, component);
1556 }
1557
1558 /* Return a tree node for the expression TYPENAME '(' PARMS ')'.  */
1559
1560 tree
1561 build_functional_cast (tree exp, tree parms, tsubst_flags_t complain)
1562 {
1563   /* This is either a call to a constructor,
1564      or a C cast in C++'s `functional' notation.  */
1565
1566   /* The type to which we are casting.  */
1567   tree type;
1568   VEC(tree,gc) *parmvec;
1569
1570   if (exp == error_mark_node || parms == error_mark_node)
1571     return error_mark_node;
1572
1573   if (TREE_CODE (exp) == TYPE_DECL)
1574     type = TREE_TYPE (exp);
1575   else
1576     type = exp;
1577
1578   if (TREE_CODE (type) == REFERENCE_TYPE && !parms)
1579     {
1580       error ("invalid value-initialization of reference type");
1581       return error_mark_node;
1582     }
1583
1584   if (processing_template_decl)
1585     {
1586       tree t = build_min (CAST_EXPR, type, parms);
1587       /* We don't know if it will or will not have side effects.  */
1588       TREE_SIDE_EFFECTS (t) = 1;
1589       return t;
1590     }
1591
1592   if (! MAYBE_CLASS_TYPE_P (type))
1593     {
1594       if (parms == NULL_TREE)
1595         return cp_convert (type, integer_zero_node);
1596
1597       /* This must build a C cast.  */
1598       parms = build_x_compound_expr_from_list (parms, ELK_FUNC_CAST, complain);
1599       return cp_build_c_cast (type, parms, complain);
1600     }
1601
1602   /* Prepare to evaluate as a call to a constructor.  If this expression
1603      is actually used, for example,
1604
1605      return X (arg1, arg2, ...);
1606
1607      then the slot being initialized will be filled in.  */
1608
1609   if (!complete_type_or_maybe_complain (type, NULL_TREE, complain))
1610     return error_mark_node;
1611   if (abstract_virtuals_error (NULL_TREE, type))
1612     return error_mark_node;
1613
1614   /* [expr.type.conv]
1615
1616      If the expression list is a single-expression, the type
1617      conversion is equivalent (in definedness, and if defined in
1618      meaning) to the corresponding cast expression.  */
1619   if (parms && TREE_CHAIN (parms) == NULL_TREE)
1620     return cp_build_c_cast (type, TREE_VALUE (parms), complain);
1621
1622   /* [expr.type.conv]
1623
1624      The expression T(), where T is a simple-type-specifier for a
1625      non-array complete object type or the (possibly cv-qualified)
1626      void type, creates an rvalue of the specified type, which is
1627      value-initialized.  */
1628
1629   if (parms == NULL_TREE
1630       /* If there's a user-defined constructor, value-initialization is
1631          just calling the constructor, so fall through.  */
1632       && !TYPE_HAS_USER_CONSTRUCTOR (type))
1633     {
1634       exp = build_value_init (type, complain);
1635       return get_target_expr (exp);
1636     }
1637
1638   /* Call the constructor.  */
1639   parmvec = make_tree_vector ();
1640   for (; parms != NULL_TREE; parms = TREE_CHAIN (parms))
1641     VEC_safe_push (tree, gc, parmvec, TREE_VALUE (parms));
1642   exp = build_special_member_call (NULL_TREE, complete_ctor_identifier,
1643                                    &parmvec, type, LOOKUP_NORMAL, complain);
1644   release_tree_vector (parmvec);
1645
1646   if (exp == error_mark_node)
1647     return error_mark_node;
1648
1649   return build_cplus_new (type, exp);
1650 }
1651 \f
1652
1653 /* Add new exception specifier SPEC, to the LIST we currently have.
1654    If it's already in LIST then do nothing.
1655    Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1656    know what we're doing.  */
1657
1658 tree
1659 add_exception_specifier (tree list, tree spec, int complain)
1660 {
1661   bool ok;
1662   tree core = spec;
1663   bool is_ptr;
1664   diagnostic_t diag_type = DK_UNSPECIFIED; /* none */
1665
1666   if (spec == error_mark_node)
1667     return list;
1668
1669   gcc_assert (spec && (!list || TREE_VALUE (list)));
1670
1671   /* [except.spec] 1, type in an exception specifier shall not be
1672      incomplete, or pointer or ref to incomplete other than pointer
1673      to cv void.  */
1674   is_ptr = TREE_CODE (core) == POINTER_TYPE;
1675   if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1676     core = TREE_TYPE (core);
1677   if (complain < 0)
1678     ok = true;
1679   else if (VOID_TYPE_P (core))
1680     ok = is_ptr;
1681   else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1682     ok = true;
1683   else if (processing_template_decl)
1684     ok = true;
1685   else
1686     {
1687       ok = true;
1688       /* 15.4/1 says that types in an exception specifier must be complete,
1689          but it seems more reasonable to only require this on definitions
1690          and calls.  So just give a pedwarn at this point; we will give an
1691          error later if we hit one of those two cases.  */
1692       if (!COMPLETE_TYPE_P (complete_type (core)))
1693         diag_type = DK_PEDWARN; /* pedwarn */
1694     }
1695
1696   if (ok)
1697     {
1698       tree probe;
1699
1700       for (probe = list; probe; probe = TREE_CHAIN (probe))
1701         if (same_type_p (TREE_VALUE (probe), spec))
1702           break;
1703       if (!probe)
1704         list = tree_cons (NULL_TREE, spec, list);
1705     }
1706   else
1707     diag_type = DK_ERROR; /* error */
1708
1709   if (diag_type != DK_UNSPECIFIED && complain)
1710     cxx_incomplete_type_diagnostic (NULL_TREE, core, diag_type);
1711
1712   return list;
1713 }
1714
1715 /* Combine the two exceptions specifier lists LIST and ADD, and return
1716    their union.  */
1717
1718 tree
1719 merge_exception_specifiers (tree list, tree add)
1720 {
1721   if (!list || !add)
1722     return NULL_TREE;
1723   /* For merging noexcept(true) and throw(), take the more recent one (LIST).
1724      A throw(type-list) spec takes precedence over a noexcept(false) spec.
1725      Any other noexcept-spec should only be merged with an equivalent one.
1726      So the !TREE_VALUE code below is correct for all cases.  */
1727   else if (!TREE_VALUE (add))
1728     return list;
1729   else if (!TREE_VALUE (list))
1730     return add;
1731   else
1732     {
1733       tree orig_list = list;
1734
1735       for (; add; add = TREE_CHAIN (add))
1736         {
1737           tree spec = TREE_VALUE (add);
1738           tree probe;
1739
1740           for (probe = orig_list; probe; probe = TREE_CHAIN (probe))
1741             if (same_type_p (TREE_VALUE (probe), spec))
1742               break;
1743           if (!probe)
1744             {
1745               spec = build_tree_list (NULL_TREE, spec);
1746               TREE_CHAIN (spec) = list;
1747               list = spec;
1748             }
1749         }
1750     }
1751   return list;
1752 }
1753
1754 /* Subroutine of build_call.  Ensure that each of the types in the
1755    exception specification is complete.  Technically, 15.4/1 says that
1756    they need to be complete when we see a declaration of the function,
1757    but we should be able to get away with only requiring this when the
1758    function is defined or called.  See also add_exception_specifier.  */
1759
1760 void
1761 require_complete_eh_spec_types (tree fntype, tree decl)
1762 {
1763   tree raises;
1764   /* Don't complain about calls to op new.  */
1765   if (decl && DECL_ARTIFICIAL (decl))
1766     return;
1767   for (raises = TYPE_RAISES_EXCEPTIONS (fntype); raises;
1768        raises = TREE_CHAIN (raises))
1769     {
1770       tree type = TREE_VALUE (raises);
1771       if (type && !COMPLETE_TYPE_P (type))
1772         {
1773           if (decl)
1774             error
1775               ("call to function %qD which throws incomplete type %q#T",
1776                decl, type);
1777           else
1778             error ("call to function which throws incomplete type %q#T",
1779                    decl);
1780         }
1781     }
1782 }
1783
1784 \f
1785 #include "gt-cp-typeck2.h"