xref: /freebsd-12.1/contrib/gcc/cp/typeck.c (revision 5bfc7db4)
1 /* Build expressions with type checking for C++ compiler.
2    Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4    Hacked by Michael Tiemann ([email protected])
5 
6 This file is part of GCC.
7 
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12 
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING.  If not, write to
20 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA.  */
22 
23 
24 /* This file is part of the C++ front end.
25    It contains routines to build C++ expressions given their operands,
26    including computing the types of the result, C and C++ specific error
27    checks, and some optimization.  */
28 
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "tree.h"
34 #include "rtl.h"
35 #include "expr.h"
36 #include "cp-tree.h"
37 #include "tm_p.h"
38 #include "flags.h"
39 #include "output.h"
40 #include "toplev.h"
41 #include "diagnostic.h"
42 #include "target.h"
43 #include "convert.h"
44 #include "c-common.h"
45 
46 static tree pfn_from_ptrmemfunc (tree);
47 static tree convert_for_assignment (tree, tree, const char *, tree, int);
48 static tree cp_pointer_int_sum (enum tree_code, tree, tree);
49 static tree rationalize_conditional_expr (enum tree_code, tree);
50 static int comp_ptr_ttypes_real (tree, tree, int);
51 static bool comp_except_types (tree, tree, bool);
52 static bool comp_array_types (tree, tree, bool);
53 static tree common_base_type (tree, tree);
54 static tree pointer_diff (tree, tree, tree);
55 static tree get_delta_difference (tree, tree, bool, bool);
56 static void casts_away_constness_r (tree *, tree *);
57 static bool casts_away_constness (tree, tree);
58 static void maybe_warn_about_returning_address_of_local (tree);
59 static tree lookup_destructor (tree, tree, tree);
60 /* APPLE LOCAL radar 6087117 */
61 static tree convert_arguments (tree, tree, tree, int, int);
62 
63 /* Do `exp = require_complete_type (exp);' to make sure exp
64    does not have an incomplete type.  (That includes void types.)
65    Returns the error_mark_node if the VALUE does not have
66    complete type when this function returns.  */
67 
68 tree
require_complete_type(tree value)69 require_complete_type (tree value)
70 {
71   tree type;
72 
73   if (processing_template_decl || value == error_mark_node)
74     return value;
75 
76   if (TREE_CODE (value) == OVERLOAD)
77     type = unknown_type_node;
78   else
79     type = TREE_TYPE (value);
80 
81   if (type == error_mark_node)
82     return error_mark_node;
83 
84   /* First, detect a valid value with a complete type.  */
85   if (COMPLETE_TYPE_P (type))
86     return value;
87 
88   if (complete_type_or_else (type, value))
89     return value;
90   else
91     return error_mark_node;
92 }
93 
94 /* Try to complete TYPE, if it is incomplete.  For example, if TYPE is
95    a template instantiation, do the instantiation.  Returns TYPE,
96    whether or not it could be completed, unless something goes
97    horribly wrong, in which case the error_mark_node is returned.  */
98 
99 tree
complete_type(tree type)100 complete_type (tree type)
101 {
102   if (type == NULL_TREE)
103     /* Rather than crash, we return something sure to cause an error
104        at some point.  */
105     return error_mark_node;
106 
107   if (type == error_mark_node || COMPLETE_TYPE_P (type))
108     ;
109   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
110     {
111       tree t = complete_type (TREE_TYPE (type));
112       unsigned int needs_constructing, has_nontrivial_dtor;
113       if (COMPLETE_TYPE_P (t) && !dependent_type_p (type))
114 	layout_type (type);
115       needs_constructing
116 	= TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (t));
117       has_nontrivial_dtor
118 	= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (t));
119       for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
120 	{
121 	  TYPE_NEEDS_CONSTRUCTING (t) = needs_constructing;
122 	  TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = has_nontrivial_dtor;
123 	}
124     }
125   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INSTANTIATION (type))
126     instantiate_class_template (TYPE_MAIN_VARIANT (type));
127 
128   return type;
129 }
130 
131 /* Like complete_type, but issue an error if the TYPE cannot be completed.
132    VALUE is used for informative diagnostics.
133    Returns NULL_TREE if the type cannot be made complete.  */
134 
135 tree
complete_type_or_else(tree type,tree value)136 complete_type_or_else (tree type, tree value)
137 {
138   type = complete_type (type);
139   if (type == error_mark_node)
140     /* We already issued an error.  */
141     return NULL_TREE;
142   else if (!COMPLETE_TYPE_P (type))
143     {
144       cxx_incomplete_type_diagnostic (value, type, 0);
145       return NULL_TREE;
146     }
147   else
148     return type;
149 }
150 
151 /* Return truthvalue of whether type of EXP is instantiated.  */
152 
153 int
type_unknown_p(tree exp)154 type_unknown_p (tree exp)
155 {
156   return (TREE_CODE (exp) == TREE_LIST
157 	  || TREE_TYPE (exp) == unknown_type_node);
158 }
159 
160 
161 /* Return the common type of two parameter lists.
162    We assume that comptypes has already been done and returned 1;
163    if that isn't so, this may crash.
164 
165    As an optimization, free the space we allocate if the parameter
166    lists are already common.  */
167 
168 static tree
commonparms(tree p1,tree p2)169 commonparms (tree p1, tree p2)
170 {
171   tree oldargs = p1, newargs, n;
172   int i, len;
173   int any_change = 0;
174 
175   len = list_length (p1);
176   newargs = tree_last (p1);
177 
178   if (newargs == void_list_node)
179     i = 1;
180   else
181     {
182       i = 0;
183       newargs = 0;
184     }
185 
186   for (; i < len; i++)
187     newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
188 
189   n = newargs;
190 
191   for (i = 0; p1;
192        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n), i++)
193     {
194       if (TREE_PURPOSE (p1) && !TREE_PURPOSE (p2))
195 	{
196 	  TREE_PURPOSE (n) = TREE_PURPOSE (p1);
197 	  any_change = 1;
198 	}
199       else if (! TREE_PURPOSE (p1))
200 	{
201 	  if (TREE_PURPOSE (p2))
202 	    {
203 	      TREE_PURPOSE (n) = TREE_PURPOSE (p2);
204 	      any_change = 1;
205 	    }
206 	}
207       else
208 	{
209 	  if (1 != simple_cst_equal (TREE_PURPOSE (p1), TREE_PURPOSE (p2)))
210 	    any_change = 1;
211 	  TREE_PURPOSE (n) = TREE_PURPOSE (p2);
212 	}
213       if (TREE_VALUE (p1) != TREE_VALUE (p2))
214 	{
215 	  any_change = 1;
216 	  TREE_VALUE (n) = merge_types (TREE_VALUE (p1), TREE_VALUE (p2));
217 	}
218       else
219 	TREE_VALUE (n) = TREE_VALUE (p1);
220     }
221   if (! any_change)
222     return oldargs;
223 
224   return newargs;
225 }
226 
227 /* Given a type, perhaps copied for a typedef,
228    find the "original" version of it.  */
229 static tree
original_type(tree t)230 original_type (tree t)
231 {
232   int quals = cp_type_quals (t);
233   while (t != error_mark_node
234 	 && TYPE_NAME (t) != NULL_TREE)
235     {
236       tree x = TYPE_NAME (t);
237       if (TREE_CODE (x) != TYPE_DECL)
238 	break;
239       x = DECL_ORIGINAL_TYPE (x);
240       if (x == NULL_TREE)
241 	break;
242       t = x;
243     }
244   return cp_build_qualified_type (t, quals);
245 }
246 
247 /* T1 and T2 are arithmetic or enumeration types.  Return the type
248    that will result from the "usual arithmetic conversions" on T1 and
249    T2 as described in [expr].  */
250 
251 tree
type_after_usual_arithmetic_conversions(tree t1,tree t2)252 type_after_usual_arithmetic_conversions (tree t1, tree t2)
253 {
254   enum tree_code code1 = TREE_CODE (t1);
255   enum tree_code code2 = TREE_CODE (t2);
256   tree attributes;
257 
258   /* FIXME: Attributes.  */
259   gcc_assert (ARITHMETIC_TYPE_P (t1)
260 	      || TREE_CODE (t1) == VECTOR_TYPE
261 	      || TREE_CODE (t1) == ENUMERAL_TYPE);
262   gcc_assert (ARITHMETIC_TYPE_P (t2)
263 	      || TREE_CODE (t2) == VECTOR_TYPE
264 	      || TREE_CODE (t2) == ENUMERAL_TYPE);
265 
266   /* In what follows, we slightly generalize the rules given in [expr] so
267      as to deal with `long long' and `complex'.  First, merge the
268      attributes.  */
269   attributes = (*targetm.merge_type_attributes) (t1, t2);
270 
271   /* If one type is complex, form the common type of the non-complex
272      components, then make that complex.  Use T1 or T2 if it is the
273      required type.  */
274   if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
275     {
276       tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
277       tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
278       tree subtype
279 	= type_after_usual_arithmetic_conversions (subtype1, subtype2);
280 
281       if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
282 	return build_type_attribute_variant (t1, attributes);
283       else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
284 	return build_type_attribute_variant (t2, attributes);
285       else
286 	return build_type_attribute_variant (build_complex_type (subtype),
287 					     attributes);
288     }
289 
290   if (code1 == VECTOR_TYPE)
291     {
292       /* When we get here we should have two vectors of the same size.
293 	 Just prefer the unsigned one if present.  */
294       if (TYPE_UNSIGNED (t1))
295 	return build_type_attribute_variant (t1, attributes);
296       else
297 	return build_type_attribute_variant (t2, attributes);
298     }
299 
300   /* If only one is real, use it as the result.  */
301   if (code1 == REAL_TYPE && code2 != REAL_TYPE)
302     return build_type_attribute_variant (t1, attributes);
303   if (code2 == REAL_TYPE && code1 != REAL_TYPE)
304     return build_type_attribute_variant (t2, attributes);
305 
306   /* Perform the integral promotions.  */
307   if (code1 != REAL_TYPE)
308     {
309       t1 = type_promotes_to (t1);
310       t2 = type_promotes_to (t2);
311     }
312 
313   /* Both real or both integers; use the one with greater precision.  */
314   if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
315     return build_type_attribute_variant (t1, attributes);
316   else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
317     return build_type_attribute_variant (t2, attributes);
318 
319   /* The types are the same; no need to do anything fancy.  */
320   if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
321     return build_type_attribute_variant (t1, attributes);
322 
323   if (code1 != REAL_TYPE)
324     {
325       /* If one is a sizetype, use it so size_binop doesn't blow up.  */
326       if (TYPE_IS_SIZETYPE (t1) > TYPE_IS_SIZETYPE (t2))
327 	return build_type_attribute_variant (t1, attributes);
328       if (TYPE_IS_SIZETYPE (t2) > TYPE_IS_SIZETYPE (t1))
329 	return build_type_attribute_variant (t2, attributes);
330 
331       /* If one is unsigned long long, then convert the other to unsigned
332 	 long long.  */
333       if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_unsigned_type_node)
334 	  || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_unsigned_type_node))
335 	return build_type_attribute_variant (long_long_unsigned_type_node,
336 					     attributes);
337       /* If one is a long long, and the other is an unsigned long, and
338 	 long long can represent all the values of an unsigned long, then
339 	 convert to a long long.  Otherwise, convert to an unsigned long
340 	 long.  Otherwise, if either operand is long long, convert the
341 	 other to long long.
342 
343 	 Since we're here, we know the TYPE_PRECISION is the same;
344 	 therefore converting to long long cannot represent all the values
345 	 of an unsigned long, so we choose unsigned long long in that
346 	 case.  */
347       if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_integer_type_node)
348 	  || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_integer_type_node))
349 	{
350 	  tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
351 		    ? long_long_unsigned_type_node
352 		    : long_long_integer_type_node);
353 	  return build_type_attribute_variant (t, attributes);
354 	}
355 
356       /* Go through the same procedure, but for longs.  */
357       if (same_type_p (TYPE_MAIN_VARIANT (t1), long_unsigned_type_node)
358 	  || same_type_p (TYPE_MAIN_VARIANT (t2), long_unsigned_type_node))
359 	return build_type_attribute_variant (long_unsigned_type_node,
360 					     attributes);
361       if (same_type_p (TYPE_MAIN_VARIANT (t1), long_integer_type_node)
362 	  || same_type_p (TYPE_MAIN_VARIANT (t2), long_integer_type_node))
363 	{
364 	  tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
365 		    ? long_unsigned_type_node : long_integer_type_node);
366 	  return build_type_attribute_variant (t, attributes);
367 	}
368       /* Otherwise prefer the unsigned one.  */
369       if (TYPE_UNSIGNED (t1))
370 	return build_type_attribute_variant (t1, attributes);
371       else
372 	return build_type_attribute_variant (t2, attributes);
373     }
374   else
375     {
376       if (same_type_p (TYPE_MAIN_VARIANT (t1), long_double_type_node)
377 	  || same_type_p (TYPE_MAIN_VARIANT (t2), long_double_type_node))
378 	return build_type_attribute_variant (long_double_type_node,
379 					     attributes);
380       if (same_type_p (TYPE_MAIN_VARIANT (t1), double_type_node)
381 	  || same_type_p (TYPE_MAIN_VARIANT (t2), double_type_node))
382 	return build_type_attribute_variant (double_type_node,
383 					     attributes);
384       if (same_type_p (TYPE_MAIN_VARIANT (t1), float_type_node)
385 	  || same_type_p (TYPE_MAIN_VARIANT (t2), float_type_node))
386 	return build_type_attribute_variant (float_type_node,
387 					     attributes);
388 
389       /* Two floating-point types whose TYPE_MAIN_VARIANTs are none of
390 	 the standard C++ floating-point types.  Logic earlier in this
391 	 function has already eliminated the possibility that
392 	 TYPE_PRECISION (t2) != TYPE_PRECISION (t1), so there's no
393 	 compelling reason to choose one or the other.  */
394       return build_type_attribute_variant (t1, attributes);
395     }
396 }
397 
398 /* Subroutine of composite_pointer_type to implement the recursive
399    case.  See that function for documentation fo the parameters.  */
400 
401 static tree
composite_pointer_type_r(tree t1,tree t2,const char * location)402 composite_pointer_type_r (tree t1, tree t2, const char* location)
403 {
404   tree pointee1;
405   tree pointee2;
406   tree result_type;
407   tree attributes;
408 
409   /* Determine the types pointed to by T1 and T2.  */
410   /* APPLE LOCAL blocks 6040305 */
411   if (TREE_CODE (t1) == POINTER_TYPE || TREE_CODE (t1) == BLOCK_POINTER_TYPE)
412     {
413       pointee1 = TREE_TYPE (t1);
414       pointee2 = TREE_TYPE (t2);
415     }
416   else
417     {
418       pointee1 = TYPE_PTRMEM_POINTED_TO_TYPE (t1);
419       pointee2 = TYPE_PTRMEM_POINTED_TO_TYPE (t2);
420     }
421 
422   /* [expr.rel]
423 
424      Otherwise, the composite pointer type is a pointer type
425      similar (_conv.qual_) to the type of one of the operands,
426      with a cv-qualification signature (_conv.qual_) that is the
427      union of the cv-qualification signatures of the operand
428      types.  */
429   if (same_type_ignoring_top_level_qualifiers_p (pointee1, pointee2))
430     result_type = pointee1;
431   else if ((TREE_CODE (pointee1) == POINTER_TYPE
432 	    && TREE_CODE (pointee2) == POINTER_TYPE)
433 	   || (TYPE_PTR_TO_MEMBER_P (pointee1)
434 	       && TYPE_PTR_TO_MEMBER_P (pointee2)))
435     result_type = composite_pointer_type_r (pointee1, pointee2, location);
436   else
437     {
438       pedwarn ("%s between distinct pointer types %qT and %qT "
439 	       "lacks a cast",
440 	       location, t1, t2);
441       result_type = void_type_node;
442     }
443   result_type = cp_build_qualified_type (result_type,
444 					 (cp_type_quals (pointee1)
445 					  | cp_type_quals (pointee2)));
446   /* If the original types were pointers to members, so is the
447      result.  */
448   if (TYPE_PTR_TO_MEMBER_P (t1))
449     {
450       if (!same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
451 			TYPE_PTRMEM_CLASS_TYPE (t2)))
452 	pedwarn ("%s between distinct pointer types %qT and %qT "
453 		 "lacks a cast",
454 		 location, t1, t2);
455       result_type = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
456 				       result_type);
457     }
458   /* APPLE LOCAL begin blocks 6065211 */
459   else if (TREE_CODE (t1) == BLOCK_POINTER_TYPE
460      && result_type != void_type_node)
461     result_type = build_block_pointer_type (result_type);
462   else
463     result_type = build_pointer_type (result_type);
464   /* APPLE LOCAL end blocks 6065211 */
465 
466   /* Merge the attributes.  */
467   attributes = (*targetm.merge_type_attributes) (t1, t2);
468   return build_type_attribute_variant (result_type, attributes);
469 }
470 
471 /* Return the composite pointer type (see [expr.rel]) for T1 and T2.
472    ARG1 and ARG2 are the values with those types.  The LOCATION is a
473    string describing the current location, in case an error occurs.
474 
475    This routine also implements the computation of a common type for
476    pointers-to-members as per [expr.eq].  */
477 
478 tree
composite_pointer_type(tree t1,tree t2,tree arg1,tree arg2,const char * location)479 composite_pointer_type (tree t1, tree t2, tree arg1, tree arg2,
480 			const char* location)
481 {
482   tree class1;
483   tree class2;
484 
485   /* [expr.rel]
486 
487      If one operand is a null pointer constant, the composite pointer
488      type is the type of the other operand.  */
489   if (null_ptr_cst_p (arg1))
490     return t2;
491   if (null_ptr_cst_p (arg2))
492     return t1;
493 
494   /* We have:
495 
496        [expr.rel]
497 
498        If one of the operands has type "pointer to cv1 void*", then
499        the other has type "pointer to cv2T", and the composite pointer
500        type is "pointer to cv12 void", where cv12 is the union of cv1
501        and cv2.
502 
503     If either type is a pointer to void, make sure it is T1.  */
504   if (TREE_CODE (t2) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t2)))
505     {
506       tree t;
507       t = t1;
508       t1 = t2;
509       t2 = t;
510     }
511 
512   /* Now, if T1 is a pointer to void, merge the qualifiers.  */
513   if (TREE_CODE (t1) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t1)))
514     {
515       tree attributes;
516       tree result_type;
517 
518       if (pedantic && TYPE_PTRFN_P (t2))
519 	pedwarn ("ISO C++ forbids %s between pointer of type %<void *%> "
520 		 "and pointer-to-function", location);
521       result_type
522 	= cp_build_qualified_type (void_type_node,
523 				   (cp_type_quals (TREE_TYPE (t1))
524 				    | cp_type_quals (TREE_TYPE (t2))));
525       result_type = build_pointer_type (result_type);
526       /* Merge the attributes.  */
527       attributes = (*targetm.merge_type_attributes) (t1, t2);
528       return build_type_attribute_variant (result_type, attributes);
529     }
530 
531   if (c_dialect_objc () && TREE_CODE (t1) == POINTER_TYPE
532       && TREE_CODE (t2) == POINTER_TYPE)
533     {
534       /* APPLE LOCAL radar 4229905 - radar 6231433 */
535       if (objc_have_common_type (t1, t2, -3, NULL_TREE, location))
536       /* APPLE LOCAL 4154928 */
537 	return objc_common_type (t1, t2);
538     }
539 
540   /* [expr.eq] permits the application of a pointer conversion to
541      bring the pointers to a common type.  */
542   if (TREE_CODE (t1) == POINTER_TYPE && TREE_CODE (t2) == POINTER_TYPE
543       && CLASS_TYPE_P (TREE_TYPE (t1))
544       && CLASS_TYPE_P (TREE_TYPE (t2))
545       && !same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (t1),
546 						     TREE_TYPE (t2)))
547     {
548       class1 = TREE_TYPE (t1);
549       class2 = TREE_TYPE (t2);
550 
551       if (DERIVED_FROM_P (class1, class2))
552 	t2 = (build_pointer_type
553 	      (cp_build_qualified_type (class1, TYPE_QUALS (class2))));
554       else if (DERIVED_FROM_P (class2, class1))
555 	t1 = (build_pointer_type
556 	      (cp_build_qualified_type (class2, TYPE_QUALS (class1))));
557       else
558 	{
559 	  error ("%s between distinct pointer types %qT and %qT "
560 		 "lacks a cast", location, t1, t2);
561 	  return error_mark_node;
562 	}
563     }
564   /* [expr.eq] permits the application of a pointer-to-member
565      conversion to change the class type of one of the types.  */
566   else if (TYPE_PTR_TO_MEMBER_P (t1)
567 	   && !same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
568 			    TYPE_PTRMEM_CLASS_TYPE (t2)))
569     {
570       class1 = TYPE_PTRMEM_CLASS_TYPE (t1);
571       class2 = TYPE_PTRMEM_CLASS_TYPE (t2);
572 
573       if (DERIVED_FROM_P (class1, class2))
574 	t1 = build_ptrmem_type (class2, TYPE_PTRMEM_POINTED_TO_TYPE (t1));
575       else if (DERIVED_FROM_P (class2, class1))
576 	t2 = build_ptrmem_type (class1, TYPE_PTRMEM_POINTED_TO_TYPE (t2));
577       else
578 	{
579 	  error ("%s between distinct pointer-to-member types %qT and %qT "
580 		 "lacks a cast", location, t1, t2);
581 	  return error_mark_node;
582 	}
583     }
584   /* APPLE LOCAL begin blocks 6065211 */
585   else if (TREE_CODE (t1) != TREE_CODE (t2))
586     {
587       error ("%s between distinct pointer types %qT and %qT "
588 	     "lacks a cast", location, t1, t2);
589       return error_mark_node;
590     }
591   /* APPLE LOCAL end blocks 6065211 */
592 
593   return composite_pointer_type_r (t1, t2, location);
594 }
595 
596 /* Return the merged type of two types.
597    We assume that comptypes has already been done and returned 1;
598    if that isn't so, this may crash.
599 
600    This just combines attributes and default arguments; any other
601    differences would cause the two types to compare unalike.  */
602 
603 tree
merge_types(tree t1,tree t2)604 merge_types (tree t1, tree t2)
605 {
606   enum tree_code code1;
607   enum tree_code code2;
608   tree attributes;
609 
610   /* Save time if the two types are the same.  */
611   if (t1 == t2)
612     return t1;
613   if (original_type (t1) == original_type (t2))
614     return t1;
615 
616   /* If one type is nonsense, use the other.  */
617   if (t1 == error_mark_node)
618     return t2;
619   if (t2 == error_mark_node)
620     return t1;
621 
622   /* Merge the attributes.  */
623   attributes = (*targetm.merge_type_attributes) (t1, t2);
624 
625   if (TYPE_PTRMEMFUNC_P (t1))
626     t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
627   if (TYPE_PTRMEMFUNC_P (t2))
628     t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
629 
630   code1 = TREE_CODE (t1);
631   code2 = TREE_CODE (t2);
632 
633   switch (code1)
634     {
635     case POINTER_TYPE:
636     case REFERENCE_TYPE:
637       /* For two pointers, do this recursively on the target type.  */
638       {
639 	tree target = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
640 	int quals = cp_type_quals (t1);
641 
642 	if (code1 == POINTER_TYPE)
643 	  t1 = build_pointer_type (target);
644 	else
645 	  t1 = build_reference_type (target);
646 	t1 = build_type_attribute_variant (t1, attributes);
647 	t1 = cp_build_qualified_type (t1, quals);
648 
649 	if (TREE_CODE (target) == METHOD_TYPE)
650 	  t1 = build_ptrmemfunc_type (t1);
651 
652 	return t1;
653       }
654 
655     case OFFSET_TYPE:
656       {
657 	int quals;
658 	tree pointee;
659 	quals = cp_type_quals (t1);
660 	pointee = merge_types (TYPE_PTRMEM_POINTED_TO_TYPE (t1),
661 			       TYPE_PTRMEM_POINTED_TO_TYPE (t2));
662 	t1 = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
663 				pointee);
664 	t1 = cp_build_qualified_type (t1, quals);
665 	break;
666       }
667 
668     case ARRAY_TYPE:
669       {
670 	tree elt = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
671 	/* Save space: see if the result is identical to one of the args.  */
672 	if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
673 	  return build_type_attribute_variant (t1, attributes);
674 	if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
675 	  return build_type_attribute_variant (t2, attributes);
676 	/* Merge the element types, and have a size if either arg has one.  */
677 	t1 = build_cplus_array_type
678 	  (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
679 	break;
680       }
681 
682     case FUNCTION_TYPE:
683       /* Function types: prefer the one that specified arg types.
684 	 If both do, merge the arg types.  Also merge the return types.  */
685       {
686 	tree valtype = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
687 	tree p1 = TYPE_ARG_TYPES (t1);
688 	tree p2 = TYPE_ARG_TYPES (t2);
689 	tree rval, raises;
690 
691 	/* Save space: see if the result is identical to one of the args.  */
692 	if (valtype == TREE_TYPE (t1) && ! p2)
693 	  return cp_build_type_attribute_variant (t1, attributes);
694 	if (valtype == TREE_TYPE (t2) && ! p1)
695 	  return cp_build_type_attribute_variant (t2, attributes);
696 
697 	/* Simple way if one arg fails to specify argument types.  */
698 	if (p1 == NULL_TREE || TREE_VALUE (p1) == void_type_node)
699 	  {
700 	    rval = build_function_type (valtype, p2);
701 	    if ((raises = TYPE_RAISES_EXCEPTIONS (t2)))
702 	      rval = build_exception_variant (rval, raises);
703 	    return cp_build_type_attribute_variant (rval, attributes);
704 	  }
705 	raises = TYPE_RAISES_EXCEPTIONS (t1);
706 	if (p2 == NULL_TREE || TREE_VALUE (p2) == void_type_node)
707 	  {
708 	    rval = build_function_type (valtype, p1);
709 	    if (raises)
710 	      rval = build_exception_variant (rval, raises);
711 	    return cp_build_type_attribute_variant (rval, attributes);
712 	  }
713 
714 	rval = build_function_type (valtype, commonparms (p1, p2));
715 	t1 = build_exception_variant (rval, raises);
716 	break;
717       }
718 
719     case METHOD_TYPE:
720       {
721 	/* Get this value the long way, since TYPE_METHOD_BASETYPE
722 	   is just the main variant of this.  */
723 	tree basetype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t2)));
724 	tree raises = TYPE_RAISES_EXCEPTIONS (t1);
725 	tree t3;
726 
727 	/* If this was a member function type, get back to the
728 	   original type of type member function (i.e., without
729 	   the class instance variable up front.  */
730 	t1 = build_function_type (TREE_TYPE (t1),
731 				  TREE_CHAIN (TYPE_ARG_TYPES (t1)));
732 	t2 = build_function_type (TREE_TYPE (t2),
733 				  TREE_CHAIN (TYPE_ARG_TYPES (t2)));
734 	t3 = merge_types (t1, t2);
735 	t3 = build_method_type_directly (basetype, TREE_TYPE (t3),
736 					 TYPE_ARG_TYPES (t3));
737 	t1 = build_exception_variant (t3, raises);
738 	break;
739       }
740 
741     case TYPENAME_TYPE:
742       /* There is no need to merge attributes into a TYPENAME_TYPE.
743 	 When the type is instantiated it will have whatever
744 	 attributes result from the instantiation.  */
745       return t1;
746 
747     default:;
748     }
749 
750   if (attribute_list_equal (TYPE_ATTRIBUTES (t1), attributes))
751     return t1;
752   else if (attribute_list_equal (TYPE_ATTRIBUTES (t2), attributes))
753     return t2;
754   else
755     return cp_build_type_attribute_variant (t1, attributes);
756 }
757 
758 /* Return the common type of two types.
759    We assume that comptypes has already been done and returned 1;
760    if that isn't so, this may crash.
761 
762    This is the type for the result of most arithmetic operations
763    if the operands have the given two types.  */
764 
765 tree
common_type(tree t1,tree t2)766 common_type (tree t1, tree t2)
767 {
768   enum tree_code code1;
769   enum tree_code code2;
770 
771   /* If one type is nonsense, bail.  */
772   if (t1 == error_mark_node || t2 == error_mark_node)
773     return error_mark_node;
774 
775   code1 = TREE_CODE (t1);
776   code2 = TREE_CODE (t2);
777 
778   if ((ARITHMETIC_TYPE_P (t1) || code1 == ENUMERAL_TYPE
779        || code1 == VECTOR_TYPE)
780       && (ARITHMETIC_TYPE_P (t2) || code2 == ENUMERAL_TYPE
781 	  || code2 == VECTOR_TYPE))
782     return type_after_usual_arithmetic_conversions (t1, t2);
783 
784   else if ((TYPE_PTR_P (t1) && TYPE_PTR_P (t2))
785 	   || (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
786 	   || (TYPE_PTRMEMFUNC_P (t1) && TYPE_PTRMEMFUNC_P (t2)))
787     return composite_pointer_type (t1, t2, error_mark_node, error_mark_node,
788 				   "conversion");
789   else
790     gcc_unreachable ();
791 }
792 
793 /* Compare two exception specifier types for exactness or subsetness, if
794    allowed. Returns false for mismatch, true for match (same, or
795    derived and !exact).
796 
797    [except.spec] "If a class X ... objects of class X or any class publicly
798    and unambiguously derived from X. Similarly, if a pointer type Y * ...
799    exceptions of type Y * or that are pointers to any type publicly and
800    unambiguously derived from Y. Otherwise a function only allows exceptions
801    that have the same type ..."
802    This does not mention cv qualifiers and is different to what throw
803    [except.throw] and catch [except.catch] will do. They will ignore the
804    top level cv qualifiers, and allow qualifiers in the pointer to class
805    example.
806 
807    We implement the letter of the standard.  */
808 
809 static bool
comp_except_types(tree a,tree b,bool exact)810 comp_except_types (tree a, tree b, bool exact)
811 {
812   if (same_type_p (a, b))
813     return true;
814   else if (!exact)
815     {
816       if (cp_type_quals (a) || cp_type_quals (b))
817 	return false;
818 
819       if (TREE_CODE (a) == POINTER_TYPE
820 	  && TREE_CODE (b) == POINTER_TYPE)
821 	{
822 	  a = TREE_TYPE (a);
823 	  b = TREE_TYPE (b);
824 	  if (cp_type_quals (a) || cp_type_quals (b))
825 	    return false;
826 	}
827 
828       if (TREE_CODE (a) != RECORD_TYPE
829 	  || TREE_CODE (b) != RECORD_TYPE)
830 	return false;
831 
832       if (PUBLICLY_UNIQUELY_DERIVED_P (a, b))
833 	return true;
834     }
835   return false;
836 }
837 
838 /* Return true if TYPE1 and TYPE2 are equivalent exception specifiers.
839    If EXACT is false, T2 can be stricter than T1 (according to 15.4/7),
840    otherwise it must be exact. Exception lists are unordered, but
841    we've already filtered out duplicates. Most lists will be in order,
842    we should try to make use of that.  */
843 
844 bool
comp_except_specs(tree t1,tree t2,bool exact)845 comp_except_specs (tree t1, tree t2, bool exact)
846 {
847   tree probe;
848   tree base;
849   int  length = 0;
850 
851   if (t1 == t2)
852     return true;
853 
854   if (t1 == NULL_TREE)			   /* T1 is ...  */
855     return t2 == NULL_TREE || !exact;
856   if (!TREE_VALUE (t1))			   /* t1 is EMPTY */
857     return t2 != NULL_TREE && !TREE_VALUE (t2);
858   if (t2 == NULL_TREE)			   /* T2 is ...  */
859     return false;
860   if (TREE_VALUE (t1) && !TREE_VALUE (t2)) /* T2 is EMPTY, T1 is not */
861     return !exact;
862 
863   /* Neither set is ... or EMPTY, make sure each part of T2 is in T1.
864      Count how many we find, to determine exactness. For exact matching and
865      ordered T1, T2, this is an O(n) operation, otherwise its worst case is
866      O(nm).  */
867   for (base = t1; t2 != NULL_TREE; t2 = TREE_CHAIN (t2))
868     {
869       for (probe = base; probe != NULL_TREE; probe = TREE_CHAIN (probe))
870 	{
871 	  tree a = TREE_VALUE (probe);
872 	  tree b = TREE_VALUE (t2);
873 
874 	  if (comp_except_types (a, b, exact))
875 	    {
876 	      if (probe == base && exact)
877 		base = TREE_CHAIN (probe);
878 	      length++;
879 	      break;
880 	    }
881 	}
882       if (probe == NULL_TREE)
883 	return false;
884     }
885   return !exact || base == NULL_TREE || length == list_length (t1);
886 }
887 
888 /* Compare the array types T1 and T2.  ALLOW_REDECLARATION is true if
889    [] can match [size].  */
890 
891 static bool
comp_array_types(tree t1,tree t2,bool allow_redeclaration)892 comp_array_types (tree t1, tree t2, bool allow_redeclaration)
893 {
894   tree d1;
895   tree d2;
896   tree max1, max2;
897 
898   if (t1 == t2)
899     return true;
900 
901   /* The type of the array elements must be the same.  */
902   if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
903     return false;
904 
905   d1 = TYPE_DOMAIN (t1);
906   d2 = TYPE_DOMAIN (t2);
907 
908   if (d1 == d2)
909     return true;
910 
911   /* If one of the arrays is dimensionless, and the other has a
912      dimension, they are of different types.  However, it is valid to
913      write:
914 
915        extern int a[];
916        int a[3];
917 
918      by [basic.link]:
919 
920        declarations for an array object can specify
921        array types that differ by the presence or absence of a major
922        array bound (_dcl.array_).  */
923   if (!d1 || !d2)
924     return allow_redeclaration;
925 
926   /* Check that the dimensions are the same.  */
927 
928   if (!cp_tree_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2)))
929     return false;
930   max1 = TYPE_MAX_VALUE (d1);
931   max2 = TYPE_MAX_VALUE (d2);
932   if (processing_template_decl && !abi_version_at_least (2)
933       && !value_dependent_expression_p (max1)
934       && !value_dependent_expression_p (max2))
935     {
936       /* With abi-1 we do not fold non-dependent array bounds, (and
937 	 consequently mangle them incorrectly).  We must therefore
938 	 fold them here, to verify the domains have the same
939 	 value.  */
940       max1 = fold (max1);
941       max2 = fold (max2);
942     }
943 
944   if (!cp_tree_equal (max1, max2))
945     return false;
946 
947   return true;
948 }
949 
950 /* Return true if T1 and T2 are related as allowed by STRICT.  STRICT
951    is a bitwise-or of the COMPARE_* flags.  */
952 
953 bool
comptypes(tree t1,tree t2,int strict)954 comptypes (tree t1, tree t2, int strict)
955 {
956   if (t1 == t2)
957     return true;
958 
959   /* Suppress errors caused by previously reported errors.  */
960   if (t1 == error_mark_node || t2 == error_mark_node)
961     return false;
962 
963   gcc_assert (TYPE_P (t1) && TYPE_P (t2));
964 
965   /* TYPENAME_TYPEs should be resolved if the qualifying scope is the
966      current instantiation.  */
967   if (TREE_CODE (t1) == TYPENAME_TYPE)
968     {
969       tree resolved = resolve_typename_type (t1, /*only_current_p=*/true);
970 
971       if (resolved != error_mark_node)
972 	t1 = resolved;
973     }
974 
975   if (TREE_CODE (t2) == TYPENAME_TYPE)
976     {
977       tree resolved = resolve_typename_type (t2, /*only_current_p=*/true);
978 
979       if (resolved != error_mark_node)
980 	t2 = resolved;
981     }
982 
983   /* If either type is the internal version of sizetype, use the
984      language version.  */
985   if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
986       && TYPE_ORIG_SIZE_TYPE (t1))
987     t1 = TYPE_ORIG_SIZE_TYPE (t1);
988 
989   if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
990       && TYPE_ORIG_SIZE_TYPE (t2))
991     t2 = TYPE_ORIG_SIZE_TYPE (t2);
992 
993   if (TYPE_PTRMEMFUNC_P (t1))
994     t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1);
995   if (TYPE_PTRMEMFUNC_P (t2))
996     t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2);
997 
998   /* Different classes of types can't be compatible.  */
999   if (TREE_CODE (t1) != TREE_CODE (t2))
1000     return false;
1001 
1002   /* Qualifiers must match.  For array types, we will check when we
1003      recur on the array element types.  */
1004   if (TREE_CODE (t1) != ARRAY_TYPE
1005       && TYPE_QUALS (t1) != TYPE_QUALS (t2))
1006     return false;
1007   if (TYPE_FOR_JAVA (t1) != TYPE_FOR_JAVA (t2))
1008     return false;
1009 
1010   /* Allow for two different type nodes which have essentially the same
1011      definition.  Note that we already checked for equality of the type
1012      qualifiers (just above).  */
1013 
1014   if (TREE_CODE (t1) != ARRAY_TYPE
1015       && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
1016     return true;
1017 
1018   /* Compare the types.  Break out if they could be the same.  */
1019   switch (TREE_CODE (t1))
1020     {
1021     case TEMPLATE_TEMPLATE_PARM:
1022     case BOUND_TEMPLATE_TEMPLATE_PARM:
1023       if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2)
1024 	  || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2))
1025 	return false;
1026       if (!comp_template_parms
1027 	  (DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t1)),
1028 	   DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t2))))
1029 	return false;
1030       if (TREE_CODE (t1) == TEMPLATE_TEMPLATE_PARM)
1031 	break;
1032       /* Don't check inheritance.  */
1033       strict = COMPARE_STRICT;
1034       /* Fall through.  */
1035 
1036     case RECORD_TYPE:
1037     case UNION_TYPE:
1038       if (TYPE_TEMPLATE_INFO (t1) && TYPE_TEMPLATE_INFO (t2)
1039 	  && (TYPE_TI_TEMPLATE (t1) == TYPE_TI_TEMPLATE (t2)
1040 	      || TREE_CODE (t1) == BOUND_TEMPLATE_TEMPLATE_PARM)
1041 	  && comp_template_args (TYPE_TI_ARGS (t1), TYPE_TI_ARGS (t2)))
1042 	break;
1043 
1044       if ((strict & COMPARE_BASE) && DERIVED_FROM_P (t1, t2))
1045 	break;
1046       else if ((strict & COMPARE_DERIVED) && DERIVED_FROM_P (t2, t1))
1047 	break;
1048 
1049       return false;
1050 
1051     case OFFSET_TYPE:
1052       if (!comptypes (TYPE_OFFSET_BASETYPE (t1), TYPE_OFFSET_BASETYPE (t2),
1053 		      strict & ~COMPARE_REDECLARATION))
1054 	return false;
1055       if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1056 	return false;
1057       break;
1058 
1059       /* APPLE LOCAL begin blocks 6040305 */
1060       case BLOCK_POINTER_TYPE:
1061 	 if (TREE_CODE (t2) == BLOCK_POINTER_TYPE)
1062 	 {
1063 	   tree pt1 = TREE_TYPE (t1);
1064 	   tree pt2 = TREE_TYPE (t2);
1065 	   if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (pt1),
1066 							  TREE_TYPE (pt2)))
1067 	     return false;
1068 	   if (!compparms (TYPE_ARG_TYPES (pt1), TYPE_ARG_TYPES (pt2)))
1069 	     return false;
1070 	   break;
1071 	 }
1072 	 /* APPLE LOCAL end blocks 6040305 */
1073 
1074     case POINTER_TYPE:
1075     case REFERENCE_TYPE:
1076       if (TYPE_MODE (t1) != TYPE_MODE (t2)
1077 	  || TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2)
1078 	  || !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1079 	return false;
1080       break;
1081 
1082     case METHOD_TYPE:
1083     case FUNCTION_TYPE:
1084       if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1085 	return false;
1086       if (!compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2)))
1087 	return false;
1088       break;
1089 
1090     case ARRAY_TYPE:
1091       /* Target types must match incl. qualifiers.  */
1092       if (!comp_array_types (t1, t2, !!(strict & COMPARE_REDECLARATION)))
1093 	return false;
1094       break;
1095 
1096     case TEMPLATE_TYPE_PARM:
1097       if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2)
1098 	  || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2))
1099 	return false;
1100       break;
1101 
1102     case TYPENAME_TYPE:
1103       if (!cp_tree_equal (TYPENAME_TYPE_FULLNAME (t1),
1104 			  TYPENAME_TYPE_FULLNAME (t2)))
1105 	return false;
1106       if (!same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2)))
1107 	return false;
1108       break;
1109 
1110     case UNBOUND_CLASS_TEMPLATE:
1111       if (!cp_tree_equal (TYPE_IDENTIFIER (t1), TYPE_IDENTIFIER (t2)))
1112 	return false;
1113       if (!same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2)))
1114 	return false;
1115       break;
1116 
1117     case COMPLEX_TYPE:
1118       if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1119 	return false;
1120       break;
1121 
1122     case VECTOR_TYPE:
1123       if (TYPE_VECTOR_SUBPARTS (t1) != TYPE_VECTOR_SUBPARTS (t2)
1124 	  || !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1125 	return false;
1126       break;
1127 
1128     default:
1129       return false;
1130     }
1131 
1132   /* If we get here, we know that from a target independent POV the
1133      types are the same.  Make sure the target attributes are also
1134      the same.  */
1135   return targetm.comp_type_attributes (t1, t2);
1136 }
1137 
1138 /* Returns 1 if TYPE1 is at least as qualified as TYPE2.  */
1139 
1140 bool
at_least_as_qualified_p(tree type1,tree type2)1141 at_least_as_qualified_p (tree type1, tree type2)
1142 {
1143   int q1 = cp_type_quals (type1);
1144   int q2 = cp_type_quals (type2);
1145 
1146   /* All qualifiers for TYPE2 must also appear in TYPE1.  */
1147   return (q1 & q2) == q2;
1148 }
1149 
1150 /* Returns 1 if TYPE1 is more cv-qualified than TYPE2, -1 if TYPE2 is
1151    more cv-qualified that TYPE1, and 0 otherwise.  */
1152 
1153 int
comp_cv_qualification(tree type1,tree type2)1154 comp_cv_qualification (tree type1, tree type2)
1155 {
1156   int q1 = cp_type_quals (type1);
1157   int q2 = cp_type_quals (type2);
1158 
1159   if (q1 == q2)
1160     return 0;
1161 
1162   if ((q1 & q2) == q2)
1163     return 1;
1164   else if ((q1 & q2) == q1)
1165     return -1;
1166 
1167   return 0;
1168 }
1169 
1170 /* Returns 1 if the cv-qualification signature of TYPE1 is a proper
1171    subset of the cv-qualification signature of TYPE2, and the types
1172    are similar.  Returns -1 if the other way 'round, and 0 otherwise.  */
1173 
1174 int
comp_cv_qual_signature(tree type1,tree type2)1175 comp_cv_qual_signature (tree type1, tree type2)
1176 {
1177   if (comp_ptr_ttypes_real (type2, type1, -1))
1178     return 1;
1179   else if (comp_ptr_ttypes_real (type1, type2, -1))
1180     return -1;
1181   else
1182     return 0;
1183 }
1184 
1185 /* If two types share a common base type, return that basetype.
1186    If there is not a unique most-derived base type, this function
1187    returns ERROR_MARK_NODE.  */
1188 
1189 static tree
common_base_type(tree tt1,tree tt2)1190 common_base_type (tree tt1, tree tt2)
1191 {
1192   tree best = NULL_TREE;
1193   int i;
1194 
1195   /* If one is a baseclass of another, that's good enough.  */
1196   if (UNIQUELY_DERIVED_FROM_P (tt1, tt2))
1197     return tt1;
1198   if (UNIQUELY_DERIVED_FROM_P (tt2, tt1))
1199     return tt2;
1200 
1201   /* Otherwise, try to find a unique baseclass of TT1
1202      that is shared by TT2, and follow that down.  */
1203   for (i = BINFO_N_BASE_BINFOS (TYPE_BINFO (tt1))-1; i >= 0; i--)
1204     {
1205       tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (tt1), i));
1206       tree trial = common_base_type (basetype, tt2);
1207 
1208       if (trial)
1209 	{
1210 	  if (trial == error_mark_node)
1211 	    return trial;
1212 	  if (best == NULL_TREE)
1213 	    best = trial;
1214 	  else if (best != trial)
1215 	    return error_mark_node;
1216 	}
1217     }
1218 
1219   /* Same for TT2.  */
1220   for (i = BINFO_N_BASE_BINFOS (TYPE_BINFO (tt2))-1; i >= 0; i--)
1221     {
1222       tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (tt2), i));
1223       tree trial = common_base_type (tt1, basetype);
1224 
1225       if (trial)
1226 	{
1227 	  if (trial == error_mark_node)
1228 	    return trial;
1229 	  if (best == NULL_TREE)
1230 	    best = trial;
1231 	  else if (best != trial)
1232 	    return error_mark_node;
1233 	}
1234     }
1235   return best;
1236 }
1237 
1238 /* Subroutines of `comptypes'.  */
1239 
1240 /* Return true if two parameter type lists PARMS1 and PARMS2 are
1241    equivalent in the sense that functions with those parameter types
1242    can have equivalent types.  The two lists must be equivalent,
1243    element by element.  */
1244 
1245 bool
compparms(tree parms1,tree parms2)1246 compparms (tree parms1, tree parms2)
1247 {
1248   tree t1, t2;
1249 
1250   /* An unspecified parmlist matches any specified parmlist
1251      whose argument types don't need default promotions.  */
1252 
1253   for (t1 = parms1, t2 = parms2;
1254        t1 || t2;
1255        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1256     {
1257       /* If one parmlist is shorter than the other,
1258 	 they fail to match.  */
1259       if (!t1 || !t2)
1260 	return false;
1261       if (!same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1262 	return false;
1263     }
1264   return true;
1265 }
1266 
1267 
1268 /* Process a sizeof or alignof expression where the operand is a
1269    type.  */
1270 
1271 tree
cxx_sizeof_or_alignof_type(tree type,enum tree_code op,bool complain)1272 cxx_sizeof_or_alignof_type (tree type, enum tree_code op, bool complain)
1273 {
1274   tree value;
1275   bool dependent_p;
1276 
1277   gcc_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR);
1278   if (type == error_mark_node)
1279     return error_mark_node;
1280 
1281   type = non_reference (type);
1282   if (TREE_CODE (type) == METHOD_TYPE)
1283     {
1284       if (complain && (pedantic || warn_pointer_arith))
1285 	pedwarn ("invalid application of %qs to a member function",
1286 		 operator_name_info[(int) op].name);
1287       value = size_one_node;
1288     }
1289 
1290   dependent_p = dependent_type_p (type);
1291   if (!dependent_p)
1292     complete_type (type);
1293   if (dependent_p
1294       /* VLA types will have a non-constant size.  In the body of an
1295 	 uninstantiated template, we don't need to try to compute the
1296 	 value, because the sizeof expression is not an integral
1297 	 constant expression in that case.  And, if we do try to
1298 	 compute the value, we'll likely end up with SAVE_EXPRs, which
1299 	 the template substitution machinery does not expect to see.  */
1300       || (processing_template_decl
1301 	  && COMPLETE_TYPE_P (type)
1302 	  && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST))
1303     {
1304       value = build_min (op, size_type_node, type);
1305       TREE_READONLY (value) = 1;
1306       return value;
1307     }
1308 
1309   return c_sizeof_or_alignof_type (complete_type (type),
1310 				   op == SIZEOF_EXPR,
1311 				   complain);
1312 }
1313 
1314 /* Process a sizeof expression where the operand is an expression.  */
1315 
1316 static tree
cxx_sizeof_expr(tree e)1317 cxx_sizeof_expr (tree e)
1318 {
1319   if (e == error_mark_node)
1320     return error_mark_node;
1321 
1322   if (processing_template_decl)
1323     {
1324       e = build_min (SIZEOF_EXPR, size_type_node, e);
1325       TREE_SIDE_EFFECTS (e) = 0;
1326       TREE_READONLY (e) = 1;
1327 
1328       return e;
1329     }
1330 
1331   if (TREE_CODE (e) == COMPONENT_REF
1332       && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL
1333       && DECL_C_BIT_FIELD (TREE_OPERAND (e, 1)))
1334     {
1335       error ("invalid application of %<sizeof%> to a bit-field");
1336       e = char_type_node;
1337     }
1338   else if (is_overloaded_fn (e))
1339     {
1340       pedwarn ("ISO C++ forbids applying %<sizeof%> to an expression of "
1341 	       "function type");
1342       e = char_type_node;
1343     }
1344   else if (type_unknown_p (e))
1345     {
1346       cxx_incomplete_type_error (e, TREE_TYPE (e));
1347       e = char_type_node;
1348     }
1349   else
1350     e = TREE_TYPE (e);
1351 
1352   return cxx_sizeof_or_alignof_type (e, SIZEOF_EXPR, true);
1353 }
1354 
1355 /* Implement the __alignof keyword: Return the minimum required
1356    alignment of E, measured in bytes.  For VAR_DECL's and
1357    FIELD_DECL's return DECL_ALIGN (which can be set from an
1358    "aligned" __attribute__ specification).  */
1359 
1360 static tree
cxx_alignof_expr(tree e)1361 cxx_alignof_expr (tree e)
1362 {
1363   tree t;
1364 
1365   if (e == error_mark_node)
1366     return error_mark_node;
1367 
1368   if (processing_template_decl)
1369     {
1370       e = build_min (ALIGNOF_EXPR, size_type_node, e);
1371       TREE_SIDE_EFFECTS (e) = 0;
1372       TREE_READONLY (e) = 1;
1373 
1374       return e;
1375     }
1376 
1377   if (TREE_CODE (e) == VAR_DECL)
1378     t = size_int (DECL_ALIGN_UNIT (e));
1379   else if (TREE_CODE (e) == COMPONENT_REF
1380 	   && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL
1381 	   && DECL_C_BIT_FIELD (TREE_OPERAND (e, 1)))
1382     {
1383       error ("invalid application of %<__alignof%> to a bit-field");
1384       t = size_one_node;
1385     }
1386   else if (TREE_CODE (e) == COMPONENT_REF
1387 	   && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL)
1388     t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (e, 1)));
1389   else if (is_overloaded_fn (e))
1390     {
1391       pedwarn ("ISO C++ forbids applying %<__alignof%> to an expression of "
1392 	       "function type");
1393       if (TREE_CODE (e) == FUNCTION_DECL)
1394 	t = size_int (DECL_ALIGN_UNIT (e));
1395       else
1396 	t = size_one_node;
1397     }
1398   else if (type_unknown_p (e))
1399     {
1400       cxx_incomplete_type_error (e, TREE_TYPE (e));
1401       t = size_one_node;
1402     }
1403   else
1404     return cxx_sizeof_or_alignof_type (TREE_TYPE (e), ALIGNOF_EXPR, true);
1405 
1406   return fold_convert (size_type_node, t);
1407 }
1408 
1409 /* Process a sizeof or alignof expression E with code OP where the operand
1410    is an expression.  */
1411 
1412 tree
cxx_sizeof_or_alignof_expr(tree e,enum tree_code op)1413 cxx_sizeof_or_alignof_expr (tree e, enum tree_code op)
1414 {
1415   if (op == SIZEOF_EXPR)
1416     return cxx_sizeof_expr (e);
1417   else
1418     return cxx_alignof_expr (e);
1419 }
1420 
1421 /* EXPR is being used in a context that is not a function call.
1422    Enforce:
1423 
1424      [expr.ref]
1425 
1426      The expression can be used only as the left-hand operand of a
1427      member function call.
1428 
1429      [expr.mptr.operator]
1430 
1431      If the result of .* or ->* is a function, then that result can be
1432      used only as the operand for the function call operator ().
1433 
1434    by issuing an error message if appropriate.  Returns true iff EXPR
1435    violates these rules.  */
1436 
1437 bool
invalid_nonstatic_memfn_p(tree expr)1438 invalid_nonstatic_memfn_p (tree expr)
1439 {
1440   if (TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE)
1441     {
1442       error ("invalid use of non-static member function");
1443       return true;
1444     }
1445   return false;
1446 }
1447 
1448 /* If EXP is a reference to a bitfield, and the type of EXP does not
1449    match the declared type of the bitfield, return the declared type
1450    of the bitfield.  Otherwise, return NULL_TREE.  */
1451 
1452 tree
is_bitfield_expr_with_lowered_type(tree exp)1453 is_bitfield_expr_with_lowered_type (tree exp)
1454 {
1455   switch (TREE_CODE (exp))
1456     {
1457     case COND_EXPR:
1458       if (!is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 1)))
1459 	return NULL_TREE;
1460       return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 2));
1461 
1462     case COMPOUND_EXPR:
1463       return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 1));
1464 
1465     case MODIFY_EXPR:
1466     case SAVE_EXPR:
1467       return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 0));
1468 
1469     case COMPONENT_REF:
1470       {
1471 	tree field;
1472 
1473 	field = TREE_OPERAND (exp, 1);
1474 	if (TREE_CODE (field) != FIELD_DECL || !DECL_C_BIT_FIELD (field))
1475 	  return NULL_TREE;
1476 	if (same_type_ignoring_top_level_qualifiers_p
1477 	    (TREE_TYPE (exp), DECL_BIT_FIELD_TYPE (field)))
1478 	  return NULL_TREE;
1479 	return DECL_BIT_FIELD_TYPE (field);
1480       }
1481 
1482     default:
1483       return NULL_TREE;
1484     }
1485 }
1486 
1487 /* Like is_bitfield_with_lowered_type, except that if EXP is not a
1488    bitfield with a lowered type, the type of EXP is returned, rather
1489    than NULL_TREE.  */
1490 
1491 tree
unlowered_expr_type(tree exp)1492 unlowered_expr_type (tree exp)
1493 {
1494   tree type;
1495 
1496   type = is_bitfield_expr_with_lowered_type (exp);
1497   if (!type)
1498     type = TREE_TYPE (exp);
1499 
1500   return type;
1501 }
1502 
1503 /* Perform the conversions in [expr] that apply when an lvalue appears
1504    in an rvalue context: the lvalue-to-rvalue, array-to-pointer, and
1505    function-to-pointer conversions.  In addition, manifest constants
1506    are replaced by their values, and bitfield references are converted
1507    to their declared types.
1508 
1509    Although the returned value is being used as an rvalue, this
1510    function does not wrap the returned expression in a
1511    NON_LVALUE_EXPR; the caller is expected to be mindful of the fact
1512    that the return value is no longer an lvalue.  */
1513 
1514 tree
decay_conversion(tree exp)1515 decay_conversion (tree exp)
1516 {
1517   tree type;
1518   enum tree_code code;
1519 
1520   type = TREE_TYPE (exp);
1521   if (type == error_mark_node)
1522     return error_mark_node;
1523 
1524   if (type_unknown_p (exp))
1525     {
1526       cxx_incomplete_type_error (exp, TREE_TYPE (exp));
1527       return error_mark_node;
1528     }
1529 
1530   exp = decl_constant_value (exp);
1531   if (error_operand_p (exp))
1532     return error_mark_node;
1533 
1534   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
1535      Leave such NOP_EXPRs, since RHS is being used in non-lvalue context.  */
1536   code = TREE_CODE (type);
1537   if (code == VOID_TYPE)
1538     {
1539       error ("void value not ignored as it ought to be");
1540       return error_mark_node;
1541     }
1542   if (invalid_nonstatic_memfn_p (exp))
1543     return error_mark_node;
1544   if (code == FUNCTION_TYPE || is_overloaded_fn (exp))
1545     return build_unary_op (ADDR_EXPR, exp, 0);
1546   if (code == ARRAY_TYPE)
1547     {
1548       tree adr;
1549       tree ptrtype;
1550 
1551       if (TREE_CODE (exp) == INDIRECT_REF)
1552 	return build_nop (build_pointer_type (TREE_TYPE (type)),
1553 			  TREE_OPERAND (exp, 0));
1554 
1555       if (TREE_CODE (exp) == COMPOUND_EXPR)
1556 	{
1557 	  tree op1 = decay_conversion (TREE_OPERAND (exp, 1));
1558 	  return build2 (COMPOUND_EXPR, TREE_TYPE (op1),
1559 			 TREE_OPERAND (exp, 0), op1);
1560 	}
1561 
1562       if (!lvalue_p (exp)
1563 	  && ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
1564 	{
1565 	  error ("invalid use of non-lvalue array");
1566 	  return error_mark_node;
1567 	}
1568 
1569       ptrtype = build_pointer_type (TREE_TYPE (type));
1570 
1571       if (TREE_CODE (exp) == VAR_DECL)
1572 	{
1573 	  if (!cxx_mark_addressable (exp))
1574 	    return error_mark_node;
1575 	  adr = build_nop (ptrtype, build_address (exp));
1576 	  return adr;
1577 	}
1578       /* This way is better for a COMPONENT_REF since it can
1579 	 simplify the offset for a component.  */
1580       adr = build_unary_op (ADDR_EXPR, exp, 1);
1581       return cp_convert (ptrtype, adr);
1582     }
1583 
1584   /* If a bitfield is used in a context where integral promotion
1585      applies, then the caller is expected to have used
1586      default_conversion.  That function promotes bitfields correctly
1587      before calling this function.  At this point, if we have a
1588      bitfield referenced, we may assume that is not subject to
1589      promotion, and that, therefore, the type of the resulting rvalue
1590      is the declared type of the bitfield.  */
1591   exp = convert_bitfield_to_declared_type (exp);
1592 
1593   /* We do not call rvalue() here because we do not want to wrap EXP
1594      in a NON_LVALUE_EXPR.  */
1595 
1596   /* [basic.lval]
1597 
1598      Non-class rvalues always have cv-unqualified types.  */
1599   type = TREE_TYPE (exp);
1600   if (!CLASS_TYPE_P (type) && cp_type_quals (type))
1601     exp = build_nop (TYPE_MAIN_VARIANT (type), exp);
1602 
1603   return exp;
1604 }
1605 
1606 /* Perform prepatory conversions, as part of the "usual arithmetic
1607    conversions".  In particular, as per [expr]:
1608 
1609      Whenever an lvalue expression appears as an operand of an
1610      operator that expects the rvalue for that operand, the
1611      lvalue-to-rvalue, array-to-pointer, or function-to-pointer
1612      standard conversions are applied to convert the expression to an
1613      rvalue.
1614 
1615    In addition, we perform integral promotions here, as those are
1616    applied to both operands to a binary operator before determining
1617    what additional conversions should apply.  */
1618 
1619 tree
default_conversion(tree exp)1620 default_conversion (tree exp)
1621 {
1622   /* Perform the integral promotions first so that bitfield
1623      expressions (which may promote to "int", even if the bitfield is
1624      declared "unsigned") are promoted correctly.  */
1625   if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (exp)))
1626     exp = perform_integral_promotions (exp);
1627   /* Perform the other conversions.  */
1628   exp = decay_conversion (exp);
1629 
1630   return exp;
1631 }
1632 
1633 /* EXPR is an expression with an integral or enumeration type.
1634    Perform the integral promotions in [conv.prom], and return the
1635    converted value.  */
1636 
1637 tree
perform_integral_promotions(tree expr)1638 perform_integral_promotions (tree expr)
1639 {
1640   tree type;
1641   tree promoted_type;
1642 
1643   /* [conv.prom]
1644 
1645      If the bitfield has an enumerated type, it is treated as any
1646      other value of that type for promotion purposes.  */
1647   type = is_bitfield_expr_with_lowered_type (expr);
1648   if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
1649     type = TREE_TYPE (expr);
1650   gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
1651   promoted_type = type_promotes_to (type);
1652   if (type != promoted_type)
1653     expr = cp_convert (promoted_type, expr);
1654   return expr;
1655 }
1656 
1657 /* Take the address of an inline function without setting TREE_ADDRESSABLE
1658    or TREE_USED.  */
1659 
1660 tree
inline_conversion(tree exp)1661 inline_conversion (tree exp)
1662 {
1663   if (TREE_CODE (exp) == FUNCTION_DECL)
1664     exp = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (exp)), exp);
1665 
1666   return exp;
1667 }
1668 
1669 /* Returns nonzero iff exp is a STRING_CST or the result of applying
1670    decay_conversion to one.  */
1671 
1672 int
string_conv_p(tree totype,tree exp,int warn)1673 string_conv_p (tree totype, tree exp, int warn)
1674 {
1675   tree t;
1676 
1677   if (TREE_CODE (totype) != POINTER_TYPE)
1678     return 0;
1679 
1680   t = TREE_TYPE (totype);
1681   if (!same_type_p (t, char_type_node)
1682       && !same_type_p (t, wchar_type_node))
1683     return 0;
1684 
1685   if (TREE_CODE (exp) == STRING_CST)
1686     {
1687       /* Make sure that we don't try to convert between char and wchar_t.  */
1688       if (!same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (exp))), t))
1689 	return 0;
1690     }
1691   else
1692     {
1693       /* Is this a string constant which has decayed to 'const char *'?  */
1694       t = build_pointer_type (build_qualified_type (t, TYPE_QUAL_CONST));
1695       if (!same_type_p (TREE_TYPE (exp), t))
1696 	return 0;
1697       STRIP_NOPS (exp);
1698       if (TREE_CODE (exp) != ADDR_EXPR
1699 	  || TREE_CODE (TREE_OPERAND (exp, 0)) != STRING_CST)
1700 	return 0;
1701     }
1702 
1703   /* This warning is not very useful, as it complains about printf.  */
1704   if (warn)
1705     warning (OPT_Wwrite_strings,
1706 	     "deprecated conversion from string constant to %qT",
1707 	     totype);
1708 
1709   return 1;
1710 }
1711 
1712 /* Given a COND_EXPR, MIN_EXPR, or MAX_EXPR in T, return it in a form that we
1713    can, for example, use as an lvalue.  This code used to be in
1714    unary_complex_lvalue, but we needed it to deal with `a = (d == c) ? b : c'
1715    expressions, where we're dealing with aggregates.  But now it's again only
1716    called from unary_complex_lvalue.  The case (in particular) that led to
1717    this was with CODE == ADDR_EXPR, since it's not an lvalue when we'd
1718    get it there.  */
1719 
1720 static tree
rationalize_conditional_expr(enum tree_code code,tree t)1721 rationalize_conditional_expr (enum tree_code code, tree t)
1722 {
1723   /* For MIN_EXPR or MAX_EXPR, fold-const.c has arranged things so that
1724      the first operand is always the one to be used if both operands
1725      are equal, so we know what conditional expression this used to be.  */
1726   if (TREE_CODE (t) == MIN_EXPR || TREE_CODE (t) == MAX_EXPR)
1727     {
1728       tree op0 = TREE_OPERAND (t, 0);
1729       tree op1 = TREE_OPERAND (t, 1);
1730 
1731       /* The following code is incorrect if either operand side-effects.  */
1732       gcc_assert (!TREE_SIDE_EFFECTS (op0)
1733 		  && !TREE_SIDE_EFFECTS (op1));
1734       return
1735 	build_conditional_expr (build_x_binary_op ((TREE_CODE (t) == MIN_EXPR
1736 						    ? LE_EXPR : GE_EXPR),
1737 						   op0, TREE_CODE (op0),
1738 						   op1, TREE_CODE (op1),
1739 						   /*overloaded_p=*/NULL),
1740 			    build_unary_op (code, op0, 0),
1741 			    build_unary_op (code, op1, 0));
1742     }
1743 
1744   return
1745     build_conditional_expr (TREE_OPERAND (t, 0),
1746 			    build_unary_op (code, TREE_OPERAND (t, 1), 0),
1747 			    build_unary_op (code, TREE_OPERAND (t, 2), 0));
1748 }
1749 
1750 /* Given the TYPE of an anonymous union field inside T, return the
1751    FIELD_DECL for the field.  If not found return NULL_TREE.  Because
1752    anonymous unions can nest, we must also search all anonymous unions
1753    that are directly reachable.  */
1754 
1755 tree
lookup_anon_field(tree t,tree type)1756 lookup_anon_field (tree t, tree type)
1757 {
1758   tree field;
1759 
1760   for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
1761     {
1762       if (TREE_STATIC (field))
1763 	continue;
1764       if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
1765 	continue;
1766 
1767       /* If we find it directly, return the field.  */
1768       if (DECL_NAME (field) == NULL_TREE
1769 	  && type == TYPE_MAIN_VARIANT (TREE_TYPE (field)))
1770 	{
1771 	  return field;
1772 	}
1773 
1774       /* Otherwise, it could be nested, search harder.  */
1775       if (DECL_NAME (field) == NULL_TREE
1776 	  && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1777 	{
1778 	  tree subfield = lookup_anon_field (TREE_TYPE (field), type);
1779 	  if (subfield)
1780 	    return subfield;
1781 	}
1782     }
1783   return NULL_TREE;
1784 }
1785 
1786 /* Build an expression representing OBJECT.MEMBER.  OBJECT is an
1787    expression; MEMBER is a DECL or baselink.  If ACCESS_PATH is
1788    non-NULL, it indicates the path to the base used to name MEMBER.
1789    If PRESERVE_REFERENCE is true, the expression returned will have
1790    REFERENCE_TYPE if the MEMBER does.  Otherwise, the expression
1791    returned will have the type referred to by the reference.
1792 
1793    This function does not perform access control; that is either done
1794    earlier by the parser when the name of MEMBER is resolved to MEMBER
1795    itself, or later when overload resolution selects one of the
1796    functions indicated by MEMBER.  */
1797 
1798 tree
build_class_member_access_expr(tree object,tree member,tree access_path,bool preserve_reference)1799 build_class_member_access_expr (tree object, tree member,
1800 				tree access_path, bool preserve_reference)
1801 {
1802   tree object_type;
1803   tree member_scope;
1804   tree result = NULL_TREE;
1805 
1806   if (error_operand_p (object) || error_operand_p (member))
1807     return error_mark_node;
1808 
1809   gcc_assert (DECL_P (member) || BASELINK_P (member));
1810 
1811   /* [expr.ref]
1812 
1813      The type of the first expression shall be "class object" (of a
1814      complete type).  */
1815   object_type = TREE_TYPE (object);
1816   if (!currently_open_class (object_type)
1817       && !complete_type_or_else (object_type, object))
1818     return error_mark_node;
1819   if (!CLASS_TYPE_P (object_type))
1820     {
1821       error ("request for member %qD in %qE, which is of non-class type %qT",
1822 	     member, object, object_type);
1823       return error_mark_node;
1824     }
1825 
1826   /* The standard does not seem to actually say that MEMBER must be a
1827      member of OBJECT_TYPE.  However, that is clearly what is
1828      intended.  */
1829   if (DECL_P (member))
1830     {
1831       member_scope = DECL_CLASS_CONTEXT (member);
1832       mark_used (member);
1833       if (TREE_DEPRECATED (member))
1834 	warn_deprecated_use (member);
1835     }
1836   else
1837     member_scope = BINFO_TYPE (BASELINK_BINFO (member));
1838   /* If MEMBER is from an anonymous aggregate, MEMBER_SCOPE will
1839      presently be the anonymous union.  Go outwards until we find a
1840      type related to OBJECT_TYPE.  */
1841   while (ANON_AGGR_TYPE_P (member_scope)
1842 	 && !same_type_ignoring_top_level_qualifiers_p (member_scope,
1843 							object_type))
1844     member_scope = TYPE_CONTEXT (member_scope);
1845   if (!member_scope || !DERIVED_FROM_P (member_scope, object_type))
1846     {
1847       if (TREE_CODE (member) == FIELD_DECL)
1848 	error ("invalid use of nonstatic data member %qE", member);
1849       else
1850 	error ("%qD is not a member of %qT", member, object_type);
1851       return error_mark_node;
1852     }
1853 
1854   /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x' into
1855      `(*(a ?  &b : &c)).x', and so on.  A COND_EXPR is only an lvalue
1856      in the frontend; only _DECLs and _REFs are lvalues in the backend.  */
1857   {
1858     tree temp = unary_complex_lvalue (ADDR_EXPR, object);
1859     if (temp)
1860       object = build_indirect_ref (temp, NULL);
1861   }
1862 
1863   /* In [expr.ref], there is an explicit list of the valid choices for
1864      MEMBER.  We check for each of those cases here.  */
1865   if (TREE_CODE (member) == VAR_DECL)
1866     {
1867       /* A static data member.  */
1868       result = member;
1869       /* If OBJECT has side-effects, they are supposed to occur.  */
1870       if (TREE_SIDE_EFFECTS (object))
1871 	result = build2 (COMPOUND_EXPR, TREE_TYPE (result), object, result);
1872     }
1873   else if (TREE_CODE (member) == FIELD_DECL)
1874     {
1875       /* A non-static data member.  */
1876       bool null_object_p;
1877       int type_quals;
1878       tree member_type;
1879 
1880       null_object_p = (TREE_CODE (object) == INDIRECT_REF
1881 		       && integer_zerop (TREE_OPERAND (object, 0)));
1882 
1883       /* Convert OBJECT to the type of MEMBER.  */
1884       if (!same_type_p (TYPE_MAIN_VARIANT (object_type),
1885 			TYPE_MAIN_VARIANT (member_scope)))
1886 	{
1887 	  tree binfo;
1888 	  base_kind kind;
1889 
1890 	  binfo = lookup_base (access_path ? access_path : object_type,
1891 			       member_scope, ba_unique,  &kind);
1892 	  if (binfo == error_mark_node)
1893 	    return error_mark_node;
1894 
1895 	  /* It is invalid to try to get to a virtual base of a
1896 	     NULL object.  The most common cause is invalid use of
1897 	     offsetof macro.  */
1898 	  if (null_object_p && kind == bk_via_virtual)
1899 	    {
1900 	      error ("invalid access to non-static data member %qD of "
1901 		     "NULL object",
1902 		     member);
1903 	      error ("(perhaps the %<offsetof%> macro was used incorrectly)");
1904 	      return error_mark_node;
1905 	    }
1906 
1907 	  /* Convert to the base.  */
1908 	  object = build_base_path (PLUS_EXPR, object, binfo,
1909 				    /*nonnull=*/1);
1910 	  /* If we found the base successfully then we should be able
1911 	     to convert to it successfully.  */
1912 	  gcc_assert (object != error_mark_node);
1913 	}
1914 
1915       /* Complain about other invalid uses of offsetof, even though they will
1916 	 give the right answer.  Note that we complain whether or not they
1917 	 actually used the offsetof macro, since there's no way to know at this
1918 	 point.  So we just give a warning, instead of a pedwarn.  */
1919       /* Do not produce this warning for base class field references, because
1920 	 we know for a fact that didn't come from offsetof.  This does occur
1921 	 in various testsuite cases where a null object is passed where a
1922 	 vtable access is required.  */
1923       if (null_object_p && warn_invalid_offsetof
1924 	  && CLASSTYPE_NON_POD_P (object_type)
1925 	  && !DECL_FIELD_IS_BASE (member)
1926 	  && !skip_evaluation)
1927 	{
1928 	  warning (0, "invalid access to non-static data member %qD of NULL object",
1929 		   member);
1930 	  warning (0, "(perhaps the %<offsetof%> macro was used incorrectly)");
1931 	}
1932 
1933       /* If MEMBER is from an anonymous aggregate, we have converted
1934 	 OBJECT so that it refers to the class containing the
1935 	 anonymous union.  Generate a reference to the anonymous union
1936 	 itself, and recur to find MEMBER.  */
1937       if (ANON_AGGR_TYPE_P (DECL_CONTEXT (member))
1938 	  /* When this code is called from build_field_call, the
1939 	     object already has the type of the anonymous union.
1940 	     That is because the COMPONENT_REF was already
1941 	     constructed, and was then disassembled before calling
1942 	     build_field_call.  After the function-call code is
1943 	     cleaned up, this waste can be eliminated.  */
1944 	  && (!same_type_ignoring_top_level_qualifiers_p
1945 	      (TREE_TYPE (object), DECL_CONTEXT (member))))
1946 	{
1947 	  tree anonymous_union;
1948 
1949 	  anonymous_union = lookup_anon_field (TREE_TYPE (object),
1950 					       DECL_CONTEXT (member));
1951 	  object = build_class_member_access_expr (object,
1952 						   anonymous_union,
1953 						   /*access_path=*/NULL_TREE,
1954 						   preserve_reference);
1955 	}
1956 
1957       /* Compute the type of the field, as described in [expr.ref].  */
1958       type_quals = TYPE_UNQUALIFIED;
1959       member_type = TREE_TYPE (member);
1960       if (TREE_CODE (member_type) != REFERENCE_TYPE)
1961 	{
1962 	  type_quals = (cp_type_quals (member_type)
1963 			| cp_type_quals (object_type));
1964 
1965 	  /* A field is const (volatile) if the enclosing object, or the
1966 	     field itself, is const (volatile).  But, a mutable field is
1967 	     not const, even within a const object.  */
1968 	  if (DECL_MUTABLE_P (member))
1969 	    type_quals &= ~TYPE_QUAL_CONST;
1970 	  member_type = cp_build_qualified_type (member_type, type_quals);
1971 	}
1972 
1973       result = build3 (COMPONENT_REF, member_type, object, member,
1974 		       NULL_TREE);
1975       result = fold_if_not_in_template (result);
1976 
1977       /* Mark the expression const or volatile, as appropriate.  Even
1978 	 though we've dealt with the type above, we still have to mark the
1979 	 expression itself.  */
1980       if (type_quals & TYPE_QUAL_CONST)
1981 	TREE_READONLY (result) = 1;
1982       if (type_quals & TYPE_QUAL_VOLATILE)
1983 	TREE_THIS_VOLATILE (result) = 1;
1984     }
1985   else if (BASELINK_P (member))
1986     {
1987       /* The member is a (possibly overloaded) member function.  */
1988       tree functions;
1989       tree type;
1990 
1991       /* If the MEMBER is exactly one static member function, then we
1992 	 know the type of the expression.  Otherwise, we must wait
1993 	 until overload resolution has been performed.  */
1994       functions = BASELINK_FUNCTIONS (member);
1995       if (TREE_CODE (functions) == FUNCTION_DECL
1996 	  && DECL_STATIC_FUNCTION_P (functions))
1997 	type = TREE_TYPE (functions);
1998       else
1999 	type = unknown_type_node;
2000       /* Note that we do not convert OBJECT to the BASELINK_BINFO
2001 	 base.  That will happen when the function is called.  */
2002       result = build3 (COMPONENT_REF, type, object, member, NULL_TREE);
2003     }
2004   else if (TREE_CODE (member) == CONST_DECL)
2005     {
2006       /* The member is an enumerator.  */
2007       result = member;
2008       /* If OBJECT has side-effects, they are supposed to occur.  */
2009       if (TREE_SIDE_EFFECTS (object))
2010 	result = build2 (COMPOUND_EXPR, TREE_TYPE (result),
2011 			 object, result);
2012     }
2013   else
2014     {
2015       error ("invalid use of %qD", member);
2016       return error_mark_node;
2017     }
2018 
2019   if (!preserve_reference)
2020     /* [expr.ref]
2021 
2022        If E2 is declared to have type "reference to T", then ... the
2023        type of E1.E2 is T.  */
2024     result = convert_from_reference (result);
2025 
2026   return result;
2027 }
2028 
2029 /* Return the destructor denoted by OBJECT.SCOPE::~DTOR_NAME, or, if
2030    SCOPE is NULL, by OBJECT.~DTOR_NAME.  */
2031 
2032 static tree
lookup_destructor(tree object,tree scope,tree dtor_name)2033 lookup_destructor (tree object, tree scope, tree dtor_name)
2034 {
2035   tree object_type = TREE_TYPE (object);
2036   tree dtor_type = TREE_OPERAND (dtor_name, 0);
2037   tree expr;
2038 
2039   if (scope && !check_dtor_name (scope, dtor_type))
2040     {
2041       error ("qualified type %qT does not match destructor name ~%qT",
2042 	     scope, dtor_type);
2043       return error_mark_node;
2044     }
2045   if (!DERIVED_FROM_P (dtor_type, TYPE_MAIN_VARIANT (object_type)))
2046     {
2047       error ("the type being destroyed is %qT, but the destructor refers to %qT",
2048 	     TYPE_MAIN_VARIANT (object_type), dtor_type);
2049       return error_mark_node;
2050     }
2051   expr = lookup_member (dtor_type, complete_dtor_identifier,
2052 			/*protect=*/1, /*want_type=*/false);
2053   expr = (adjust_result_of_qualified_name_lookup
2054 	  (expr, dtor_type, object_type));
2055   return expr;
2056 }
2057 
2058 /* An expression of the form "A::template B" has been resolved to
2059    DECL.  Issue a diagnostic if B is not a template or template
2060    specialization.  */
2061 
2062 void
check_template_keyword(tree decl)2063 check_template_keyword (tree decl)
2064 {
2065   /* The standard says:
2066 
2067       [temp.names]
2068 
2069       If a name prefixed by the keyword template is not a member
2070       template, the program is ill-formed.
2071 
2072      DR 228 removed the restriction that the template be a member
2073      template.
2074 
2075      DR 96, if accepted would add the further restriction that explicit
2076      template arguments must be provided if the template keyword is
2077      used, but, as of 2005-10-16, that DR is still in "drafting".  If
2078      this DR is accepted, then the semantic checks here can be
2079      simplified, as the entity named must in fact be a template
2080      specialization, rather than, as at present, a set of overloaded
2081      functions containing at least one template function.  */
2082   if (TREE_CODE (decl) != TEMPLATE_DECL
2083       && TREE_CODE (decl) != TEMPLATE_ID_EXPR)
2084     {
2085       if (!is_overloaded_fn (decl))
2086 	pedwarn ("%qD is not a template", decl);
2087       else
2088 	{
2089 	  tree fns;
2090 	  fns = decl;
2091 	  if (BASELINK_P (fns))
2092 	    fns = BASELINK_FUNCTIONS (fns);
2093 	  while (fns)
2094 	    {
2095 	      tree fn = OVL_CURRENT (fns);
2096 	      if (TREE_CODE (fn) == TEMPLATE_DECL
2097 		  || TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2098 		break;
2099 	      if (TREE_CODE (fn) == FUNCTION_DECL
2100 		  && DECL_USE_TEMPLATE (fn)
2101 		  && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (fn)))
2102 		break;
2103 	      fns = OVL_NEXT (fns);
2104 	    }
2105 	  if (!fns)
2106 	    pedwarn ("%qD is not a template", decl);
2107 	}
2108     }
2109 }
2110 
2111 /* This function is called by the parser to process a class member
2112    access expression of the form OBJECT.NAME.  NAME is a node used by
2113    the parser to represent a name; it is not yet a DECL.  It may,
2114    however, be a BASELINK where the BASELINK_FUNCTIONS is a
2115    TEMPLATE_ID_EXPR.  Templates must be looked up by the parser, and
2116    there is no reason to do the lookup twice, so the parser keeps the
2117    BASELINK.  TEMPLATE_P is true iff NAME was explicitly declared to
2118    be a template via the use of the "A::template B" syntax.  */
2119 
2120 tree
finish_class_member_access_expr(tree object,tree name,bool template_p)2121 finish_class_member_access_expr (tree object, tree name, bool template_p)
2122 {
2123   tree expr;
2124   tree object_type;
2125   tree member;
2126   tree access_path = NULL_TREE;
2127   tree orig_object = object;
2128   tree orig_name = name;
2129 
2130   if (object == error_mark_node || name == error_mark_node)
2131     return error_mark_node;
2132 
2133   /* If OBJECT is an ObjC class instance, we must obey ObjC access rules.  */
2134   if (!objc_is_public (object, name))
2135     return error_mark_node;
2136 
2137   object_type = TREE_TYPE (object);
2138 
2139   if (processing_template_decl)
2140     {
2141       if (/* If OBJECT_TYPE is dependent, so is OBJECT.NAME.  */
2142 	  dependent_type_p (object_type)
2143 	  /* If NAME is just an IDENTIFIER_NODE, then the expression
2144 	     is dependent.  */
2145 	  || TREE_CODE (object) == IDENTIFIER_NODE
2146 	  /* If NAME is "f<args>", where either 'f' or 'args' is
2147 	     dependent, then the expression is dependent.  */
2148 	  || (TREE_CODE (name) == TEMPLATE_ID_EXPR
2149 	      && dependent_template_id_p (TREE_OPERAND (name, 0),
2150 					  TREE_OPERAND (name, 1)))
2151 	  /* If NAME is "T::X" where "T" is dependent, then the
2152 	     expression is dependent.  */
2153 	  || (TREE_CODE (name) == SCOPE_REF
2154 	      && TYPE_P (TREE_OPERAND (name, 0))
2155 	      && dependent_type_p (TREE_OPERAND (name, 0))))
2156 	return build_min_nt (COMPONENT_REF, object, name, NULL_TREE);
2157       object = build_non_dependent_expr (object);
2158     }
2159 
2160   /* [expr.ref]
2161 
2162      The type of the first expression shall be "class object" (of a
2163      complete type).  */
2164   if (!currently_open_class (object_type)
2165       && !complete_type_or_else (object_type, object))
2166     return error_mark_node;
2167   if (!CLASS_TYPE_P (object_type))
2168     {
2169       error ("request for member %qD in %qE, which is of non-class type %qT",
2170 	     name, object, object_type);
2171       return error_mark_node;
2172     }
2173 
2174   if (BASELINK_P (name))
2175     /* A member function that has already been looked up.  */
2176     member = name;
2177   else
2178     {
2179       bool is_template_id = false;
2180       tree template_args = NULL_TREE;
2181       tree scope;
2182 
2183       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2184 	{
2185 	  is_template_id = true;
2186 	  template_args = TREE_OPERAND (name, 1);
2187 	  name = TREE_OPERAND (name, 0);
2188 
2189 	  if (TREE_CODE (name) == OVERLOAD)
2190 	    name = DECL_NAME (get_first_fn (name));
2191 	  else if (DECL_P (name))
2192 	    name = DECL_NAME (name);
2193 	}
2194 
2195       if (TREE_CODE (name) == SCOPE_REF)
2196 	{
2197 	  /* A qualified name.  The qualifying class or namespace `S'
2198 	     has already been looked up; it is either a TYPE or a
2199 	     NAMESPACE_DECL.  */
2200 	  scope = TREE_OPERAND (name, 0);
2201 	  name = TREE_OPERAND (name, 1);
2202 
2203 	  /* If SCOPE is a namespace, then the qualified name does not
2204 	     name a member of OBJECT_TYPE.  */
2205 	  if (TREE_CODE (scope) == NAMESPACE_DECL)
2206 	    {
2207 	      error ("%<%D::%D%> is not a member of %qT",
2208 		     scope, name, object_type);
2209 	      return error_mark_node;
2210 	    }
2211 
2212 	  gcc_assert (CLASS_TYPE_P (scope));
2213 	  gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE
2214 		      || TREE_CODE (name) == BIT_NOT_EXPR);
2215 
2216 	  /* Find the base of OBJECT_TYPE corresponding to SCOPE.  */
2217 	  access_path = lookup_base (object_type, scope, ba_check, NULL);
2218 	  if (access_path == error_mark_node)
2219 	    return error_mark_node;
2220 	  if (!access_path)
2221 	    {
2222 	      error ("%qT is not a base of %qT", scope, object_type);
2223 	      return error_mark_node;
2224 	    }
2225 	}
2226       else
2227 	{
2228 	  scope = NULL_TREE;
2229 	  access_path = object_type;
2230 	}
2231 
2232       if (TREE_CODE (name) == BIT_NOT_EXPR)
2233 	member = lookup_destructor (object, scope, name);
2234       else
2235 	{
2236 	  /* Look up the member.  */
2237 	  member = lookup_member (access_path, name, /*protect=*/1,
2238 				  /*want_type=*/false);
2239 	  if (member == NULL_TREE)
2240 	    {
2241 	      error ("%qD has no member named %qE", object_type, name);
2242 	      return error_mark_node;
2243 	    }
2244 	  if (member == error_mark_node)
2245 	    return error_mark_node;
2246 	}
2247 
2248       if (is_template_id)
2249 	{
2250 	  tree template = member;
2251 
2252 	  if (BASELINK_P (template))
2253 	    template = lookup_template_function (template, template_args);
2254 	  else
2255 	    {
2256 	      error ("%qD is not a member template function", name);
2257 	      return error_mark_node;
2258 	    }
2259 	}
2260     }
2261 
2262   if (TREE_DEPRECATED (member))
2263     warn_deprecated_use (member);
2264 
2265   if (template_p)
2266     check_template_keyword (member);
2267 
2268   expr = build_class_member_access_expr (object, member, access_path,
2269 					 /*preserve_reference=*/false);
2270   if (processing_template_decl && expr != error_mark_node)
2271     {
2272       if (BASELINK_P (member))
2273 	{
2274 	  if (TREE_CODE (orig_name) == SCOPE_REF)
2275 	    BASELINK_QUALIFIED_P (member) = 1;
2276 	  orig_name = member;
2277 	}
2278       return build_min_non_dep (COMPONENT_REF, expr,
2279 				orig_object, orig_name,
2280 				NULL_TREE);
2281     }
2282 
2283   return expr;
2284 }
2285 
2286 /* Return an expression for the MEMBER_NAME field in the internal
2287    representation of PTRMEM, a pointer-to-member function.  (Each
2288    pointer-to-member function type gets its own RECORD_TYPE so it is
2289    more convenient to access the fields by name than by FIELD_DECL.)
2290    This routine converts the NAME to a FIELD_DECL and then creates the
2291    node for the complete expression.  */
2292 
2293 tree
build_ptrmemfunc_access_expr(tree ptrmem,tree member_name)2294 build_ptrmemfunc_access_expr (tree ptrmem, tree member_name)
2295 {
2296   tree ptrmem_type;
2297   tree member;
2298   tree member_type;
2299 
2300   /* This code is a stripped down version of
2301      build_class_member_access_expr.  It does not work to use that
2302      routine directly because it expects the object to be of class
2303      type.  */
2304   ptrmem_type = TREE_TYPE (ptrmem);
2305   gcc_assert (TYPE_PTRMEMFUNC_P (ptrmem_type));
2306   member = lookup_member (ptrmem_type, member_name, /*protect=*/0,
2307 			  /*want_type=*/false);
2308   member_type = cp_build_qualified_type (TREE_TYPE (member),
2309 					 cp_type_quals (ptrmem_type));
2310   return fold_build3 (COMPONENT_REF, member_type,
2311 		      ptrmem, member, NULL_TREE);
2312 }
2313 
2314 /* Given an expression PTR for a pointer, return an expression
2315    for the value pointed to.
2316    ERRORSTRING is the name of the operator to appear in error messages.
2317 
2318    This function may need to overload OPERATOR_FNNAME.
2319    Must also handle REFERENCE_TYPEs for C++.  */
2320 
2321 tree
build_x_indirect_ref(tree expr,const char * errorstring)2322 build_x_indirect_ref (tree expr, const char *errorstring)
2323 {
2324   tree orig_expr = expr;
2325   tree rval;
2326 
2327   if (processing_template_decl)
2328     {
2329       if (type_dependent_expression_p (expr))
2330 	return build_min_nt (INDIRECT_REF, expr);
2331       expr = build_non_dependent_expr (expr);
2332     }
2333 
2334   rval = build_new_op (INDIRECT_REF, LOOKUP_NORMAL, expr, NULL_TREE,
2335 		       NULL_TREE, /*overloaded_p=*/NULL);
2336   if (!rval)
2337     rval = build_indirect_ref (expr, errorstring);
2338 
2339   if (processing_template_decl && rval != error_mark_node)
2340     return build_min_non_dep (INDIRECT_REF, rval, orig_expr);
2341   else
2342     return rval;
2343 }
2344 
2345 tree
build_indirect_ref(tree ptr,const char * errorstring)2346 build_indirect_ref (tree ptr, const char *errorstring)
2347 {
2348   tree pointer, type;
2349 
2350   if (ptr == error_mark_node)
2351     return error_mark_node;
2352 
2353   if (ptr == current_class_ptr)
2354     return current_class_ref;
2355 
2356   pointer = (TREE_CODE (TREE_TYPE (ptr)) == REFERENCE_TYPE
2357 	     ? ptr : decay_conversion (ptr));
2358   type = TREE_TYPE (pointer);
2359 
2360   if (POINTER_TYPE_P (type))
2361     {
2362       /* [expr.unary.op]
2363 
2364 	 If the type of the expression is "pointer to T," the type
2365 	 of  the  result  is  "T."
2366 
2367 	 We must use the canonical variant because certain parts of
2368 	 the back end, like fold, do pointer comparisons between
2369 	 types.  */
2370       tree t = canonical_type_variant (TREE_TYPE (type));
2371 
2372       if (TREE_CODE (ptr) == CONVERT_EXPR
2373           || TREE_CODE (ptr) == NOP_EXPR
2374           || TREE_CODE (ptr) == VIEW_CONVERT_EXPR)
2375 	{
2376 	  /* If a warning is issued, mark it to avoid duplicates from
2377 	     the backend.  This only needs to be done at
2378 	     warn_strict_aliasing > 2.  */
2379 	  if (warn_strict_aliasing > 2)
2380 	    if (strict_aliasing_warning (TREE_TYPE (TREE_OPERAND (ptr, 0)),
2381 					 type, TREE_OPERAND (ptr, 0)))
2382 	      TREE_NO_WARNING (ptr) = 1;
2383 	}
2384 
2385       if (VOID_TYPE_P (t))
2386 	{
2387 	  /* A pointer to incomplete type (other than cv void) can be
2388 	     dereferenced [expr.unary.op]/1  */
2389 	  error ("%qT is not a pointer-to-object type", type);
2390 	  return error_mark_node;
2391 	}
2392       else if (TREE_CODE (pointer) == ADDR_EXPR
2393 	       && same_type_p (t, TREE_TYPE (TREE_OPERAND (pointer, 0))))
2394 	/* The POINTER was something like `&x'.  We simplify `*&x' to
2395 	   `x'.  */
2396 	return TREE_OPERAND (pointer, 0);
2397       else
2398 	{
2399 	  tree ref = build1 (INDIRECT_REF, t, pointer);
2400 
2401 	  /* We *must* set TREE_READONLY when dereferencing a pointer to const,
2402 	     so that we get the proper error message if the result is used
2403 	     to assign to.  Also, &* is supposed to be a no-op.  */
2404 	  TREE_READONLY (ref) = CP_TYPE_CONST_P (t);
2405 	  TREE_THIS_VOLATILE (ref) = CP_TYPE_VOLATILE_P (t);
2406 	  TREE_SIDE_EFFECTS (ref)
2407 	    = (TREE_THIS_VOLATILE (ref) || TREE_SIDE_EFFECTS (pointer));
2408 	  return ref;
2409 	}
2410     }
2411   /* `pointer' won't be an error_mark_node if we were given a
2412      pointer to member, so it's cool to check for this here.  */
2413   else if (TYPE_PTR_TO_MEMBER_P (type))
2414     error ("invalid use of %qs on pointer to member", errorstring);
2415   else if (pointer != error_mark_node)
2416     {
2417       if (errorstring)
2418 	error ("invalid type argument of %qs", errorstring);
2419       else
2420 	error ("invalid type argument");
2421     }
2422   return error_mark_node;
2423 }
2424 
2425 /* This handles expressions of the form "a[i]", which denotes
2426    an array reference.
2427 
2428    This is logically equivalent in C to *(a+i), but we may do it differently.
2429    If A is a variable or a member, we generate a primitive ARRAY_REF.
2430    This avoids forcing the array out of registers, and can work on
2431    arrays that are not lvalues (for example, members of structures returned
2432    by functions).
2433 
2434    If INDEX is of some user-defined type, it must be converted to
2435    integer type.  Otherwise, to make a compatible PLUS_EXPR, it
2436    will inherit the type of the array, which will be some pointer type.  */
2437 
2438 tree
build_array_ref(tree array,tree idx)2439 build_array_ref (tree array, tree idx)
2440 {
2441   if (idx == 0)
2442     {
2443       error ("subscript missing in array reference");
2444       return error_mark_node;
2445     }
2446 
2447   if (TREE_TYPE (array) == error_mark_node
2448       || TREE_TYPE (idx) == error_mark_node)
2449     return error_mark_node;
2450 
2451   /* If ARRAY is a COMPOUND_EXPR or COND_EXPR, move our reference
2452      inside it.  */
2453   switch (TREE_CODE (array))
2454     {
2455     case COMPOUND_EXPR:
2456       {
2457 	tree value = build_array_ref (TREE_OPERAND (array, 1), idx);
2458 	return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2459 		       TREE_OPERAND (array, 0), value);
2460       }
2461 
2462     case COND_EXPR:
2463       return build_conditional_expr
2464 	(TREE_OPERAND (array, 0),
2465 	 build_array_ref (TREE_OPERAND (array, 1), idx),
2466 	 build_array_ref (TREE_OPERAND (array, 2), idx));
2467 
2468     default:
2469       break;
2470     }
2471 
2472   if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
2473     {
2474       tree rval, type;
2475 
2476       warn_array_subscript_with_type_char (idx);
2477 
2478       if (!INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (idx)))
2479 	{
2480 	  error ("array subscript is not an integer");
2481 	  return error_mark_node;
2482 	}
2483 
2484       /* Apply integral promotions *after* noticing character types.
2485 	 (It is unclear why we do these promotions -- the standard
2486 	 does not say that we should.  In fact, the natural thing would
2487 	 seem to be to convert IDX to ptrdiff_t; we're performing
2488 	 pointer arithmetic.)  */
2489       idx = perform_integral_promotions (idx);
2490 
2491       /* An array that is indexed by a non-constant
2492 	 cannot be stored in a register; we must be able to do
2493 	 address arithmetic on its address.
2494 	 Likewise an array of elements of variable size.  */
2495       if (TREE_CODE (idx) != INTEGER_CST
2496 	  || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
2497 	      && (TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array))))
2498 		  != INTEGER_CST)))
2499 	{
2500 	  if (!cxx_mark_addressable (array))
2501 	    return error_mark_node;
2502 	}
2503 
2504       /* An array that is indexed by a constant value which is not within
2505 	 the array bounds cannot be stored in a register either; because we
2506 	 would get a crash in store_bit_field/extract_bit_field when trying
2507 	 to access a non-existent part of the register.  */
2508       if (TREE_CODE (idx) == INTEGER_CST
2509 	  && TYPE_DOMAIN (TREE_TYPE (array))
2510 	  && ! int_fits_type_p (idx, TYPE_DOMAIN (TREE_TYPE (array))))
2511 	{
2512 	  if (!cxx_mark_addressable (array))
2513 	    return error_mark_node;
2514 	}
2515 
2516       if (pedantic && !lvalue_p (array))
2517 	pedwarn ("ISO C++ forbids subscripting non-lvalue array");
2518 
2519       /* Note in C++ it is valid to subscript a `register' array, since
2520 	 it is valid to take the address of something with that
2521 	 storage specification.  */
2522       if (extra_warnings)
2523 	{
2524 	  tree foo = array;
2525 	  while (TREE_CODE (foo) == COMPONENT_REF)
2526 	    foo = TREE_OPERAND (foo, 0);
2527 	  if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
2528 	    warning (OPT_Wextra, "subscripting array declared %<register%>");
2529 	}
2530 
2531       type = TREE_TYPE (TREE_TYPE (array));
2532       rval = build4 (ARRAY_REF, type, array, idx, NULL_TREE, NULL_TREE);
2533       /* Array ref is const/volatile if the array elements are
2534 	 or if the array is..  */
2535       TREE_READONLY (rval)
2536 	|= (CP_TYPE_CONST_P (type) | TREE_READONLY (array));
2537       TREE_SIDE_EFFECTS (rval)
2538 	|= (CP_TYPE_VOLATILE_P (type) | TREE_SIDE_EFFECTS (array));
2539       TREE_THIS_VOLATILE (rval)
2540 	|= (CP_TYPE_VOLATILE_P (type) | TREE_THIS_VOLATILE (array));
2541       return require_complete_type (fold_if_not_in_template (rval));
2542     }
2543 
2544   {
2545     tree ar = default_conversion (array);
2546     tree ind = default_conversion (idx);
2547 
2548     /* Put the integer in IND to simplify error checking.  */
2549     if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
2550       {
2551 	tree temp = ar;
2552 	ar = ind;
2553 	ind = temp;
2554       }
2555 
2556     if (ar == error_mark_node)
2557       return ar;
2558 
2559     if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE)
2560       {
2561 	error ("subscripted value is neither array nor pointer");
2562 	return error_mark_node;
2563       }
2564     if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
2565       {
2566 	error ("array subscript is not an integer");
2567 	return error_mark_node;
2568       }
2569 
2570     return build_indirect_ref (cp_build_binary_op (PLUS_EXPR, ar, ind),
2571 			       "array indexing");
2572   }
2573 }
2574 
2575 /* Resolve a pointer to member function.  INSTANCE is the object
2576    instance to use, if the member points to a virtual member.
2577 
2578    This used to avoid checking for virtual functions if basetype
2579    has no virtual functions, according to an earlier ANSI draft.
2580    With the final ISO C++ rules, such an optimization is
2581    incorrect: A pointer to a derived member can be static_cast
2582    to pointer-to-base-member, as long as the dynamic object
2583    later has the right member.  */
2584 
2585 tree
get_member_function_from_ptrfunc(tree * instance_ptrptr,tree function)2586 get_member_function_from_ptrfunc (tree *instance_ptrptr, tree function)
2587 {
2588   if (TREE_CODE (function) == OFFSET_REF)
2589     function = TREE_OPERAND (function, 1);
2590 
2591   if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function)))
2592     {
2593       tree idx, delta, e1, e2, e3, vtbl, basetype;
2594       tree fntype = TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (function));
2595 
2596       tree instance_ptr = *instance_ptrptr;
2597       tree instance_save_expr = 0;
2598       if (instance_ptr == error_mark_node)
2599 	{
2600 	  if (TREE_CODE (function) == PTRMEM_CST)
2601 	    {
2602 	      /* Extracting the function address from a pmf is only
2603 		 allowed with -Wno-pmf-conversions. It only works for
2604 		 pmf constants.  */
2605 	      e1 = build_addr_func (PTRMEM_CST_MEMBER (function));
2606 	      e1 = convert (fntype, e1);
2607 	      return e1;
2608 	    }
2609 	  else
2610 	    {
2611 	      error ("object missing in use of %qE", function);
2612 	      return error_mark_node;
2613 	    }
2614 	}
2615 
2616       if (TREE_SIDE_EFFECTS (instance_ptr))
2617 	instance_ptr = instance_save_expr = save_expr (instance_ptr);
2618 
2619       if (TREE_SIDE_EFFECTS (function))
2620 	function = save_expr (function);
2621 
2622       /* Start by extracting all the information from the PMF itself.  */
2623       e3 = pfn_from_ptrmemfunc (function);
2624       delta = build_ptrmemfunc_access_expr (function, delta_identifier);
2625       idx = build1 (NOP_EXPR, vtable_index_type, e3);
2626       switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
2627 	{
2628 	case ptrmemfunc_vbit_in_pfn:
2629 	  e1 = cp_build_binary_op (BIT_AND_EXPR, idx, integer_one_node);
2630 	  idx = cp_build_binary_op (MINUS_EXPR, idx, integer_one_node);
2631 	  break;
2632 
2633 	case ptrmemfunc_vbit_in_delta:
2634 	  e1 = cp_build_binary_op (BIT_AND_EXPR, delta, integer_one_node);
2635 	  delta = cp_build_binary_op (RSHIFT_EXPR, delta, integer_one_node);
2636 	  break;
2637 
2638 	default:
2639 	  gcc_unreachable ();
2640 	}
2641 
2642       /* Convert down to the right base before using the instance.  A
2643 	 special case is that in a pointer to member of class C, C may
2644 	 be incomplete.  In that case, the function will of course be
2645 	 a member of C, and no conversion is required.  In fact,
2646 	 lookup_base will fail in that case, because incomplete
2647 	 classes do not have BINFOs.  */
2648       basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (fntype));
2649       if (!same_type_ignoring_top_level_qualifiers_p
2650 	  (basetype, TREE_TYPE (TREE_TYPE (instance_ptr))))
2651 	{
2652 	  basetype = lookup_base (TREE_TYPE (TREE_TYPE (instance_ptr)),
2653 				  basetype, ba_check, NULL);
2654 	  instance_ptr = build_base_path (PLUS_EXPR, instance_ptr, basetype,
2655 					  1);
2656 	  if (instance_ptr == error_mark_node)
2657 	    return error_mark_node;
2658 	}
2659       /* ...and then the delta in the PMF.  */
2660       instance_ptr = build2 (PLUS_EXPR, TREE_TYPE (instance_ptr),
2661 			     instance_ptr, delta);
2662 
2663       /* Hand back the adjusted 'this' argument to our caller.  */
2664       *instance_ptrptr = instance_ptr;
2665 
2666       /* Next extract the vtable pointer from the object.  */
2667       vtbl = build1 (NOP_EXPR, build_pointer_type (vtbl_ptr_type_node),
2668 		     instance_ptr);
2669       vtbl = build_indirect_ref (vtbl, NULL);
2670 
2671       /* Finally, extract the function pointer from the vtable.  */
2672       e2 = fold_build2 (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, idx);
2673       e2 = build_indirect_ref (e2, NULL);
2674       TREE_CONSTANT (e2) = 1;
2675       TREE_INVARIANT (e2) = 1;
2676 
2677       /* When using function descriptors, the address of the
2678 	 vtable entry is treated as a function pointer.  */
2679       if (TARGET_VTABLE_USES_DESCRIPTORS)
2680 	e2 = build1 (NOP_EXPR, TREE_TYPE (e2),
2681 		     build_unary_op (ADDR_EXPR, e2, /*noconvert=*/1));
2682 
2683       TREE_TYPE (e2) = TREE_TYPE (e3);
2684       e1 = build_conditional_expr (e1, e2, e3);
2685 
2686       /* Make sure this doesn't get evaluated first inside one of the
2687 	 branches of the COND_EXPR.  */
2688       if (instance_save_expr)
2689 	e1 = build2 (COMPOUND_EXPR, TREE_TYPE (e1),
2690 		     instance_save_expr, e1);
2691 
2692       function = e1;
2693     }
2694   return function;
2695 }
2696 
2697 /* APPLE LOCAL begin blocks 6040305 (cm) */
2698 /* APPLE LOCAL begin radar 5847213 - radar 6329245 */
2699 /**
2700  build_block_call - Routine to build a block call; as in:
2701   ((double(*)(void *, int))(BLOCK_PTR_EXP->__FuncPtr))(I, 42);
2702  FNTYPE is the original function type derived from the syntax.
2703  BLOCK_PTR_EXP is the block pointer variable.
2704  PARAMS is the parameter list.
2705 */
2706 static tree
build_block_call(tree fntype,tree block_ptr_exp,tree params)2707 build_block_call (tree fntype, tree block_ptr_exp, tree params)
2708 {
2709   tree function_ptr_exp;
2710   tree typelist;
2711   tree result;
2712   /* APPLE LOCAL radar 6396238 */
2713   bool block_ptr_exp_side_effect = TREE_SIDE_EFFECTS (block_ptr_exp);
2714 
2715   /* First convert it to 'void *'. */
2716   block_ptr_exp = convert (ptr_type_node, block_ptr_exp);
2717   gcc_assert (generic_block_literal_struct_type);
2718   block_ptr_exp = convert (build_pointer_type (generic_block_literal_struct_type),
2719 			    block_ptr_exp);
2720   if (block_ptr_exp_side_effect)
2721     block_ptr_exp = save_expr (block_ptr_exp);
2722 
2723   /* BLOCK_PTR_VAR->__FuncPtr */
2724   function_ptr_exp =
2725     finish_class_member_access_expr (build_indirect_ref (block_ptr_exp, "->"),
2726 					     get_identifier ("__FuncPtr"), false);
2727   gcc_assert (function_ptr_exp);
2728 
2729   /* Build: result_type(*)(void *, function-arg-type-list) */
2730   typelist = TYPE_ARG_TYPES (fntype);
2731   typelist = tree_cons (NULL_TREE, ptr_type_node, typelist);
2732   fntype = build_function_type (TREE_TYPE (fntype), typelist);
2733   function_ptr_exp = convert (build_pointer_type (fntype), function_ptr_exp);
2734   params = tree_cons (NULL_TREE, block_ptr_exp, params);
2735   result = build3 (CALL_EXPR, TREE_TYPE (fntype),
2736 		   function_ptr_exp, params, NULL_TREE);
2737   /* FIXME: should do more from build_cxx_call */
2738   result = convert_from_reference (result);
2739   return result;
2740 }
2741 /* APPLE LOCAL end radar 5847213 - radar 6329245 */
2742 /* APPLE LOCAL end blocks 6040305 (cm) */
2743 
2744 tree
build_function_call(tree function,tree params)2745 build_function_call (tree function, tree params)
2746 {
2747   tree fntype, fndecl;
2748   tree coerced_params;
2749   tree name = NULL_TREE;
2750   int is_method;
2751   tree original = function;
2752 
2753   /* For Objective-C, convert any calls via a cast to OBJC_TYPE_REF
2754      expressions, like those used for ObjC messenger dispatches.  */
2755   function = objc_rewrite_function_call (function, params);
2756 
2757   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2758      Strip such NOP_EXPRs, since FUNCTION is used in non-lvalue context.  */
2759   if (TREE_CODE (function) == NOP_EXPR
2760       && TREE_TYPE (function) == TREE_TYPE (TREE_OPERAND (function, 0)))
2761     function = TREE_OPERAND (function, 0);
2762 
2763   if (TREE_CODE (function) == FUNCTION_DECL)
2764     {
2765       name = DECL_NAME (function);
2766 
2767       mark_used (function);
2768       fndecl = function;
2769 
2770       /* Convert anything with function type to a pointer-to-function.  */
2771       if (pedantic && DECL_MAIN_P (function))
2772 	pedwarn ("ISO C++ forbids calling %<::main%> from within program");
2773 
2774       /* Differs from default_conversion by not setting TREE_ADDRESSABLE
2775 	 (because calling an inline function does not mean the function
2776 	 needs to be separately compiled).  */
2777 
2778       if (DECL_INLINE (function))
2779 	function = inline_conversion (function);
2780       else
2781 	function = build_addr_func (function);
2782     }
2783   else
2784     {
2785       fndecl = NULL_TREE;
2786 
2787       function = build_addr_func (function);
2788     }
2789 
2790   if (function == error_mark_node)
2791     return error_mark_node;
2792 
2793   fntype = TREE_TYPE (function);
2794 
2795   if (TYPE_PTRMEMFUNC_P (fntype))
2796     {
2797       error ("must use %<.*%> or %<->*%> to call pointer-to-member "
2798 	     "function in %<%E (...)%>",
2799 	     original);
2800       return error_mark_node;
2801     }
2802 
2803   is_method = (TREE_CODE (fntype) == POINTER_TYPE
2804 	       && TREE_CODE (TREE_TYPE (fntype)) == METHOD_TYPE);
2805 
2806   /* APPLE LOCAL blocks 6040305 */
2807   if (!(((TREE_CODE (fntype) == POINTER_TYPE || TREE_CODE (fntype) == BLOCK_POINTER_TYPE)
2808 	 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE)
2809 	|| is_method
2810 	|| TREE_CODE (function) == TEMPLATE_ID_EXPR))
2811     {
2812       error ("%qE cannot be used as a function", original);
2813       return error_mark_node;
2814     }
2815 
2816   /* fntype now gets the type of function pointed to.  */
2817   fntype = TREE_TYPE (fntype);
2818 
2819   /* Convert the parameters to the types declared in the
2820      function prototype, or apply default promotions.  */
2821 
2822   /* APPLE LOCAL begin radar 6087117 */
2823   coerced_params = convert_arguments (TYPE_ARG_TYPES (fntype),
2824 				      params, fndecl, LOOKUP_NORMAL,
2825 				      (TREE_CODE (TREE_TYPE (function)) == BLOCK_POINTER_TYPE));
2826   /* APPLE LOCAL end radar 6087117 */
2827   if (coerced_params == error_mark_node)
2828     return error_mark_node;
2829 
2830   /* Check for errors in format strings and inappropriately
2831      null parameters.  */
2832 
2833   check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params,
2834 			    TYPE_ARG_TYPES (fntype));
2835   /* APPLE LOCAL begin blocks 6040305 */
2836   if (TREE_CODE (TREE_TYPE (function)) == BLOCK_POINTER_TYPE)
2837     return build_block_call (fntype, function, coerced_params);
2838   /* APPLE LOCAL end blocks 6040305 */
2839 
2840   return build_cxx_call (function, coerced_params);
2841 }
2842 
2843 /* Convert the actual parameter expressions in the list VALUES
2844    to the types in the list TYPELIST.
2845    If parmdecls is exhausted, or when an element has NULL as its type,
2846    perform the default conversions.
2847 
2848    NAME is an IDENTIFIER_NODE or 0.  It is used only for error messages.
2849 
2850    This is also where warnings about wrong number of args are generated.
2851 
2852    Return a list of expressions for the parameters as converted.
2853 
2854    Both VALUES and the returned value are chains of TREE_LIST nodes
2855    with the elements of the list in the TREE_VALUE slots of those nodes.
2856 
2857    In C++, unspecified trailing parameters can be filled in with their
2858    default arguments, if such were specified.  Do so here.  */
2859 
2860 static tree
2861 /* APPLE LOCAL radar 6087117 */
convert_arguments(tree typelist,tree values,tree fndecl,int flags,int block_call)2862 convert_arguments (tree typelist, tree values, tree fndecl, int flags, int block_call)
2863 {
2864   tree typetail, valtail;
2865   tree result = NULL_TREE;
2866   const char *called_thing = 0;
2867   int i = 0;
2868 
2869   /* Argument passing is always copy-initialization.  */
2870   flags |= LOOKUP_ONLYCONVERTING;
2871 
2872   if (fndecl)
2873     {
2874       if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE)
2875 	{
2876 	  if (DECL_NAME (fndecl) == NULL_TREE
2877 	      || IDENTIFIER_HAS_TYPE_VALUE (DECL_NAME (fndecl)))
2878 	    called_thing = "constructor";
2879 	  else
2880 	    called_thing = "member function";
2881 	}
2882       else
2883 	called_thing = "function";
2884     }
2885 
2886   for (valtail = values, typetail = typelist;
2887        valtail;
2888        valtail = TREE_CHAIN (valtail), i++)
2889     {
2890       tree type = typetail ? TREE_VALUE (typetail) : 0;
2891       tree val = TREE_VALUE (valtail);
2892 
2893       if (val == error_mark_node || type == error_mark_node)
2894 	return error_mark_node;
2895 
2896       if (type == void_type_node)
2897 	{
2898 	  if (fndecl)
2899 	    {
2900 	      error ("too many arguments to %s %q+#D", called_thing, fndecl);
2901 	      error ("at this point in file");
2902 	    }
2903 	  else
2904 	    /* APPLE LOCAL radar 6087117 */
2905 	    error ("too many arguments to %s", (block_call ? "block call" : "function"));
2906 	  /* In case anybody wants to know if this argument
2907 	     list is valid.  */
2908 	  if (result)
2909 	    TREE_TYPE (tree_last (result)) = error_mark_node;
2910 	  break;
2911 	}
2912 
2913       /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
2914 	 Strip such NOP_EXPRs, since VAL is used in non-lvalue context.  */
2915       if (TREE_CODE (val) == NOP_EXPR
2916 	  && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0))
2917 	  && (type == 0 || TREE_CODE (type) != REFERENCE_TYPE))
2918 	val = TREE_OPERAND (val, 0);
2919 
2920       if (type == 0 || TREE_CODE (type) != REFERENCE_TYPE)
2921 	{
2922 	  if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE
2923 	      || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE
2924 	      || TREE_CODE (TREE_TYPE (val)) == METHOD_TYPE)
2925 	    val = decay_conversion (val);
2926 	}
2927 
2928       if (val == error_mark_node)
2929 	return error_mark_node;
2930 
2931       if (type != 0)
2932 	{
2933 	  /* Formal parm type is specified by a function prototype.  */
2934 	  tree parmval;
2935 
2936 	  if (!COMPLETE_TYPE_P (complete_type (type)))
2937 	    {
2938 	      if (fndecl)
2939 		error ("parameter %P of %qD has incomplete type %qT",
2940 		       i, fndecl, type);
2941 	      else
2942 		error ("parameter %P has incomplete type %qT", i, type);
2943 	      parmval = error_mark_node;
2944 	    }
2945 	  else
2946 	    {
2947 	      parmval = convert_for_initialization
2948 		(NULL_TREE, type, val, flags,
2949 		 "argument passing", fndecl, i);
2950 	      parmval = convert_for_arg_passing (type, parmval);
2951 	    }
2952 
2953 	  if (parmval == error_mark_node)
2954 	    return error_mark_node;
2955 
2956 	  result = tree_cons (NULL_TREE, parmval, result);
2957 	}
2958       else
2959 	{
2960 	  if (fndecl && DECL_BUILT_IN (fndecl)
2961 	      && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CONSTANT_P)
2962 	    /* Don't do ellipsis conversion for __built_in_constant_p
2963 	       as this will result in spurious warnings for non-POD
2964 	       types.  */
2965 	    val = require_complete_type (val);
2966 	  else
2967 	    val = convert_arg_to_ellipsis (val);
2968 
2969 	  result = tree_cons (NULL_TREE, val, result);
2970 	}
2971 
2972       if (typetail)
2973 	typetail = TREE_CHAIN (typetail);
2974     }
2975 
2976   if (typetail != 0 && typetail != void_list_node)
2977     {
2978       /* See if there are default arguments that can be used.  */
2979       if (TREE_PURPOSE (typetail)
2980 	  && TREE_CODE (TREE_PURPOSE (typetail)) != DEFAULT_ARG)
2981 	{
2982 	  for (; typetail != void_list_node; ++i)
2983 	    {
2984 	      tree parmval
2985 		= convert_default_arg (TREE_VALUE (typetail),
2986 				       TREE_PURPOSE (typetail),
2987 				       fndecl, i);
2988 
2989 	      if (parmval == error_mark_node)
2990 		return error_mark_node;
2991 
2992 	      result = tree_cons (0, parmval, result);
2993 	      typetail = TREE_CHAIN (typetail);
2994 	      /* ends with `...'.  */
2995 	      if (typetail == NULL_TREE)
2996 		break;
2997 	    }
2998 	}
2999       else
3000 	{
3001 	  if (fndecl)
3002 	    {
3003 	      error ("too few arguments to %s %q+#D", called_thing, fndecl);
3004 	      error ("at this point in file");
3005 	    }
3006 	  else
3007 	    /* APPLE LOCAL radar 6087117 */
3008 	    error ("too few arguments to %s", (block_call ? "block call" : "function"));
3009 	  return error_mark_node;
3010 	}
3011     }
3012 
3013   return nreverse (result);
3014 }
3015 
3016 /* Build a binary-operation expression, after performing default
3017    conversions on the operands.  CODE is the kind of expression to build.  */
3018 
3019 tree
build_x_binary_op(enum tree_code code,tree arg1,enum tree_code arg1_code,tree arg2,enum tree_code arg2_code,bool * overloaded_p)3020 build_x_binary_op (enum tree_code code, tree arg1, enum tree_code arg1_code,
3021 		   tree arg2, enum tree_code arg2_code, bool *overloaded_p)
3022 {
3023   tree orig_arg1;
3024   tree orig_arg2;
3025   tree expr;
3026 
3027   orig_arg1 = arg1;
3028   orig_arg2 = arg2;
3029 
3030   if (processing_template_decl)
3031     {
3032       if (type_dependent_expression_p (arg1)
3033 	  || type_dependent_expression_p (arg2))
3034 	return build_min_nt (code, arg1, arg2);
3035       arg1 = build_non_dependent_expr (arg1);
3036       arg2 = build_non_dependent_expr (arg2);
3037     }
3038 
3039   if (code == DOTSTAR_EXPR)
3040     expr = build_m_component_ref (arg1, arg2);
3041   else
3042     expr = build_new_op (code, LOOKUP_NORMAL, arg1, arg2, NULL_TREE,
3043 			 overloaded_p);
3044 
3045   /* Check for cases such as x+y<<z which users are likely to
3046      misinterpret.  But don't warn about obj << x + y, since that is a
3047      common idiom for I/O.  */
3048   if (warn_parentheses
3049       && !processing_template_decl
3050       && !error_operand_p (arg1)
3051       && !error_operand_p (arg2)
3052       && (code != LSHIFT_EXPR
3053 	  || !IS_AGGR_TYPE (TREE_TYPE (arg1))))
3054     warn_about_parentheses (code, arg1_code, arg2_code);
3055 
3056   if (processing_template_decl && expr != error_mark_node)
3057     return build_min_non_dep (code, expr, orig_arg1, orig_arg2);
3058 
3059   return expr;
3060 }
3061 
3062 /* Build a binary-operation expression without default conversions.
3063    CODE is the kind of expression to build.
3064    This function differs from `build' in several ways:
3065    the data type of the result is computed and recorded in it,
3066    warnings are generated if arg data types are invalid,
3067    special handling for addition and subtraction of pointers is known,
3068    and some optimization is done (operations on narrow ints
3069    are done in the narrower type when that gives the same result).
3070    Constant folding is also done before the result is returned.
3071 
3072    Note that the operands will never have enumeral types
3073    because either they have just had the default conversions performed
3074    or they have both just been converted to some other type in which
3075    the arithmetic is to be done.
3076 
3077    C++: must do special pointer arithmetic when implementing
3078    multiple inheritance, and deal with pointer to member functions.  */
3079 
3080 tree
build_binary_op(enum tree_code code,tree orig_op0,tree orig_op1,int convert_p ATTRIBUTE_UNUSED)3081 build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
3082 		 int convert_p ATTRIBUTE_UNUSED)
3083 {
3084   tree op0, op1;
3085   enum tree_code code0, code1;
3086   tree type0, type1;
3087   const char *invalid_op_diag;
3088 
3089   /* Expression code to give to the expression when it is built.
3090      Normally this is CODE, which is what the caller asked for,
3091      but in some special cases we change it.  */
3092   enum tree_code resultcode = code;
3093 
3094   /* Data type in which the computation is to be performed.
3095      In the simplest cases this is the common type of the arguments.  */
3096   tree result_type = NULL;
3097 
3098   /* Nonzero means operands have already been type-converted
3099      in whatever way is necessary.
3100      Zero means they need to be converted to RESULT_TYPE.  */
3101   int converted = 0;
3102 
3103   /* Nonzero means create the expression with this type, rather than
3104      RESULT_TYPE.  */
3105   tree build_type = 0;
3106 
3107   /* Nonzero means after finally constructing the expression
3108      convert it to this type.  */
3109   tree final_type = 0;
3110 
3111   tree result;
3112 
3113   /* Nonzero if this is an operation like MIN or MAX which can
3114      safely be computed in short if both args are promoted shorts.
3115      Also implies COMMON.
3116      -1 indicates a bitwise operation; this makes a difference
3117      in the exact conditions for when it is safe to do the operation
3118      in a narrower mode.  */
3119   int shorten = 0;
3120 
3121   /* Nonzero if this is a comparison operation;
3122      if both args are promoted shorts, compare the original shorts.
3123      Also implies COMMON.  */
3124   int short_compare = 0;
3125 
3126   /* Nonzero if this is a right-shift operation, which can be computed on the
3127      original short and then promoted if the operand is a promoted short.  */
3128   int short_shift = 0;
3129 
3130   /* Nonzero means set RESULT_TYPE to the common type of the args.  */
3131   int common = 0;
3132 
3133   /* True if both operands have arithmetic type.  */
3134   bool arithmetic_types_p;
3135 
3136   /* Apply default conversions.  */
3137   op0 = orig_op0;
3138   op1 = orig_op1;
3139 
3140   if (code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR
3141       || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR
3142       || code == TRUTH_XOR_EXPR)
3143     {
3144       if (!really_overloaded_fn (op0))
3145 	op0 = decay_conversion (op0);
3146       if (!really_overloaded_fn (op1))
3147 	op1 = decay_conversion (op1);
3148     }
3149   else
3150     {
3151       if (!really_overloaded_fn (op0))
3152 	op0 = default_conversion (op0);
3153       if (!really_overloaded_fn (op1))
3154 	op1 = default_conversion (op1);
3155     }
3156 
3157   /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue.  */
3158   STRIP_TYPE_NOPS (op0);
3159   STRIP_TYPE_NOPS (op1);
3160 
3161   /* DTRT if one side is an overloaded function, but complain about it.  */
3162   if (type_unknown_p (op0))
3163     {
3164       tree t = instantiate_type (TREE_TYPE (op1), op0, tf_none);
3165       if (t != error_mark_node)
3166 	{
3167 	  pedwarn ("assuming cast to type %qT from overloaded function",
3168 		   TREE_TYPE (t));
3169 	  op0 = t;
3170 	}
3171     }
3172   if (type_unknown_p (op1))
3173     {
3174       tree t = instantiate_type (TREE_TYPE (op0), op1, tf_none);
3175       if (t != error_mark_node)
3176 	{
3177 	  pedwarn ("assuming cast to type %qT from overloaded function",
3178 		   TREE_TYPE (t));
3179 	  op1 = t;
3180 	}
3181     }
3182 
3183   type0 = TREE_TYPE (op0);
3184   type1 = TREE_TYPE (op1);
3185 
3186   /* The expression codes of the data types of the arguments tell us
3187      whether the arguments are integers, floating, pointers, etc.  */
3188   code0 = TREE_CODE (type0);
3189   code1 = TREE_CODE (type1);
3190 
3191   /* If an error was already reported for one of the arguments,
3192      avoid reporting another error.  */
3193 
3194   if (code0 == ERROR_MARK || code1 == ERROR_MARK)
3195     return error_mark_node;
3196 
3197   if ((invalid_op_diag
3198        = targetm.invalid_binary_op (code, type0, type1)))
3199     {
3200       error (invalid_op_diag, "");
3201       return error_mark_node;
3202     }
3203 
3204   switch (code)
3205     {
3206     case MINUS_EXPR:
3207       /* Subtraction of two similar pointers.
3208 	 We must subtract them as integers, then divide by object size.  */
3209       if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
3210 	  && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type0),
3211 							TREE_TYPE (type1)))
3212 	return pointer_diff (op0, op1, common_type (type0, type1));
3213       /* In all other cases except pointer - int, the usual arithmetic
3214 	 rules aply.  */
3215       else if (!(code0 == POINTER_TYPE && code1 == INTEGER_TYPE))
3216 	{
3217 	  common = 1;
3218 	  break;
3219 	}
3220       /* The pointer - int case is just like pointer + int; fall
3221 	 through.  */
3222     case PLUS_EXPR:
3223       if ((code0 == POINTER_TYPE || code1 == POINTER_TYPE)
3224 	  && (code0 == INTEGER_TYPE || code1 == INTEGER_TYPE))
3225 	{
3226 	  tree ptr_operand;
3227 	  tree int_operand;
3228 	  ptr_operand = ((code0 == POINTER_TYPE) ? op0 : op1);
3229 	  int_operand = ((code0 == INTEGER_TYPE) ? op0 : op1);
3230 	  if (processing_template_decl)
3231 	    {
3232 	      result_type = TREE_TYPE (ptr_operand);
3233 	      break;
3234 	    }
3235 	  return cp_pointer_int_sum (code,
3236 				     ptr_operand,
3237 				     int_operand);
3238 	}
3239       common = 1;
3240       break;
3241 
3242     case MULT_EXPR:
3243       common = 1;
3244       break;
3245 
3246     case TRUNC_DIV_EXPR:
3247     case CEIL_DIV_EXPR:
3248     case FLOOR_DIV_EXPR:
3249     case ROUND_DIV_EXPR:
3250     case EXACT_DIV_EXPR:
3251       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3252 	   || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
3253 	  && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3254 	      || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
3255 	{
3256 	  enum tree_code tcode0 = code0, tcode1 = code1;
3257 
3258 	  if (TREE_CODE (op1) == INTEGER_CST && integer_zerop (op1))
3259 	    warning (OPT_Wdiv_by_zero, "division by zero in %<%E / 0%>", op0);
3260 	  else if (TREE_CODE (op1) == REAL_CST && real_zerop (op1))
3261 	    warning (OPT_Wdiv_by_zero, "division by zero in %<%E / 0.%>", op0);
3262 
3263 	  if (tcode0 == COMPLEX_TYPE || tcode0 == VECTOR_TYPE)
3264 	    tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
3265 	  if (tcode1 == COMPLEX_TYPE || tcode1 == VECTOR_TYPE)
3266 	    tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
3267 
3268 	  if (!(tcode0 == INTEGER_TYPE && tcode1 == INTEGER_TYPE))
3269 	    resultcode = RDIV_EXPR;
3270 	  else
3271 	    /* When dividing two signed integers, we have to promote to int.
3272 	       unless we divide by a constant != -1.  Note that default
3273 	       conversion will have been performed on the operands at this
3274 	       point, so we have to dig out the original type to find out if
3275 	       it was unsigned.  */
3276 	    shorten = ((TREE_CODE (op0) == NOP_EXPR
3277 			&& TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3278 		       || (TREE_CODE (op1) == INTEGER_CST
3279 			   && ! integer_all_onesp (op1)));
3280 
3281 	  common = 1;
3282 	}
3283       break;
3284 
3285     case BIT_AND_EXPR:
3286     case BIT_IOR_EXPR:
3287     case BIT_XOR_EXPR:
3288       if ((code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3289 	  || (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE))
3290 	shorten = -1;
3291       break;
3292 
3293     case TRUNC_MOD_EXPR:
3294     case FLOOR_MOD_EXPR:
3295       if (code1 == INTEGER_TYPE && integer_zerop (op1))
3296 	warning (OPT_Wdiv_by_zero, "division by zero in %<%E %% 0%>", op0);
3297       else if (code1 == REAL_TYPE && real_zerop (op1))
3298 	warning (OPT_Wdiv_by_zero, "division by zero in %<%E %% 0.%>", op0);
3299 
3300       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3301 	{
3302 	  /* Although it would be tempting to shorten always here, that loses
3303 	     on some targets, since the modulo instruction is undefined if the
3304 	     quotient can't be represented in the computation mode.  We shorten
3305 	     only if unsigned or if dividing by something we know != -1.  */
3306 	  shorten = ((TREE_CODE (op0) == NOP_EXPR
3307 		      && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
3308 		     || (TREE_CODE (op1) == INTEGER_CST
3309 			 && ! integer_all_onesp (op1)));
3310 	  common = 1;
3311 	}
3312       break;
3313 
3314     case TRUTH_ANDIF_EXPR:
3315     case TRUTH_ORIF_EXPR:
3316     case TRUTH_AND_EXPR:
3317     case TRUTH_OR_EXPR:
3318       result_type = boolean_type_node;
3319       break;
3320 
3321       /* Shift operations: result has same type as first operand;
3322 	 always convert second operand to int.
3323 	 Also set SHORT_SHIFT if shifting rightward.  */
3324 
3325     case RSHIFT_EXPR:
3326       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3327 	{
3328 	  result_type = type0;
3329 	  if (TREE_CODE (op1) == INTEGER_CST)
3330 	    {
3331 	      if (tree_int_cst_lt (op1, integer_zero_node))
3332 		warning (0, "right shift count is negative");
3333 	      else
3334 		{
3335 		  if (! integer_zerop (op1))
3336 		    short_shift = 1;
3337 		  if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3338 		    warning (0, "right shift count >= width of type");
3339 		}
3340 	    }
3341 	  /* Convert the shift-count to an integer, regardless of
3342 	     size of value being shifted.  */
3343 	  if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3344 	    op1 = cp_convert (integer_type_node, op1);
3345 	  /* Avoid converting op1 to result_type later.  */
3346 	  converted = 1;
3347 	}
3348       break;
3349 
3350     case LSHIFT_EXPR:
3351       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3352 	{
3353 	  result_type = type0;
3354 	  if (TREE_CODE (op1) == INTEGER_CST)
3355 	    {
3356 	      if (tree_int_cst_lt (op1, integer_zero_node))
3357 		warning (0, "left shift count is negative");
3358 	      else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3359 		warning (0, "left shift count >= width of type");
3360 	    }
3361 	  /* Convert the shift-count to an integer, regardless of
3362 	     size of value being shifted.  */
3363 	  if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3364 	    op1 = cp_convert (integer_type_node, op1);
3365 	  /* Avoid converting op1 to result_type later.  */
3366 	  converted = 1;
3367 	}
3368       break;
3369 
3370     case RROTATE_EXPR:
3371     case LROTATE_EXPR:
3372       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
3373 	{
3374 	  result_type = type0;
3375 	  if (TREE_CODE (op1) == INTEGER_CST)
3376 	    {
3377 	      if (tree_int_cst_lt (op1, integer_zero_node))
3378 		warning (0, "%s rotate count is negative",
3379 			 (code == LROTATE_EXPR) ? "left" : "right");
3380 	      else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
3381 		warning (0, "%s rotate count >= width of type",
3382 			 (code == LROTATE_EXPR) ? "left" : "right");
3383 	    }
3384 	  /* Convert the shift-count to an integer, regardless of
3385 	     size of value being shifted.  */
3386 	  if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
3387 	    op1 = cp_convert (integer_type_node, op1);
3388 	}
3389       break;
3390 
3391     case EQ_EXPR:
3392     case NE_EXPR:
3393       if (code0 == REAL_TYPE || code1 == REAL_TYPE)
3394 	warning (OPT_Wfloat_equal,
3395 		 "comparing floating point with == or != is unsafe");
3396       if ((TREE_CODE (orig_op0) == STRING_CST && !integer_zerop (op1))
3397 	  || (TREE_CODE (orig_op1) == STRING_CST && !integer_zerop (op0)))
3398 	warning (OPT_Waddress,
3399                  "comparison with string literal results in unspecified behaviour");
3400 
3401       build_type = boolean_type_node;
3402       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
3403 	   || code0 == COMPLEX_TYPE)
3404 	  && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3405 	      || code1 == COMPLEX_TYPE))
3406 	short_compare = 1;
3407       /* APPLE LOCAL begin blocks 6040305 */
3408       else if (((code0 == POINTER_TYPE || code0 == BLOCK_POINTER_TYPE)
3409       && (code1 == POINTER_TYPE || code1 == BLOCK_POINTER_TYPE))
3410 	       || (TYPE_PTRMEM_P (type0) && TYPE_PTRMEM_P (type1)))
3411       /* APPLE LOCAL end blocks 6040305 */
3412 	result_type = composite_pointer_type (type0, type1, op0, op1,
3413 					      "comparison");
3414       /* APPLE LOCAL blocks 6040305 (cl) */
3415       else if ((code0 == POINTER_TYPE || code0 == BLOCK_POINTER_TYPE || TYPE_PTRMEM_P (type0))
3416 	       && null_ptr_cst_p (op1))
3417 	result_type = type0;
3418       /* APPLE LOCAL blocks 6040305 (cl) */
3419       else if ((code1 == POINTER_TYPE || code1 == BLOCK_POINTER_TYPE || TYPE_PTRMEM_P (type1))
3420 	       && null_ptr_cst_p (op0))
3421 	result_type = type1;
3422       /* APPLE LOCAL blocks 6040305 (cl) */
3423       else if ((code0 == POINTER_TYPE || code0 == BLOCK_POINTER_TYPE) && code1 == INTEGER_TYPE)
3424 	{
3425 	  result_type = type0;
3426 	  error ("ISO C++ forbids comparison between pointer and integer");
3427 	}
3428       /* APPLE LOCAL blocks 6040305 (cl) */
3429       else if (code0 == INTEGER_TYPE && (code1 == POINTER_TYPE || code1 == BLOCK_POINTER_TYPE))
3430 	{
3431 	  result_type = type1;
3432 	  error ("ISO C++ forbids comparison between pointer and integer");
3433 	}
3434       else if (TYPE_PTRMEMFUNC_P (type0) && null_ptr_cst_p (op1))
3435 	{
3436 	  op0 = build_ptrmemfunc_access_expr (op0, pfn_identifier);
3437 	  op1 = cp_convert (TREE_TYPE (op0), integer_zero_node);
3438 	  result_type = TREE_TYPE (op0);
3439 	}
3440       else if (TYPE_PTRMEMFUNC_P (type1) && null_ptr_cst_p (op0))
3441 	return cp_build_binary_op (code, op1, op0);
3442       else if (TYPE_PTRMEMFUNC_P (type0) && TYPE_PTRMEMFUNC_P (type1)
3443 	       && same_type_p (type0, type1))
3444 	{
3445 	  /* E will be the final comparison.  */
3446 	  tree e;
3447 	  /* E1 and E2 are for scratch.  */
3448 	  tree e1;
3449 	  tree e2;
3450 	  tree pfn0;
3451 	  tree pfn1;
3452 	  tree delta0;
3453 	  tree delta1;
3454 
3455 	  if (TREE_SIDE_EFFECTS (op0))
3456 	    op0 = save_expr (op0);
3457 	  if (TREE_SIDE_EFFECTS (op1))
3458 	    op1 = save_expr (op1);
3459 
3460 	  /* We generate:
3461 
3462 	     (op0.pfn == op1.pfn
3463 	      && (!op0.pfn || op0.delta == op1.delta))
3464 
3465 	     The reason for the `!op0.pfn' bit is that a NULL
3466 	     pointer-to-member is any member with a zero PFN; the
3467 	     DELTA field is unspecified.  */
3468 	  pfn0 = pfn_from_ptrmemfunc (op0);
3469 	  pfn1 = pfn_from_ptrmemfunc (op1);
3470 	  delta0 = build_ptrmemfunc_access_expr (op0,
3471 						 delta_identifier);
3472 	  delta1 = build_ptrmemfunc_access_expr (op1,
3473 						 delta_identifier);
3474 	  e1 = cp_build_binary_op (EQ_EXPR, delta0, delta1);
3475 	  e2 = cp_build_binary_op (EQ_EXPR,
3476 				   pfn0,
3477 				   cp_convert (TREE_TYPE (pfn0),
3478 					       integer_zero_node));
3479 	  e1 = cp_build_binary_op (TRUTH_ORIF_EXPR, e1, e2);
3480 	  e2 = build2 (EQ_EXPR, boolean_type_node, pfn0, pfn1);
3481 	  e = cp_build_binary_op (TRUTH_ANDIF_EXPR, e2, e1);
3482 	  if (code == EQ_EXPR)
3483 	    return e;
3484 	  return cp_build_binary_op (EQ_EXPR, e, integer_zero_node);
3485 	}
3486       else
3487 	{
3488 	  gcc_assert (!TYPE_PTRMEMFUNC_P (type0)
3489 		      || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type0),
3490 				       type1));
3491 	  gcc_assert (!TYPE_PTRMEMFUNC_P (type1)
3492 		      || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type1),
3493 				       type0));
3494 	}
3495 
3496       break;
3497 
3498     case MAX_EXPR:
3499     case MIN_EXPR:
3500       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3501 	   && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3502 	shorten = 1;
3503       else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3504 	result_type = composite_pointer_type (type0, type1, op0, op1,
3505 					      "comparison");
3506       break;
3507 
3508     case LE_EXPR:
3509     case GE_EXPR:
3510     case LT_EXPR:
3511     case GT_EXPR:
3512       if (TREE_CODE (orig_op0) == STRING_CST
3513 	  || TREE_CODE (orig_op1) == STRING_CST)
3514 	warning (OPT_Waddress,
3515                  "comparison with string literal results in unspecified behaviour");
3516 
3517       build_type = boolean_type_node;
3518       if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3519 	   && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3520 	short_compare = 1;
3521       else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
3522 	result_type = composite_pointer_type (type0, type1, op0, op1,
3523 					      "comparison");
3524       else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
3525 	       && integer_zerop (op1))
3526 	result_type = type0;
3527       else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
3528 	       && integer_zerop (op0))
3529 	result_type = type1;
3530       else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
3531 	{
3532 	  result_type = type0;
3533 	  pedwarn ("ISO C++ forbids comparison between pointer and integer");
3534 	}
3535       else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
3536 	{
3537 	  result_type = type1;
3538 	  pedwarn ("ISO C++ forbids comparison between pointer and integer");
3539 	}
3540       break;
3541 
3542     case UNORDERED_EXPR:
3543     case ORDERED_EXPR:
3544     case UNLT_EXPR:
3545     case UNLE_EXPR:
3546     case UNGT_EXPR:
3547     case UNGE_EXPR:
3548     case UNEQ_EXPR:
3549       build_type = integer_type_node;
3550       if (code0 != REAL_TYPE || code1 != REAL_TYPE)
3551 	{
3552 	  error ("unordered comparison on non-floating point argument");
3553 	  return error_mark_node;
3554 	}
3555       common = 1;
3556       break;
3557 
3558     default:
3559       break;
3560     }
3561 
3562   if (((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
3563        && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3564 	   || code1 == COMPLEX_TYPE)))
3565     arithmetic_types_p = 1;
3566   else
3567     {
3568       arithmetic_types_p = 0;
3569       /* Vector arithmetic is only allowed when both sides are vectors.  */
3570       if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
3571 	{
3572 	  if (!tree_int_cst_equal (TYPE_SIZE (type0), TYPE_SIZE (type1))
3573 	      || !same_scalar_type_ignoring_signedness (TREE_TYPE (type0),
3574 							TREE_TYPE (type1)))
3575 	    {
3576 	      binary_op_error (code, type0, type1);
3577 	      return error_mark_node;
3578 	    }
3579 	  arithmetic_types_p = 1;
3580 	}
3581     }
3582   /* Determine the RESULT_TYPE, if it is not already known.  */
3583   if (!result_type
3584       && arithmetic_types_p
3585       && (shorten || common || short_compare))
3586     result_type = common_type (type0, type1);
3587 
3588   if (!result_type)
3589     {
3590       error ("invalid operands of types %qT and %qT to binary %qO",
3591 	     TREE_TYPE (orig_op0), TREE_TYPE (orig_op1), code);
3592       return error_mark_node;
3593     }
3594 
3595   /* If we're in a template, the only thing we need to know is the
3596      RESULT_TYPE.  */
3597   if (processing_template_decl)
3598     return build2 (resultcode,
3599 		   build_type ? build_type : result_type,
3600 		   op0, op1);
3601 
3602   if (arithmetic_types_p)
3603     {
3604       int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
3605 
3606       /* For certain operations (which identify themselves by shorten != 0)
3607 	 if both args were extended from the same smaller type,
3608 	 do the arithmetic in that type and then extend.
3609 
3610 	 shorten !=0 and !=1 indicates a bitwise operation.
3611 	 For them, this optimization is safe only if
3612 	 both args are zero-extended or both are sign-extended.
3613 	 Otherwise, we might change the result.
3614 	 Eg, (short)-1 | (unsigned short)-1 is (int)-1
3615 	 but calculated in (unsigned short) it would be (unsigned short)-1.  */
3616 
3617       if (shorten && none_complex)
3618 	{
3619 	  int unsigned0, unsigned1;
3620 	  tree arg0 = get_narrower (op0, &unsigned0);
3621 	  tree arg1 = get_narrower (op1, &unsigned1);
3622 	  /* UNS is 1 if the operation to be done is an unsigned one.  */
3623 	  int uns = TYPE_UNSIGNED (result_type);
3624 	  tree type;
3625 
3626 	  final_type = result_type;
3627 
3628 	  /* Handle the case that OP0 does not *contain* a conversion
3629 	     but it *requires* conversion to FINAL_TYPE.  */
3630 
3631 	  if (op0 == arg0 && TREE_TYPE (op0) != final_type)
3632 	    unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
3633 	  if (op1 == arg1 && TREE_TYPE (op1) != final_type)
3634 	    unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
3635 
3636 	  /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE.  */
3637 
3638 	  /* For bitwise operations, signedness of nominal type
3639 	     does not matter.  Consider only how operands were extended.  */
3640 	  if (shorten == -1)
3641 	    uns = unsigned0;
3642 
3643 	  /* Note that in all three cases below we refrain from optimizing
3644 	     an unsigned operation on sign-extended args.
3645 	     That would not be valid.  */
3646 
3647 	  /* Both args variable: if both extended in same way
3648 	     from same width, do it in that width.
3649 	     Do it unsigned if args were zero-extended.  */
3650 	  if ((TYPE_PRECISION (TREE_TYPE (arg0))
3651 	       < TYPE_PRECISION (result_type))
3652 	      && (TYPE_PRECISION (TREE_TYPE (arg1))
3653 		  == TYPE_PRECISION (TREE_TYPE (arg0)))
3654 	      && unsigned0 == unsigned1
3655 	      && (unsigned0 || !uns))
3656 	    result_type = c_common_signed_or_unsigned_type
3657 	      (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
3658 	  else if (TREE_CODE (arg0) == INTEGER_CST
3659 		   && (unsigned1 || !uns)
3660 		   && (TYPE_PRECISION (TREE_TYPE (arg1))
3661 		       < TYPE_PRECISION (result_type))
3662 		   && (type = c_common_signed_or_unsigned_type
3663 		       (unsigned1, TREE_TYPE (arg1)),
3664 		       int_fits_type_p (arg0, type)))
3665 	    result_type = type;
3666 	  else if (TREE_CODE (arg1) == INTEGER_CST
3667 		   && (unsigned0 || !uns)
3668 		   && (TYPE_PRECISION (TREE_TYPE (arg0))
3669 		       < TYPE_PRECISION (result_type))
3670 		   && (type = c_common_signed_or_unsigned_type
3671 		       (unsigned0, TREE_TYPE (arg0)),
3672 		       int_fits_type_p (arg1, type)))
3673 	    result_type = type;
3674 	}
3675 
3676       /* Shifts can be shortened if shifting right.  */
3677 
3678       if (short_shift)
3679 	{
3680 	  int unsigned_arg;
3681 	  tree arg0 = get_narrower (op0, &unsigned_arg);
3682 
3683 	  final_type = result_type;
3684 
3685 	  if (arg0 == op0 && final_type == TREE_TYPE (op0))
3686 	    unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
3687 
3688 	  if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
3689 	      /* We can shorten only if the shift count is less than the
3690 		 number of bits in the smaller type size.  */
3691 	      && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
3692 	      /* If arg is sign-extended and then unsigned-shifted,
3693 		 we can simulate this with a signed shift in arg's type
3694 		 only if the extended result is at least twice as wide
3695 		 as the arg.  Otherwise, the shift could use up all the
3696 		 ones made by sign-extension and bring in zeros.
3697 		 We can't optimize that case at all, but in most machines
3698 		 it never happens because available widths are 2**N.  */
3699 	      && (!TYPE_UNSIGNED (final_type)
3700 		  || unsigned_arg
3701 		  || (((unsigned) 2 * TYPE_PRECISION (TREE_TYPE (arg0)))
3702 		      <= TYPE_PRECISION (result_type))))
3703 	    {
3704 	      /* Do an unsigned shift if the operand was zero-extended.  */
3705 	      result_type
3706 		= c_common_signed_or_unsigned_type (unsigned_arg,
3707 						    TREE_TYPE (arg0));
3708 	      /* Convert value-to-be-shifted to that type.  */
3709 	      if (TREE_TYPE (op0) != result_type)
3710 		op0 = cp_convert (result_type, op0);
3711 	      converted = 1;
3712 	    }
3713 	}
3714 
3715       /* Comparison operations are shortened too but differently.
3716 	 They identify themselves by setting short_compare = 1.  */
3717 
3718       if (short_compare)
3719 	{
3720 	  /* Don't write &op0, etc., because that would prevent op0
3721 	     from being kept in a register.
3722 	     Instead, make copies of the our local variables and
3723 	     pass the copies by reference, then copy them back afterward.  */
3724 	  tree xop0 = op0, xop1 = op1, xresult_type = result_type;
3725 	  enum tree_code xresultcode = resultcode;
3726 	  tree val
3727 	    = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
3728 	  if (val != 0)
3729 	    return cp_convert (boolean_type_node, val);
3730 	  op0 = xop0, op1 = xop1;
3731 	  converted = 1;
3732 	  resultcode = xresultcode;
3733 	}
3734 
3735       if ((short_compare || code == MIN_EXPR || code == MAX_EXPR)
3736 	  && warn_sign_compare
3737 	  /* Do not warn until the template is instantiated; we cannot
3738 	     bound the ranges of the arguments until that point.  */
3739 	  && !processing_template_decl)
3740 	{
3741 	  int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
3742 	  int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
3743 
3744 	  int unsignedp0, unsignedp1;
3745 	  tree primop0 = get_narrower (op0, &unsignedp0);
3746 	  tree primop1 = get_narrower (op1, &unsignedp1);
3747 
3748 	  /* Check for comparison of different enum types.  */
3749 	  if (TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE
3750 	      && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE
3751 	      && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
3752 		 != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
3753 	    {
3754 	      warning (0, "comparison between types %q#T and %q#T",
3755 		       TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
3756 	    }
3757 
3758 	  /* Give warnings for comparisons between signed and unsigned
3759 	     quantities that may fail.  */
3760 	  /* Do the checking based on the original operand trees, so that
3761 	     casts will be considered, but default promotions won't be.  */
3762 
3763 	  /* Do not warn if the comparison is being done in a signed type,
3764 	     since the signed type will only be chosen if it can represent
3765 	     all the values of the unsigned type.  */
3766 	  if (!TYPE_UNSIGNED (result_type))
3767 	    /* OK */;
3768 	  /* Do not warn if both operands are unsigned.  */
3769 	  else if (op0_signed == op1_signed)
3770 	    /* OK */;
3771 	  /* Do not warn if the signed quantity is an unsuffixed
3772 	     integer literal (or some static constant expression
3773 	     involving such literals or a conditional expression
3774 	     involving such literals) and it is non-negative.  */
3775 	  else if ((op0_signed && tree_expr_nonnegative_p (orig_op0))
3776 		   || (op1_signed && tree_expr_nonnegative_p (orig_op1)))
3777 	    /* OK */;
3778 	  /* Do not warn if the comparison is an equality operation,
3779 	     the unsigned quantity is an integral constant and it does
3780 	     not use the most significant bit of result_type.  */
3781 	  else if ((resultcode == EQ_EXPR || resultcode == NE_EXPR)
3782 		   && ((op0_signed && TREE_CODE (orig_op1) == INTEGER_CST
3783 			&& int_fits_type_p (orig_op1, c_common_signed_type
3784 					    (result_type)))
3785 			|| (op1_signed && TREE_CODE (orig_op0) == INTEGER_CST
3786 			    && int_fits_type_p (orig_op0, c_common_signed_type
3787 						(result_type)))))
3788 	    /* OK */;
3789 	  else
3790 	    warning (0, "comparison between signed and unsigned integer expressions");
3791 
3792 	  /* Warn if two unsigned values are being compared in a size
3793 	     larger than their original size, and one (and only one) is the
3794 	     result of a `~' operator.  This comparison will always fail.
3795 
3796 	     Also warn if one operand is a constant, and the constant does not
3797 	     have all bits set that are set in the ~ operand when it is
3798 	     extended.  */
3799 
3800 	  if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
3801 	      ^ (TREE_CODE (primop1) == BIT_NOT_EXPR))
3802 	    {
3803 	      if (TREE_CODE (primop0) == BIT_NOT_EXPR)
3804 		primop0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0);
3805 	      if (TREE_CODE (primop1) == BIT_NOT_EXPR)
3806 		primop1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1);
3807 
3808 	      if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
3809 		{
3810 		  tree primop;
3811 		  HOST_WIDE_INT constant, mask;
3812 		  int unsignedp;
3813 		  unsigned int bits;
3814 
3815 		  if (host_integerp (primop0, 0))
3816 		    {
3817 		      primop = primop1;
3818 		      unsignedp = unsignedp1;
3819 		      constant = tree_low_cst (primop0, 0);
3820 		    }
3821 		  else
3822 		    {
3823 		      primop = primop0;
3824 		      unsignedp = unsignedp0;
3825 		      constant = tree_low_cst (primop1, 0);
3826 		    }
3827 
3828 		  bits = TYPE_PRECISION (TREE_TYPE (primop));
3829 		  if (bits < TYPE_PRECISION (result_type)
3830 		      && bits < HOST_BITS_PER_LONG && unsignedp)
3831 		    {
3832 		      mask = (~ (HOST_WIDE_INT) 0) << bits;
3833 		      if ((mask & constant) != mask)
3834 			warning (0, "comparison of promoted ~unsigned with constant");
3835 		    }
3836 		}
3837 	      else if (unsignedp0 && unsignedp1
3838 		       && (TYPE_PRECISION (TREE_TYPE (primop0))
3839 			   < TYPE_PRECISION (result_type))
3840 		       && (TYPE_PRECISION (TREE_TYPE (primop1))
3841 			   < TYPE_PRECISION (result_type)))
3842 		warning (0, "comparison of promoted ~unsigned with unsigned");
3843 	    }
3844 	}
3845     }
3846 
3847   /* If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
3848      Then the expression will be built.
3849      It will be given type FINAL_TYPE if that is nonzero;
3850      otherwise, it will be given type RESULT_TYPE.  */
3851 
3852   /* Issue warnings about peculiar, but valid, uses of NULL.  */
3853   if (/* It's reasonable to use pointer values as operands of &&
3854 	 and ||, so NULL is no exception.  */
3855       !(code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR)
3856       && (/* If OP0 is NULL and OP1 is not a pointer, or vice versa.  */
3857 	  (orig_op0 == null_node
3858 	   && TREE_CODE (TREE_TYPE (op1)) != POINTER_TYPE)
3859 	  /* Or vice versa.  */
3860 	  || (orig_op1 == null_node
3861 	      && TREE_CODE (TREE_TYPE (op0)) != POINTER_TYPE)
3862 	  /* Or, both are NULL and the operation was not a comparison.  */
3863 	  || (orig_op0 == null_node && orig_op1 == null_node
3864 	      && code != EQ_EXPR && code != NE_EXPR)))
3865     /* Some sort of arithmetic operation involving NULL was
3866        performed.  Note that pointer-difference and pointer-addition
3867        have already been handled above, and so we don't end up here in
3868        that case.  */
3869     warning (0, "NULL used in arithmetic");
3870 
3871   if (! converted)
3872     {
3873       if (TREE_TYPE (op0) != result_type)
3874 	op0 = cp_convert (result_type, op0);
3875       if (TREE_TYPE (op1) != result_type)
3876 	op1 = cp_convert (result_type, op1);
3877 
3878       if (op0 == error_mark_node || op1 == error_mark_node)
3879 	return error_mark_node;
3880     }
3881 
3882   if (build_type == NULL_TREE)
3883     build_type = result_type;
3884 
3885   result = build2 (resultcode, build_type, op0, op1);
3886   result = fold_if_not_in_template (result);
3887   if (final_type != 0)
3888     result = cp_convert (final_type, result);
3889 
3890   if (TREE_OVERFLOW_P (result)
3891       && !TREE_OVERFLOW_P (op0)
3892       && !TREE_OVERFLOW_P (op1))
3893     overflow_warning (result);
3894 
3895   return result;
3896 }
3897 
3898 /* Return a tree for the sum or difference (RESULTCODE says which)
3899    of pointer PTROP and integer INTOP.  */
3900 
3901 static tree
cp_pointer_int_sum(enum tree_code resultcode,tree ptrop,tree intop)3902 cp_pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
3903 {
3904   tree res_type = TREE_TYPE (ptrop);
3905 
3906   /* pointer_int_sum() uses size_in_bytes() on the TREE_TYPE(res_type)
3907      in certain circumstance (when it's valid to do so).  So we need
3908      to make sure it's complete.  We don't need to check here, if we
3909      can actually complete it at all, as those checks will be done in
3910      pointer_int_sum() anyway.  */
3911   complete_type (TREE_TYPE (res_type));
3912 
3913   return pointer_int_sum (resultcode, ptrop,
3914 			  fold_if_not_in_template (intop));
3915 }
3916 
3917 /* Return a tree for the difference of pointers OP0 and OP1.
3918    The resulting tree has type int.  */
3919 
3920 static tree
pointer_diff(tree op0,tree op1,tree ptrtype)3921 pointer_diff (tree op0, tree op1, tree ptrtype)
3922 {
3923   tree result;
3924   tree restype = ptrdiff_type_node;
3925   tree target_type = TREE_TYPE (ptrtype);
3926 
3927   if (!complete_type_or_else (target_type, NULL_TREE))
3928     return error_mark_node;
3929 
3930   if (pedantic || warn_pointer_arith)
3931     {
3932       if (TREE_CODE (target_type) == VOID_TYPE)
3933 	pedwarn ("ISO C++ forbids using pointer of type %<void *%> in subtraction");
3934       if (TREE_CODE (target_type) == FUNCTION_TYPE)
3935 	pedwarn ("ISO C++ forbids using pointer to a function in subtraction");
3936       if (TREE_CODE (target_type) == METHOD_TYPE)
3937 	pedwarn ("ISO C++ forbids using pointer to a method in subtraction");
3938     }
3939 
3940   /* First do the subtraction as integers;
3941      then drop through to build the divide operator.  */
3942 
3943   op0 = cp_build_binary_op (MINUS_EXPR,
3944 			    cp_convert (restype, op0),
3945 			    cp_convert (restype, op1));
3946 
3947   /* This generates an error if op1 is a pointer to an incomplete type.  */
3948   if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (op1))))
3949     error ("invalid use of a pointer to an incomplete type in pointer arithmetic");
3950 
3951   op1 = (TYPE_PTROB_P (ptrtype)
3952 	 ? size_in_bytes (target_type)
3953 	 : integer_one_node);
3954 
3955   /* Do the division.  */
3956 
3957   result = build2 (EXACT_DIV_EXPR, restype, op0, cp_convert (restype, op1));
3958   return fold_if_not_in_template (result);
3959 }
3960 
3961 /* Construct and perhaps optimize a tree representation
3962    for a unary operation.  CODE, a tree_code, specifies the operation
3963    and XARG is the operand.  */
3964 
3965 tree
build_x_unary_op(enum tree_code code,tree xarg)3966 build_x_unary_op (enum tree_code code, tree xarg)
3967 {
3968   tree orig_expr = xarg;
3969   tree exp;
3970   int ptrmem = 0;
3971 
3972   if (processing_template_decl)
3973     {
3974       if (type_dependent_expression_p (xarg))
3975 	return build_min_nt (code, xarg, NULL_TREE);
3976 
3977       xarg = build_non_dependent_expr (xarg);
3978     }
3979 
3980   exp = NULL_TREE;
3981 
3982   /* [expr.unary.op] says:
3983 
3984        The address of an object of incomplete type can be taken.
3985 
3986      (And is just the ordinary address operator, not an overloaded
3987      "operator &".)  However, if the type is a template
3988      specialization, we must complete the type at this point so that
3989      an overloaded "operator &" will be available if required.  */
3990   if (code == ADDR_EXPR
3991       && TREE_CODE (xarg) != TEMPLATE_ID_EXPR
3992       && ((CLASS_TYPE_P (TREE_TYPE (xarg))
3993 	   && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (xarg))))
3994 	  || (TREE_CODE (xarg) == OFFSET_REF)))
3995     /* Don't look for a function.  */;
3996   else
3997     exp = build_new_op (code, LOOKUP_NORMAL, xarg, NULL_TREE, NULL_TREE,
3998 			/*overloaded_p=*/NULL);
3999   if (!exp && code == ADDR_EXPR)
4000     {
4001       /*  A pointer to member-function can be formed only by saying
4002 	  &X::mf.  */
4003       if (!flag_ms_extensions && TREE_CODE (TREE_TYPE (xarg)) == METHOD_TYPE
4004 	  && (TREE_CODE (xarg) != OFFSET_REF || !PTRMEM_OK_P (xarg)))
4005 	{
4006 	  if (TREE_CODE (xarg) != OFFSET_REF
4007 	      || !TYPE_P (TREE_OPERAND (xarg, 0)))
4008 	    {
4009 	      error ("invalid use of %qE to form a pointer-to-member-function",
4010 		     xarg);
4011 	      if (TREE_CODE (xarg) != OFFSET_REF)
4012 		inform ("  a qualified-id is required");
4013 	      return error_mark_node;
4014 	    }
4015 	  else
4016 	    {
4017 	      error ("parentheses around %qE cannot be used to form a"
4018 		     " pointer-to-member-function",
4019 		     xarg);
4020 	      PTRMEM_OK_P (xarg) = 1;
4021 	    }
4022 	}
4023 
4024       if (TREE_CODE (xarg) == OFFSET_REF)
4025 	{
4026 	  ptrmem = PTRMEM_OK_P (xarg);
4027 
4028 	  if (!ptrmem && !flag_ms_extensions
4029 	      && TREE_CODE (TREE_TYPE (TREE_OPERAND (xarg, 1))) == METHOD_TYPE)
4030 	    {
4031 	      /* A single non-static member, make sure we don't allow a
4032 		 pointer-to-member.  */
4033 	      xarg = build2 (OFFSET_REF, TREE_TYPE (xarg),
4034 			     TREE_OPERAND (xarg, 0),
4035 			     ovl_cons (TREE_OPERAND (xarg, 1), NULL_TREE));
4036 	      PTRMEM_OK_P (xarg) = ptrmem;
4037 	    }
4038 	}
4039       else if (TREE_CODE (xarg) == TARGET_EXPR)
4040 	warning (0, "taking address of temporary");
4041       exp = build_unary_op (ADDR_EXPR, xarg, 0);
4042     }
4043 
4044   if (processing_template_decl && exp != error_mark_node)
4045     exp = build_min_non_dep (code, exp, orig_expr,
4046 			     /*For {PRE,POST}{INC,DEC}REMENT_EXPR*/NULL_TREE);
4047   if (TREE_CODE (exp) == ADDR_EXPR)
4048     PTRMEM_OK_P (exp) = ptrmem;
4049   return exp;
4050 }
4051 
4052 /* Like c_common_truthvalue_conversion, but handle pointer-to-member
4053    constants, where a null value is represented by an INTEGER_CST of
4054    -1.  */
4055 
4056 tree
cp_truthvalue_conversion(tree expr)4057 cp_truthvalue_conversion (tree expr)
4058 {
4059   tree type = TREE_TYPE (expr);
4060   if (TYPE_PTRMEM_P (type))
4061     return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
4062   else
4063     return c_common_truthvalue_conversion (expr);
4064 }
4065 
4066 /* Just like cp_truthvalue_conversion, but we want a CLEANUP_POINT_EXPR.  */
4067 
4068 tree
condition_conversion(tree expr)4069 condition_conversion (tree expr)
4070 {
4071   tree t;
4072   if (processing_template_decl)
4073     return expr;
4074   t = perform_implicit_conversion (boolean_type_node, expr);
4075   t = fold_build_cleanup_point_expr (boolean_type_node, t);
4076   return t;
4077 }
4078 
4079 /* Return an ADDR_EXPR giving the address of T.  This function
4080    attempts no optimizations or simplifications; it is a low-level
4081    primitive.  */
4082 
4083 tree
build_address(tree t)4084 build_address (tree t)
4085 {
4086   tree addr;
4087 
4088   if (error_operand_p (t) || !cxx_mark_addressable (t))
4089     return error_mark_node;
4090 
4091   addr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (t)), t);
4092 
4093   return addr;
4094 }
4095 
4096 /* Return a NOP_EXPR converting EXPR to TYPE.  */
4097 
4098 tree
build_nop(tree type,tree expr)4099 build_nop (tree type, tree expr)
4100 {
4101   if (type == error_mark_node || error_operand_p (expr))
4102     return expr;
4103   return build1 (NOP_EXPR, type, expr);
4104 }
4105 
4106 /* C++: Must handle pointers to members.
4107 
4108    Perhaps type instantiation should be extended to handle conversion
4109    from aggregates to types we don't yet know we want?  (Or are those
4110    cases typically errors which should be reported?)
4111 
4112    NOCONVERT nonzero suppresses the default promotions
4113    (such as from short to int).  */
4114 
4115 tree
build_unary_op(enum tree_code code,tree xarg,int noconvert)4116 build_unary_op (enum tree_code code, tree xarg, int noconvert)
4117 {
4118   /* No default_conversion here.  It causes trouble for ADDR_EXPR.  */
4119   tree arg = xarg;
4120   tree argtype = 0;
4121   const char *errstring = NULL;
4122   tree val;
4123   const char *invalid_op_diag;
4124 
4125   if (arg == error_mark_node)
4126     return error_mark_node;
4127 
4128   if ((invalid_op_diag
4129        = targetm.invalid_unary_op ((code == UNARY_PLUS_EXPR
4130 				    ? CONVERT_EXPR
4131 				    : code),
4132 				   TREE_TYPE (xarg))))
4133     {
4134       error (invalid_op_diag, "");
4135       return error_mark_node;
4136     }
4137 
4138   switch (code)
4139     {
4140     case UNARY_PLUS_EXPR:
4141     case NEGATE_EXPR:
4142       {
4143 	int flags = WANT_ARITH | WANT_ENUM;
4144 	/* Unary plus (but not unary minus) is allowed on pointers.  */
4145 	if (code == UNARY_PLUS_EXPR)
4146 	  flags |= WANT_POINTER;
4147 	arg = build_expr_type_conversion (flags, arg, true);
4148 	if (!arg)
4149 	  errstring = (code == NEGATE_EXPR
4150 		       ? "wrong type argument to unary minus"
4151 		       : "wrong type argument to unary plus");
4152 	else
4153 	  {
4154 	    if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4155 	      arg = perform_integral_promotions (arg);
4156 
4157 	    /* Make sure the result is not an lvalue: a unary plus or minus
4158 	       expression is always a rvalue.  */
4159 	    arg = rvalue (arg);
4160 	  }
4161       }
4162       break;
4163 
4164     case BIT_NOT_EXPR:
4165       if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4166 	{
4167 	  code = CONJ_EXPR;
4168 	  if (!noconvert)
4169 	    arg = default_conversion (arg);
4170 	}
4171       else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM
4172 						   | WANT_VECTOR,
4173 						   arg, true)))
4174 	errstring = "wrong type argument to bit-complement";
4175       else if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4176 	arg = perform_integral_promotions (arg);
4177       break;
4178 
4179     case ABS_EXPR:
4180       if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
4181 	errstring = "wrong type argument to abs";
4182       else if (!noconvert)
4183 	arg = default_conversion (arg);
4184       break;
4185 
4186     case CONJ_EXPR:
4187       /* Conjugating a real value is a no-op, but allow it anyway.  */
4188       if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
4189 	errstring = "wrong type argument to conjugation";
4190       else if (!noconvert)
4191 	arg = default_conversion (arg);
4192       break;
4193 
4194     case TRUTH_NOT_EXPR:
4195       arg = perform_implicit_conversion (boolean_type_node, arg);
4196       val = invert_truthvalue (arg);
4197       if (arg != error_mark_node)
4198 	return val;
4199       errstring = "in argument to unary !";
4200       break;
4201 
4202     case NOP_EXPR:
4203       break;
4204 
4205     case REALPART_EXPR:
4206       if (TREE_CODE (arg) == COMPLEX_CST)
4207 	return TREE_REALPART (arg);
4208       else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4209 	{
4210 	  arg = build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
4211 	  return fold_if_not_in_template (arg);
4212 	}
4213       else
4214 	return arg;
4215 
4216     case IMAGPART_EXPR:
4217       if (TREE_CODE (arg) == COMPLEX_CST)
4218 	return TREE_IMAGPART (arg);
4219       else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4220 	{
4221 	  arg = build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
4222 	  return fold_if_not_in_template (arg);
4223 	}
4224       else
4225 	return cp_convert (TREE_TYPE (arg), integer_zero_node);
4226 
4227     case PREINCREMENT_EXPR:
4228     case POSTINCREMENT_EXPR:
4229     case PREDECREMENT_EXPR:
4230     case POSTDECREMENT_EXPR:
4231       /* Handle complex lvalues (when permitted)
4232 	 by reduction to simpler cases.  */
4233 
4234       val = unary_complex_lvalue (code, arg);
4235       if (val != 0)
4236 	return val;
4237 
4238       /* Increment or decrement the real part of the value,
4239 	 and don't change the imaginary part.  */
4240       if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
4241 	{
4242 	  tree real, imag;
4243 
4244 	  arg = stabilize_reference (arg);
4245 	  real = build_unary_op (REALPART_EXPR, arg, 1);
4246 	  imag = build_unary_op (IMAGPART_EXPR, arg, 1);
4247 	  return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
4248 			 build_unary_op (code, real, 1), imag);
4249 	}
4250 
4251       /* Report invalid types.  */
4252 
4253       if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_POINTER,
4254 					      arg, true)))
4255 	{
4256 	  if (code == PREINCREMENT_EXPR)
4257 	    errstring ="no pre-increment operator for type";
4258 	  else if (code == POSTINCREMENT_EXPR)
4259 	    errstring ="no post-increment operator for type";
4260 	  else if (code == PREDECREMENT_EXPR)
4261 	    errstring ="no pre-decrement operator for type";
4262 	  else
4263 	    errstring ="no post-decrement operator for type";
4264 	  break;
4265 	}
4266 
4267       /* Report something read-only.  */
4268 
4269       if (CP_TYPE_CONST_P (TREE_TYPE (arg))
4270 	  || TREE_READONLY (arg))
4271 	readonly_error (arg, ((code == PREINCREMENT_EXPR
4272 			       || code == POSTINCREMENT_EXPR)
4273 			      ? "increment" : "decrement"),
4274 			0);
4275 
4276       {
4277 	tree inc;
4278 	tree declared_type;
4279 	tree result_type = TREE_TYPE (arg);
4280 
4281 	declared_type = unlowered_expr_type (arg);
4282 
4283 	arg = get_unwidened (arg, 0);
4284 	argtype = TREE_TYPE (arg);
4285 
4286 	/* ARM $5.2.5 last annotation says this should be forbidden.  */
4287 	if (TREE_CODE (argtype) == ENUMERAL_TYPE)
4288 	  pedwarn ("ISO C++ forbids %sing an enum",
4289 		   (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
4290 		   ? "increment" : "decrement");
4291 
4292 	/* Compute the increment.  */
4293 
4294 	if (TREE_CODE (argtype) == POINTER_TYPE)
4295 	  {
4296 	    tree type = complete_type (TREE_TYPE (argtype));
4297 
4298 	    if (!COMPLETE_OR_VOID_TYPE_P (type))
4299 	      error ("cannot %s a pointer to incomplete type %qT",
4300 		     ((code == PREINCREMENT_EXPR
4301 		       || code == POSTINCREMENT_EXPR)
4302 		      ? "increment" : "decrement"), TREE_TYPE (argtype));
4303 	    else if ((pedantic || warn_pointer_arith)
4304 		     && !TYPE_PTROB_P (argtype))
4305 	      pedwarn ("ISO C++ forbids %sing a pointer of type %qT",
4306 		       ((code == PREINCREMENT_EXPR
4307 			 || code == POSTINCREMENT_EXPR)
4308 			? "increment" : "decrement"), argtype);
4309 	    inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
4310 	  }
4311 	else
4312 	  inc = integer_one_node;
4313 
4314 	inc = cp_convert (argtype, inc);
4315 
4316 	/* Handle incrementing a cast-expression.  */
4317 
4318 	switch (TREE_CODE (arg))
4319 	  {
4320 	  case NOP_EXPR:
4321 	  case CONVERT_EXPR:
4322 	  case FLOAT_EXPR:
4323 	  case FIX_TRUNC_EXPR:
4324 	  case FIX_FLOOR_EXPR:
4325 	  case FIX_ROUND_EXPR:
4326 	  case FIX_CEIL_EXPR:
4327 	    {
4328 	      tree incremented, modify, value, compound;
4329 	      if (! lvalue_p (arg) && pedantic)
4330 		pedwarn ("cast to non-reference type used as lvalue");
4331 	      arg = stabilize_reference (arg);
4332 	      if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
4333 		value = arg;
4334 	      else
4335 		value = save_expr (arg);
4336 	      incremented = build2 (((code == PREINCREMENT_EXPR
4337 				      || code == POSTINCREMENT_EXPR)
4338 				     ? PLUS_EXPR : MINUS_EXPR),
4339 				    argtype, value, inc);
4340 
4341 	      modify = build_modify_expr (arg, NOP_EXPR, incremented);
4342 	      compound = build2 (COMPOUND_EXPR, TREE_TYPE (arg),
4343 				 modify, value);
4344 
4345 	      /* Eliminate warning about unused result of + or -.  */
4346 	      TREE_NO_WARNING (compound) = 1;
4347 	      return compound;
4348 	    }
4349 
4350 	  default:
4351 	    break;
4352 	  }
4353 
4354 	/* Complain about anything else that is not a true lvalue.  */
4355 	if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
4356 				    || code == POSTINCREMENT_EXPR)
4357 				   ? lv_increment : lv_decrement)))
4358 	  return error_mark_node;
4359 
4360 	/* Forbid using -- on `bool'.  */
4361 	if (same_type_p (declared_type, boolean_type_node))
4362 	  {
4363 	    if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR)
4364 	      {
4365 		error ("invalid use of %<--%> on bool variable %qD", arg);
4366 		return error_mark_node;
4367 	      }
4368 	    val = boolean_increment (code, arg);
4369 	  }
4370 	else
4371 	  val = build2 (code, TREE_TYPE (arg), arg, inc);
4372 
4373 	TREE_SIDE_EFFECTS (val) = 1;
4374 	return cp_convert (result_type, val);
4375       }
4376 
4377     case ADDR_EXPR:
4378       /* Note that this operation never does default_conversion
4379 	 regardless of NOCONVERT.  */
4380 
4381       argtype = lvalue_type (arg);
4382 
4383       if (TREE_CODE (arg) == OFFSET_REF)
4384 	goto offset_ref;
4385 
4386       if (TREE_CODE (argtype) == REFERENCE_TYPE)
4387 	{
4388 	  tree type = build_pointer_type (TREE_TYPE (argtype));
4389 	  arg = build1 (CONVERT_EXPR, type, arg);
4390 	  return arg;
4391 	}
4392       else if (pedantic && DECL_MAIN_P (arg))
4393 	/* ARM $3.4 */
4394 	pedwarn ("ISO C++ forbids taking address of function %<::main%>");
4395 
4396       /* Let &* cancel out to simplify resulting code.  */
4397       if (TREE_CODE (arg) == INDIRECT_REF)
4398 	{
4399 	  /* We don't need to have `current_class_ptr' wrapped in a
4400 	     NON_LVALUE_EXPR node.  */
4401 	  if (arg == current_class_ref)
4402 	    return current_class_ptr;
4403 
4404 	  arg = TREE_OPERAND (arg, 0);
4405 	  if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE)
4406 	    {
4407 	      tree type = build_pointer_type (TREE_TYPE (TREE_TYPE (arg)));
4408 	      arg = build1 (CONVERT_EXPR, type, arg);
4409 	    }
4410 	  else
4411 	    /* Don't let this be an lvalue.  */
4412 	    arg = rvalue (arg);
4413 	  return arg;
4414 	}
4415 
4416       /* Uninstantiated types are all functions.  Taking the
4417 	 address of a function is a no-op, so just return the
4418 	 argument.  */
4419 
4420       gcc_assert (TREE_CODE (arg) != IDENTIFIER_NODE
4421 		  || !IDENTIFIER_OPNAME_P (arg));
4422 
4423       if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg)
4424 	  && !really_overloaded_fn (TREE_OPERAND (arg, 1)))
4425 	{
4426 	  /* They're trying to take the address of a unique non-static
4427 	     member function.  This is ill-formed (except in MS-land),
4428 	     but let's try to DTRT.
4429 	     Note: We only handle unique functions here because we don't
4430 	     want to complain if there's a static overload; non-unique
4431 	     cases will be handled by instantiate_type.  But we need to
4432 	     handle this case here to allow casts on the resulting PMF.
4433 	     We could defer this in non-MS mode, but it's easier to give
4434 	     a useful error here.  */
4435 
4436 	  /* Inside constant member functions, the `this' pointer
4437 	     contains an extra const qualifier.  TYPE_MAIN_VARIANT
4438 	     is used here to remove this const from the diagnostics
4439 	     and the created OFFSET_REF.  */
4440 	  tree base = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg, 0)));
4441 	  tree fn = get_first_fn (TREE_OPERAND (arg, 1));
4442 	  mark_used (fn);
4443 
4444 	  if (! flag_ms_extensions)
4445 	    {
4446 	      tree name = DECL_NAME (fn);
4447 	      if (current_class_type
4448 		  && TREE_OPERAND (arg, 0) == current_class_ref)
4449 		/* An expression like &memfn.  */
4450 		pedwarn ("ISO C++ forbids taking the address of an unqualified"
4451 			 " or parenthesized non-static member function to form"
4452 			 " a pointer to member function.  Say %<&%T::%D%>",
4453 			 base, name);
4454 	      else
4455 		pedwarn ("ISO C++ forbids taking the address of a bound member"
4456 			 " function to form a pointer to member function."
4457 			 "  Say %<&%T::%D%>",
4458 			 base, name);
4459 	    }
4460 	  arg = build_offset_ref (base, fn, /*address_p=*/true);
4461 	}
4462 
4463     offset_ref:
4464       if (type_unknown_p (arg))
4465 	return build1 (ADDR_EXPR, unknown_type_node, arg);
4466 
4467       /* Handle complex lvalues (when permitted)
4468 	 by reduction to simpler cases.  */
4469       val = unary_complex_lvalue (code, arg);
4470       if (val != 0)
4471 	return val;
4472 
4473       switch (TREE_CODE (arg))
4474 	{
4475 	case NOP_EXPR:
4476 	case CONVERT_EXPR:
4477 	case FLOAT_EXPR:
4478 	case FIX_TRUNC_EXPR:
4479 	case FIX_FLOOR_EXPR:
4480 	case FIX_ROUND_EXPR:
4481 	case FIX_CEIL_EXPR:
4482 	  if (! lvalue_p (arg) && pedantic)
4483 	    pedwarn ("ISO C++ forbids taking the address of a cast to a non-lvalue expression");
4484 	  break;
4485 
4486 	case BASELINK:
4487 	  arg = BASELINK_FUNCTIONS (arg);
4488 	  /* Fall through.  */
4489 
4490 	case OVERLOAD:
4491 	  arg = OVL_CURRENT (arg);
4492 	  break;
4493 
4494 	case OFFSET_REF:
4495 	  /* Turn a reference to a non-static data member into a
4496 	     pointer-to-member.  */
4497 	  {
4498 	    tree type;
4499 	    tree t;
4500 
4501 	    if (!PTRMEM_OK_P (arg))
4502 	      return build_unary_op (code, arg, 0);
4503 
4504 	    t = TREE_OPERAND (arg, 1);
4505 	    if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
4506 	      {
4507 		error ("cannot create pointer to reference member %qD", t);
4508 		return error_mark_node;
4509 	      }
4510 
4511 	    type = build_ptrmem_type (context_for_name_lookup (t),
4512 				      TREE_TYPE (t));
4513 	    t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1));
4514 	    return t;
4515 	  }
4516 
4517 	default:
4518 	  break;
4519 	}
4520 
4521       /* Anything not already handled and not a true memory reference
4522 	 is an error.  */
4523       if (TREE_CODE (argtype) != FUNCTION_TYPE
4524 	  && TREE_CODE (argtype) != METHOD_TYPE
4525 	  && TREE_CODE (arg) != OFFSET_REF
4526 	  && !lvalue_or_else (arg, lv_addressof))
4527 	return error_mark_node;
4528 
4529       if (argtype != error_mark_node)
4530 	argtype = build_pointer_type (argtype);
4531 
4532       /* In a template, we are processing a non-dependent expression
4533 	 so we can just form an ADDR_EXPR with the correct type.  */
4534       if (processing_template_decl)
4535 	{
4536 	  val = build_address (arg);
4537 	  if (TREE_CODE (arg) == OFFSET_REF)
4538 	    PTRMEM_OK_P (val) = PTRMEM_OK_P (arg);
4539 	  return val;
4540 	}
4541 
4542       if (TREE_CODE (arg) != COMPONENT_REF)
4543 	{
4544 	  val = build_address (arg);
4545 	  if (TREE_CODE (arg) == OFFSET_REF)
4546 	    PTRMEM_OK_P (val) = PTRMEM_OK_P (arg);
4547 	}
4548       else if (TREE_CODE (TREE_OPERAND (arg, 1)) == BASELINK)
4549 	{
4550 	  tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (arg, 1));
4551 
4552 	  /* We can only get here with a single static member
4553 	     function.  */
4554 	  gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
4555 		      && DECL_STATIC_FUNCTION_P (fn));
4556 	  mark_used (fn);
4557 	  val = build_address (fn);
4558 	  if (TREE_SIDE_EFFECTS (TREE_OPERAND (arg, 0)))
4559 	    /* Do not lose object's side effects.  */
4560 	    val = build2 (COMPOUND_EXPR, TREE_TYPE (val),
4561 			  TREE_OPERAND (arg, 0), val);
4562 	}
4563       else if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
4564 	{
4565 	  error ("attempt to take address of bit-field structure member %qD",
4566 		 TREE_OPERAND (arg, 1));
4567 	  return error_mark_node;
4568 	}
4569       else
4570 	{
4571 	  tree object = TREE_OPERAND (arg, 0);
4572 	  tree field = TREE_OPERAND (arg, 1);
4573 	  gcc_assert (same_type_ignoring_top_level_qualifiers_p
4574 		      (TREE_TYPE (object), decl_type_context (field)));
4575 	  val = build_address (arg);
4576 	}
4577 
4578       if (TREE_CODE (argtype) == POINTER_TYPE
4579 	  && TREE_CODE (TREE_TYPE (argtype)) == METHOD_TYPE)
4580 	{
4581 	  build_ptrmemfunc_type (argtype);
4582 	  val = build_ptrmemfunc (argtype, val, 0,
4583 				  /*c_cast_p=*/false);
4584 	}
4585 
4586       return val;
4587 
4588     default:
4589       break;
4590     }
4591 
4592   if (!errstring)
4593     {
4594       if (argtype == 0)
4595 	argtype = TREE_TYPE (arg);
4596       return fold_if_not_in_template (build1 (code, argtype, arg));
4597     }
4598 
4599   error ("%s", errstring);
4600   return error_mark_node;
4601 }
4602 
4603 /* Apply unary lvalue-demanding operator CODE to the expression ARG
4604    for certain kinds of expressions which are not really lvalues
4605    but which we can accept as lvalues.
4606 
4607    If ARG is not a kind of expression we can handle, return
4608    NULL_TREE.  */
4609 
4610 tree
unary_complex_lvalue(enum tree_code code,tree arg)4611 unary_complex_lvalue (enum tree_code code, tree arg)
4612 {
4613   /* Inside a template, making these kinds of adjustments is
4614      pointless; we are only concerned with the type of the
4615      expression.  */
4616   if (processing_template_decl)
4617     return NULL_TREE;
4618 
4619   /* Handle (a, b) used as an "lvalue".  */
4620   if (TREE_CODE (arg) == COMPOUND_EXPR)
4621     {
4622       tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
4623       return build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
4624 		     TREE_OPERAND (arg, 0), real_result);
4625     }
4626 
4627   /* Handle (a ? b : c) used as an "lvalue".  */
4628   if (TREE_CODE (arg) == COND_EXPR
4629       || TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR)
4630     return rationalize_conditional_expr (code, arg);
4631 
4632   /* Handle (a = b), (++a), and (--a) used as an "lvalue".  */
4633   if (TREE_CODE (arg) == MODIFY_EXPR
4634       || TREE_CODE (arg) == PREINCREMENT_EXPR
4635       || TREE_CODE (arg) == PREDECREMENT_EXPR)
4636     {
4637       tree lvalue = TREE_OPERAND (arg, 0);
4638       if (TREE_SIDE_EFFECTS (lvalue))
4639 	{
4640 	  lvalue = stabilize_reference (lvalue);
4641 	  arg = build2 (TREE_CODE (arg), TREE_TYPE (arg),
4642 			lvalue, TREE_OPERAND (arg, 1));
4643 	}
4644       return unary_complex_lvalue
4645 	(code, build2 (COMPOUND_EXPR, TREE_TYPE (lvalue), arg, lvalue));
4646     }
4647 
4648   if (code != ADDR_EXPR)
4649     return NULL_TREE;
4650 
4651   /* Handle (a = b) used as an "lvalue" for `&'.  */
4652   if (TREE_CODE (arg) == MODIFY_EXPR
4653       || TREE_CODE (arg) == INIT_EXPR)
4654     {
4655       tree real_result = build_unary_op (code, TREE_OPERAND (arg, 0), 0);
4656       arg = build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
4657 		    arg, real_result);
4658       TREE_NO_WARNING (arg) = 1;
4659       return arg;
4660     }
4661 
4662   if (TREE_CODE (TREE_TYPE (arg)) == FUNCTION_TYPE
4663       || TREE_CODE (TREE_TYPE (arg)) == METHOD_TYPE
4664       || TREE_CODE (arg) == OFFSET_REF)
4665     return NULL_TREE;
4666 
4667   /* We permit compiler to make function calls returning
4668      objects of aggregate type look like lvalues.  */
4669   {
4670     tree targ = arg;
4671 
4672     if (TREE_CODE (targ) == SAVE_EXPR)
4673       targ = TREE_OPERAND (targ, 0);
4674 
4675     if (TREE_CODE (targ) == CALL_EXPR && IS_AGGR_TYPE (TREE_TYPE (targ)))
4676       {
4677 	if (TREE_CODE (arg) == SAVE_EXPR)
4678 	  targ = arg;
4679 	else
4680 	  targ = build_cplus_new (TREE_TYPE (arg), arg);
4681 	return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), targ);
4682       }
4683 
4684     if (TREE_CODE (arg) == SAVE_EXPR && TREE_CODE (targ) == INDIRECT_REF)
4685       return build3 (SAVE_EXPR, build_pointer_type (TREE_TYPE (arg)),
4686 		     TREE_OPERAND (targ, 0), current_function_decl, NULL);
4687   }
4688 
4689   /* Don't let anything else be handled specially.  */
4690   return NULL_TREE;
4691 }
4692 
4693 /* Mark EXP saying that we need to be able to take the
4694    address of it; it should not be allocated in a register.
4695    Value is true if successful.
4696 
4697    C++: we do not allow `current_class_ptr' to be addressable.  */
4698 
4699 bool
cxx_mark_addressable(tree exp)4700 cxx_mark_addressable (tree exp)
4701 {
4702   tree x = exp;
4703 
4704   while (1)
4705     switch (TREE_CODE (x))
4706       {
4707       case ADDR_EXPR:
4708       case COMPONENT_REF:
4709       case ARRAY_REF:
4710       case REALPART_EXPR:
4711       case IMAGPART_EXPR:
4712 	x = TREE_OPERAND (x, 0);
4713 	break;
4714 
4715       case PARM_DECL:
4716 	if (x == current_class_ptr)
4717 	  {
4718 	    error ("cannot take the address of %<this%>, which is an rvalue expression");
4719 	    TREE_ADDRESSABLE (x) = 1; /* so compiler doesn't die later.  */
4720 	    return true;
4721 	  }
4722 	/* Fall through.  */
4723 
4724       case VAR_DECL:
4725 	/* Caller should not be trying to mark initialized
4726 	   constant fields addressable.  */
4727 	gcc_assert (DECL_LANG_SPECIFIC (x) == 0
4728 		    || DECL_IN_AGGR_P (x) == 0
4729 		    || TREE_STATIC (x)
4730 		    || DECL_EXTERNAL (x));
4731 	/* Fall through.  */
4732 
4733       case CONST_DECL:
4734       case RESULT_DECL:
4735 	if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
4736 	    && !DECL_ARTIFICIAL (x))
4737 	  {
4738 	    if (TREE_CODE (x) == VAR_DECL && DECL_HARD_REGISTER (x))
4739 	      {
4740 		error
4741 		  ("address of explicit register variable %qD requested", x);
4742 		return false;
4743 	      }
4744 	    else if (extra_warnings)
4745 	      warning
4746 		(OPT_Wextra, "address requested for %qD, which is declared %<register%>", x);
4747 	  }
4748 	TREE_ADDRESSABLE (x) = 1;
4749 	return true;
4750 
4751       case FUNCTION_DECL:
4752 	TREE_ADDRESSABLE (x) = 1;
4753 	return true;
4754 
4755       case CONSTRUCTOR:
4756 	TREE_ADDRESSABLE (x) = 1;
4757 	return true;
4758 
4759       case TARGET_EXPR:
4760 	TREE_ADDRESSABLE (x) = 1;
4761 	cxx_mark_addressable (TREE_OPERAND (x, 0));
4762 	return true;
4763 
4764       default:
4765 	return true;
4766     }
4767 }
4768 
4769 /* Build and return a conditional expression IFEXP ? OP1 : OP2.  */
4770 
4771 tree
build_x_conditional_expr(tree ifexp,tree op1,tree op2)4772 build_x_conditional_expr (tree ifexp, tree op1, tree op2)
4773 {
4774   tree orig_ifexp = ifexp;
4775   tree orig_op1 = op1;
4776   tree orig_op2 = op2;
4777   tree expr;
4778 
4779   if (processing_template_decl)
4780     {
4781       /* The standard says that the expression is type-dependent if
4782 	 IFEXP is type-dependent, even though the eventual type of the
4783 	 expression doesn't dependent on IFEXP.  */
4784       if (type_dependent_expression_p (ifexp)
4785 	  /* As a GNU extension, the middle operand may be omitted.  */
4786 	  || (op1 && type_dependent_expression_p (op1))
4787 	  || type_dependent_expression_p (op2))
4788 	return build_min_nt (COND_EXPR, ifexp, op1, op2);
4789       ifexp = build_non_dependent_expr (ifexp);
4790       if (op1)
4791 	op1 = build_non_dependent_expr (op1);
4792       op2 = build_non_dependent_expr (op2);
4793     }
4794 
4795   expr = build_conditional_expr (ifexp, op1, op2);
4796   if (processing_template_decl && expr != error_mark_node)
4797     return build_min_non_dep (COND_EXPR, expr,
4798 			      orig_ifexp, orig_op1, orig_op2);
4799   return expr;
4800 }
4801 
4802 /* Given a list of expressions, return a compound expression
4803    that performs them all and returns the value of the last of them.  */
4804 
build_x_compound_expr_from_list(tree list,const char * msg)4805 tree build_x_compound_expr_from_list (tree list, const char *msg)
4806 {
4807   tree expr = TREE_VALUE (list);
4808 
4809   if (TREE_CHAIN (list))
4810     {
4811       if (msg)
4812 	pedwarn ("%s expression list treated as compound expression", msg);
4813 
4814       for (list = TREE_CHAIN (list); list; list = TREE_CHAIN (list))
4815 	expr = build_x_compound_expr (expr, TREE_VALUE (list));
4816     }
4817 
4818   return expr;
4819 }
4820 
4821 /* Handle overloading of the ',' operator when needed.  */
4822 
4823 tree
build_x_compound_expr(tree op1,tree op2)4824 build_x_compound_expr (tree op1, tree op2)
4825 {
4826   tree result;
4827   tree orig_op1 = op1;
4828   tree orig_op2 = op2;
4829 
4830   if (processing_template_decl)
4831     {
4832       if (type_dependent_expression_p (op1)
4833 	  || type_dependent_expression_p (op2))
4834 	return build_min_nt (COMPOUND_EXPR, op1, op2);
4835       op1 = build_non_dependent_expr (op1);
4836       op2 = build_non_dependent_expr (op2);
4837     }
4838 
4839   result = build_new_op (COMPOUND_EXPR, LOOKUP_NORMAL, op1, op2, NULL_TREE,
4840 			 /*overloaded_p=*/NULL);
4841   if (!result)
4842     result = build_compound_expr (op1, op2);
4843 
4844   if (processing_template_decl && result != error_mark_node)
4845     return build_min_non_dep (COMPOUND_EXPR, result, orig_op1, orig_op2);
4846 
4847   return result;
4848 }
4849 
4850 /* Build a compound expression.  */
4851 
4852 tree
build_compound_expr(tree lhs,tree rhs)4853 build_compound_expr (tree lhs, tree rhs)
4854 {
4855   lhs = convert_to_void (lhs, "left-hand operand of comma");
4856 
4857   if (lhs == error_mark_node || rhs == error_mark_node)
4858     return error_mark_node;
4859 
4860   if (TREE_CODE (rhs) == TARGET_EXPR)
4861     {
4862       /* If the rhs is a TARGET_EXPR, then build the compound
4863 	 expression inside the target_expr's initializer. This
4864 	 helps the compiler to eliminate unnecessary temporaries.  */
4865       tree init = TREE_OPERAND (rhs, 1);
4866 
4867       init = build2 (COMPOUND_EXPR, TREE_TYPE (init), lhs, init);
4868       TREE_OPERAND (rhs, 1) = init;
4869 
4870       return rhs;
4871     }
4872 
4873   return build2 (COMPOUND_EXPR, TREE_TYPE (rhs), lhs, rhs);
4874 }
4875 
4876 /* Issue a diagnostic message if casting from SRC_TYPE to DEST_TYPE
4877    casts away constness.  DIAG_FN gives the function to call if we
4878    need to issue a diagnostic; if it is NULL, no diagnostic will be
4879    issued.  DESCRIPTION explains what operation is taking place.  */
4880 
4881 static void
4882 check_for_casting_away_constness (tree src_type, tree dest_type,
4883 				  void (*diag_fn)(const char *, ...) ATTRIBUTE_GCC_CXXDIAG(1,2),
4884 				  const char *description)
4885 {
4886   if (diag_fn && casts_away_constness (src_type, dest_type))
4887     diag_fn ("%s from type %qT to type %qT casts away constness",
4888 	     description, src_type, dest_type);
4889 }
4890 
4891 /* Convert EXPR (an expression with pointer-to-member type) to TYPE
4892    (another pointer-to-member type in the same hierarchy) and return
4893    the converted expression.  If ALLOW_INVERSE_P is permitted, a
4894    pointer-to-derived may be converted to pointer-to-base; otherwise,
4895    only the other direction is permitted.  If C_CAST_P is true, this
4896    conversion is taking place as part of a C-style cast.  */
4897 
4898 tree
convert_ptrmem(tree type,tree expr,bool allow_inverse_p,bool c_cast_p)4899 convert_ptrmem (tree type, tree expr, bool allow_inverse_p,
4900 		bool c_cast_p)
4901 {
4902   if (TYPE_PTRMEM_P (type))
4903     {
4904       tree delta;
4905 
4906       if (TREE_CODE (expr) == PTRMEM_CST)
4907 	expr = cplus_expand_constant (expr);
4908       delta = get_delta_difference (TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (expr)),
4909 				    TYPE_PTRMEM_CLASS_TYPE (type),
4910 				    allow_inverse_p,
4911 				    c_cast_p);
4912       if (!integer_zerop (delta))
4913 	expr = cp_build_binary_op (PLUS_EXPR,
4914 				   build_nop (ptrdiff_type_node, expr),
4915 				   delta);
4916       return build_nop (type, expr);
4917     }
4918   else
4919     return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr,
4920 			     allow_inverse_p, c_cast_p);
4921 }
4922 
4923 /* If EXPR is an INTEGER_CST and ORIG is an arithmetic constant, return
4924    a version of EXPR that has TREE_OVERFLOW and/or TREE_CONSTANT_OVERFLOW
4925    set iff they are set in ORIG.  Otherwise, return EXPR unchanged.  */
4926 
4927 static tree
ignore_overflows(tree expr,tree orig)4928 ignore_overflows (tree expr, tree orig)
4929 {
4930   if (TREE_CODE (expr) == INTEGER_CST
4931       && CONSTANT_CLASS_P (orig)
4932       && TREE_CODE (orig) != STRING_CST
4933       && (TREE_OVERFLOW (expr) != TREE_OVERFLOW (orig)
4934 	  || TREE_CONSTANT_OVERFLOW (expr)
4935 	     != TREE_CONSTANT_OVERFLOW (orig)))
4936     {
4937       if (!TREE_OVERFLOW (orig) && !TREE_CONSTANT_OVERFLOW (orig))
4938 	/* Ensure constant sharing.  */
4939 	expr = build_int_cst_wide (TREE_TYPE (expr),
4940 				   TREE_INT_CST_LOW (expr),
4941 				   TREE_INT_CST_HIGH (expr));
4942       else
4943 	{
4944 	  /* Avoid clobbering a shared constant.  */
4945 	  expr = copy_node (expr);
4946 	  TREE_OVERFLOW (expr) = TREE_OVERFLOW (orig);
4947 	  TREE_CONSTANT_OVERFLOW (expr)
4948 	    = TREE_CONSTANT_OVERFLOW (orig);
4949 	}
4950     }
4951   return expr;
4952 }
4953 
4954 /* Perform a static_cast from EXPR to TYPE.  When C_CAST_P is true,
4955    this static_cast is being attempted as one of the possible casts
4956    allowed by a C-style cast.  (In that case, accessibility of base
4957    classes is not considered, and it is OK to cast away
4958    constness.)  Return the result of the cast.  *VALID_P is set to
4959    indicate whether or not the cast was valid.  */
4960 
4961 static tree
build_static_cast_1(tree type,tree expr,bool c_cast_p,bool * valid_p)4962 build_static_cast_1 (tree type, tree expr, bool c_cast_p,
4963 		     bool *valid_p)
4964 {
4965   tree intype;
4966   tree result;
4967   tree orig;
4968   void (*diag_fn)(const char*, ...) ATTRIBUTE_GCC_CXXDIAG(1,2);
4969   const char *desc;
4970 
4971   /* Assume the cast is valid.  */
4972   *valid_p = true;
4973 
4974   intype = TREE_TYPE (expr);
4975 
4976   /* Save casted types in the function's used types hash table.  */
4977   used_types_insert (type);
4978 
4979   /* Determine what to do when casting away constness.  */
4980   if (c_cast_p)
4981     {
4982       /* C-style casts are allowed to cast away constness.  With
4983 	 WARN_CAST_QUAL, we still want to issue a warning.  */
4984       diag_fn = warn_cast_qual ? warning0 : NULL;
4985       desc = "cast";
4986     }
4987   else
4988     {
4989       /* A static_cast may not cast away constness.  */
4990       diag_fn = error;
4991       desc = "static_cast";
4992     }
4993 
4994   /* [expr.static.cast]
4995 
4996      An lvalue of type "cv1 B", where B is a class type, can be cast
4997      to type "reference to cv2 D", where D is a class derived (clause
4998      _class.derived_) from B, if a valid standard conversion from
4999      "pointer to D" to "pointer to B" exists (_conv.ptr_), cv2 is the
5000      same cv-qualification as, or greater cv-qualification than, cv1,
5001      and B is not a virtual base class of D.  */
5002   /* We check this case before checking the validity of "TYPE t =
5003      EXPR;" below because for this case:
5004 
5005        struct B {};
5006        struct D : public B { D(const B&); };
5007        extern B& b;
5008        void f() { static_cast<const D&>(b); }
5009 
5010      we want to avoid constructing a new D.  The standard is not
5011      completely clear about this issue, but our interpretation is
5012      consistent with other compilers.  */
5013   if (TREE_CODE (type) == REFERENCE_TYPE
5014       && CLASS_TYPE_P (TREE_TYPE (type))
5015       && CLASS_TYPE_P (intype)
5016       && real_lvalue_p (expr)
5017       && DERIVED_FROM_P (intype, TREE_TYPE (type))
5018       && can_convert (build_pointer_type (TYPE_MAIN_VARIANT (intype)),
5019 		      build_pointer_type (TYPE_MAIN_VARIANT
5020 					  (TREE_TYPE (type))))
5021       && (c_cast_p
5022 	  || at_least_as_qualified_p (TREE_TYPE (type), intype)))
5023     {
5024       tree base;
5025 
5026       /* There is a standard conversion from "D*" to "B*" even if "B"
5027 	 is ambiguous or inaccessible.  If this is really a
5028 	 static_cast, then we check both for inaccessibility and
5029 	 ambiguity.  However, if this is a static_cast being performed
5030 	 because the user wrote a C-style cast, then accessibility is
5031 	 not considered.  */
5032       base = lookup_base (TREE_TYPE (type), intype,
5033 			  c_cast_p ? ba_unique : ba_check,
5034 			  NULL);
5035 
5036       /* Convert from "B*" to "D*".  This function will check that "B"
5037 	 is not a virtual base of "D".  */
5038       expr = build_base_path (MINUS_EXPR, build_address (expr),
5039 			      base, /*nonnull=*/false);
5040       /* Convert the pointer to a reference -- but then remember that
5041 	 there are no expressions with reference type in C++.  */
5042       return convert_from_reference (build_nop (type, expr));
5043     }
5044 
5045   orig = expr;
5046 
5047   /* [expr.static.cast]
5048 
5049      An expression e can be explicitly converted to a type T using a
5050      static_cast of the form static_cast<T>(e) if the declaration T
5051      t(e);" is well-formed, for some invented temporary variable
5052      t.  */
5053   result = perform_direct_initialization_if_possible (type, expr,
5054 						      c_cast_p);
5055   if (result)
5056     {
5057       result = convert_from_reference (result);
5058 
5059       /* Ignore any integer overflow caused by the cast.  */
5060       result = ignore_overflows (result, orig);
5061 
5062       /* [expr.static.cast]
5063 
5064 	 If T is a reference type, the result is an lvalue; otherwise,
5065 	 the result is an rvalue.  */
5066       if (TREE_CODE (type) != REFERENCE_TYPE)
5067 	result = rvalue (result);
5068       return result;
5069     }
5070 
5071   /* [expr.static.cast]
5072 
5073      Any expression can be explicitly converted to type cv void.  */
5074   if (TREE_CODE (type) == VOID_TYPE)
5075     return convert_to_void (expr, /*implicit=*/NULL);
5076 
5077   /* [expr.static.cast]
5078 
5079      The inverse of any standard conversion sequence (clause _conv_),
5080      other than the lvalue-to-rvalue (_conv.lval_), array-to-pointer
5081      (_conv.array_), function-to-pointer (_conv.func_), and boolean
5082      (_conv.bool_) conversions, can be performed explicitly using
5083      static_cast subject to the restriction that the explicit
5084      conversion does not cast away constness (_expr.const.cast_), and
5085      the following additional rules for specific cases:  */
5086   /* For reference, the conversions not excluded are: integral
5087      promotions, floating point promotion, integral conversions,
5088      floating point conversions, floating-integral conversions,
5089      pointer conversions, and pointer to member conversions.  */
5090   /* DR 128
5091 
5092      A value of integral _or enumeration_ type can be explicitly
5093      converted to an enumeration type.  */
5094   /* The effect of all that is that any conversion between any two
5095      types which are integral, floating, or enumeration types can be
5096      performed.  */
5097   if ((INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type))
5098       && (INTEGRAL_TYPE_P (intype) || SCALAR_FLOAT_TYPE_P (intype)))
5099     {
5100       expr = ocp_convert (type, expr, CONV_C_CAST, LOOKUP_NORMAL);
5101 
5102       /* Ignore any integer overflow caused by the cast.  */
5103       expr = ignore_overflows (expr, orig);
5104       return expr;
5105     }
5106 
5107   if (TYPE_PTR_P (type) && TYPE_PTR_P (intype)
5108       && CLASS_TYPE_P (TREE_TYPE (type))
5109       && CLASS_TYPE_P (TREE_TYPE (intype))
5110       && can_convert (build_pointer_type (TYPE_MAIN_VARIANT
5111 					  (TREE_TYPE (intype))),
5112 		      build_pointer_type (TYPE_MAIN_VARIANT
5113 					  (TREE_TYPE (type)))))
5114     {
5115       tree base;
5116 
5117       if (!c_cast_p)
5118 	check_for_casting_away_constness (intype, type, diag_fn, desc);
5119       base = lookup_base (TREE_TYPE (type), TREE_TYPE (intype),
5120 			  c_cast_p ? ba_unique : ba_check,
5121 			  NULL);
5122       return build_base_path (MINUS_EXPR, expr, base, /*nonnull=*/false);
5123     }
5124 
5125   if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
5126       || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
5127     {
5128       tree c1;
5129       tree c2;
5130       tree t1;
5131       tree t2;
5132 
5133       c1 = TYPE_PTRMEM_CLASS_TYPE (intype);
5134       c2 = TYPE_PTRMEM_CLASS_TYPE (type);
5135 
5136       if (TYPE_PTRMEM_P (type))
5137 	{
5138 	  t1 = (build_ptrmem_type
5139 		(c1,
5140 		 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (intype))));
5141 	  t2 = (build_ptrmem_type
5142 		(c2,
5143 		 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
5144 	}
5145       else
5146 	{
5147 	  t1 = intype;
5148 	  t2 = type;
5149 	}
5150       if (can_convert (t1, t2))
5151 	{
5152 	  if (!c_cast_p)
5153 	    check_for_casting_away_constness (intype, type, diag_fn,
5154 					      desc);
5155 	  return convert_ptrmem (type, expr, /*allow_inverse_p=*/1,
5156 				 c_cast_p);
5157 	}
5158     }
5159 
5160   /* [expr.static.cast]
5161 
5162      An rvalue of type "pointer to cv void" can be explicitly
5163      converted to a pointer to object type.  A value of type pointer
5164      to object converted to "pointer to cv void" and back to the
5165      original pointer type will have its original value.  */
5166   if (TREE_CODE (intype) == POINTER_TYPE
5167       && VOID_TYPE_P (TREE_TYPE (intype))
5168       && TYPE_PTROB_P (type))
5169     {
5170       if (!c_cast_p)
5171 	check_for_casting_away_constness (intype, type, diag_fn, desc);
5172       return build_nop (type, expr);
5173     }
5174 
5175   *valid_p = false;
5176   return error_mark_node;
5177 }
5178 
5179 /* Return an expression representing static_cast<TYPE>(EXPR).  */
5180 
5181 tree
build_static_cast(tree type,tree expr)5182 build_static_cast (tree type, tree expr)
5183 {
5184   tree result;
5185   bool valid_p;
5186 
5187   if (type == error_mark_node || expr == error_mark_node)
5188     return error_mark_node;
5189 
5190   if (processing_template_decl)
5191     {
5192       expr = build_min (STATIC_CAST_EXPR, type, expr);
5193       /* We don't know if it will or will not have side effects.  */
5194       TREE_SIDE_EFFECTS (expr) = 1;
5195       return convert_from_reference (expr);
5196     }
5197 
5198   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5199      Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
5200   if (TREE_CODE (type) != REFERENCE_TYPE
5201       && TREE_CODE (expr) == NOP_EXPR
5202       && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5203     expr = TREE_OPERAND (expr, 0);
5204 
5205   result = build_static_cast_1 (type, expr, /*c_cast_p=*/false, &valid_p);
5206   if (valid_p)
5207     return result;
5208 
5209   error ("invalid static_cast from type %qT to type %qT",
5210 	 TREE_TYPE (expr), type);
5211   return error_mark_node;
5212 }
5213 
5214 /* EXPR is an expression with member function or pointer-to-member
5215    function type.  TYPE is a pointer type.  Converting EXPR to TYPE is
5216    not permitted by ISO C++, but we accept it in some modes.  If we
5217    are not in one of those modes, issue a diagnostic.  Return the
5218    converted expression.  */
5219 
5220 tree
convert_member_func_to_ptr(tree type,tree expr)5221 convert_member_func_to_ptr (tree type, tree expr)
5222 {
5223   tree intype;
5224   tree decl;
5225 
5226   intype = TREE_TYPE (expr);
5227   gcc_assert (TYPE_PTRMEMFUNC_P (intype)
5228 	      || TREE_CODE (intype) == METHOD_TYPE);
5229 
5230   if (pedantic || warn_pmf2ptr)
5231     pedwarn ("converting from %qT to %qT", intype, type);
5232 
5233   if (TREE_CODE (intype) == METHOD_TYPE)
5234     expr = build_addr_func (expr);
5235   else if (TREE_CODE (expr) == PTRMEM_CST)
5236     expr = build_address (PTRMEM_CST_MEMBER (expr));
5237   else
5238     {
5239       decl = maybe_dummy_object (TYPE_PTRMEM_CLASS_TYPE (intype), 0);
5240       decl = build_address (decl);
5241       expr = get_member_function_from_ptrfunc (&decl, expr);
5242     }
5243 
5244   return build_nop (type, expr);
5245 }
5246 
5247 /* Return a representation for a reinterpret_cast from EXPR to TYPE.
5248    If C_CAST_P is true, this reinterpret cast is being done as part of
5249    a C-style cast.  If VALID_P is non-NULL, *VALID_P is set to
5250    indicate whether or not reinterpret_cast was valid.  */
5251 
5252 static tree
build_reinterpret_cast_1(tree type,tree expr,bool c_cast_p,bool * valid_p)5253 build_reinterpret_cast_1 (tree type, tree expr, bool c_cast_p,
5254 			  bool *valid_p)
5255 {
5256   tree intype;
5257 
5258   /* Assume the cast is invalid.  */
5259   if (valid_p)
5260     *valid_p = true;
5261 
5262   if (type == error_mark_node || error_operand_p (expr))
5263     return error_mark_node;
5264 
5265   intype = TREE_TYPE (expr);
5266 
5267   /* Save casted types in the function's used types hash table.  */
5268   used_types_insert (type);
5269 
5270   /* [expr.reinterpret.cast]
5271      An lvalue expression of type T1 can be cast to the type
5272      "reference to T2" if an expression of type "pointer to T1" can be
5273      explicitly converted to the type "pointer to T2" using a
5274      reinterpret_cast.  */
5275   if (TREE_CODE (type) == REFERENCE_TYPE)
5276     {
5277       if (! real_lvalue_p (expr))
5278 	{
5279 	  error ("invalid cast of an rvalue expression of type "
5280 		 "%qT to type %qT",
5281 		 intype, type);
5282 	  return error_mark_node;
5283 	}
5284 
5285       /* Warn about a reinterpret_cast from "A*" to "B&" if "A" and
5286 	 "B" are related class types; the reinterpret_cast does not
5287 	 adjust the pointer.  */
5288       if (TYPE_PTR_P (intype)
5289 	  && (comptypes (TREE_TYPE (intype), TREE_TYPE (type),
5290 			 COMPARE_BASE | COMPARE_DERIVED)))
5291 	warning (0, "casting %qT to %qT does not dereference pointer",
5292 		 intype, type);
5293 
5294       expr = build_unary_op (ADDR_EXPR, expr, 0);
5295       if (expr != error_mark_node)
5296 	expr = build_reinterpret_cast_1
5297 	  (build_pointer_type (TREE_TYPE (type)), expr, c_cast_p,
5298 	   valid_p);
5299       if (expr != error_mark_node)
5300 	expr = build_indirect_ref (expr, 0);
5301       return expr;
5302     }
5303 
5304   /* As a G++ extension, we consider conversions from member
5305      functions, and pointers to member functions to
5306      pointer-to-function and pointer-to-void types.  If
5307      -Wno-pmf-conversions has not been specified,
5308      convert_member_func_to_ptr will issue an error message.  */
5309   if ((TYPE_PTRMEMFUNC_P (intype)
5310        || TREE_CODE (intype) == METHOD_TYPE)
5311       && TYPE_PTR_P (type)
5312       && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
5313 	  || VOID_TYPE_P (TREE_TYPE (type))))
5314     return convert_member_func_to_ptr (type, expr);
5315 
5316   /* If the cast is not to a reference type, the lvalue-to-rvalue,
5317      array-to-pointer, and function-to-pointer conversions are
5318      performed.  */
5319   expr = decay_conversion (expr);
5320 
5321   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5322      Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
5323   if (TREE_CODE (expr) == NOP_EXPR
5324       && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5325     expr = TREE_OPERAND (expr, 0);
5326 
5327   if (error_operand_p (expr))
5328     return error_mark_node;
5329 
5330   intype = TREE_TYPE (expr);
5331 
5332   /* [expr.reinterpret.cast]
5333      A pointer can be converted to any integral type large enough to
5334      hold it.  */
5335   if (CP_INTEGRAL_TYPE_P (type) && TYPE_PTR_P (intype))
5336     {
5337       if (TYPE_PRECISION (type) < TYPE_PRECISION (intype))
5338 	pedwarn ("cast from %qT to %qT loses precision",
5339 		 intype, type);
5340     }
5341   /* [expr.reinterpret.cast]
5342      A value of integral or enumeration type can be explicitly
5343      converted to a pointer.  */
5344   else if (TYPE_PTR_P (type) && INTEGRAL_OR_ENUMERATION_TYPE_P (intype))
5345     /* OK */
5346     ;
5347   /* APPLE LOCAL begin blocks 6040305 (ck) */
5348   else if (TREE_CODE (type) == INTEGER_TYPE && TREE_CODE (intype) == BLOCK_POINTER_TYPE)
5349     {
5350       if (TYPE_PRECISION (type) < TYPE_PRECISION (intype))
5351 	pedwarn ("cast from %qT to %qT loses precision",
5352 		 intype, type);
5353     }
5354   else if (TREE_CODE (type) == BLOCK_POINTER_TYPE && TREE_CODE (intype) == INTEGER_TYPE)
5355     /* OK */
5356     ;
5357   else if (TREE_CODE (type) == BLOCK_POINTER_TYPE && TREE_CODE (intype) == BLOCK_POINTER_TYPE)
5358     /* OK */
5359     ;
5360   else if (TREE_CODE (intype) == BLOCK_POINTER_TYPE
5361 	   && (objc_is_id (type)
5362 	       || (TREE_CODE (type) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (type)))))
5363     /* OK */
5364     ;
5365   else if (TREE_CODE (type) == BLOCK_POINTER_TYPE
5366 	   && TREE_CODE (intype) == POINTER_TYPE
5367 	   && (objc_is_id (intype) || VOID_TYPE_P (TREE_TYPE (intype))))
5368     /* OK */
5369     ;
5370   /* APPLE LOCAL end blocks 6040305 (ck) */
5371   else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype))
5372 	   || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
5373     return fold_if_not_in_template (build_nop (type, expr));
5374   else if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
5375 	   || (TYPE_PTROBV_P (type) && TYPE_PTROBV_P (intype)))
5376     {
5377       tree sexpr = expr;
5378 
5379       if (!c_cast_p)
5380 	check_for_casting_away_constness (intype, type, error,
5381 					  "reinterpret_cast");
5382       /* Warn about possible alignment problems.  */
5383       if (STRICT_ALIGNMENT && warn_cast_align
5384 	  && !VOID_TYPE_P (type)
5385 	  && TREE_CODE (TREE_TYPE (intype)) != FUNCTION_TYPE
5386 	  && COMPLETE_TYPE_P (TREE_TYPE (type))
5387 	  && COMPLETE_TYPE_P (TREE_TYPE (intype))
5388 	  && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (intype)))
5389 	warning (0, "cast from %qT to %qT increases required alignment of "
5390 		 "target type",
5391 		 intype, type);
5392 
5393       /* We need to strip nops here, because the frontend likes to
5394 	 create (int *)&a for array-to-pointer decay, instead of &a[0].  */
5395       STRIP_NOPS (sexpr);
5396       if (warn_strict_aliasing <= 2)
5397 	strict_aliasing_warning (intype, type, sexpr);
5398 
5399       return fold_if_not_in_template (build_nop (type, expr));
5400     }
5401   else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype))
5402 	   || (TYPE_PTRFN_P (intype) && TYPE_PTROBV_P (type)))
5403     {
5404       if (pedantic)
5405 	/* Only issue a warning, as we have always supported this
5406 	   where possible, and it is necessary in some cases.  DR 195
5407 	   addresses this issue, but as of 2004/10/26 is still in
5408 	   drafting.  */
5409 	warning (0, "ISO C++ forbids casting between pointer-to-function and pointer-to-object");
5410       return fold_if_not_in_template (build_nop (type, expr));
5411     }
5412   else if (TREE_CODE (type) == VECTOR_TYPE)
5413     return fold_if_not_in_template (convert_to_vector (type, expr));
5414   else if (TREE_CODE (intype) == VECTOR_TYPE && INTEGRAL_TYPE_P (type))
5415     return fold_if_not_in_template (convert_to_integer (type, expr));
5416   else
5417     {
5418       if (valid_p)
5419 	*valid_p = false;
5420       error ("invalid cast from type %qT to type %qT", intype, type);
5421       return error_mark_node;
5422     }
5423 
5424   /* APPLE LOCAL begin don't sign-extend pointers cast to integers */
5425   if (TREE_CODE (type) == INTEGER_TYPE
5426       && TREE_CODE (intype) == POINTER_TYPE
5427       && TYPE_PRECISION (type) > TYPE_PRECISION (intype)
5428       && TYPE_UNSIGNED (type))
5429     expr = cp_convert (c_common_type_for_size (POINTER_SIZE, 1), expr);
5430   /* APPLE LOCAL end don't sign-extend pointers cast to integers */
5431 
5432   return cp_convert (type, expr);
5433 }
5434 
5435 tree
build_reinterpret_cast(tree type,tree expr)5436 build_reinterpret_cast (tree type, tree expr)
5437 {
5438   if (type == error_mark_node || expr == error_mark_node)
5439     return error_mark_node;
5440 
5441   if (processing_template_decl)
5442     {
5443       tree t = build_min (REINTERPRET_CAST_EXPR, type, expr);
5444 
5445       if (!TREE_SIDE_EFFECTS (t)
5446 	  && type_dependent_expression_p (expr))
5447 	/* There might turn out to be side effects inside expr.  */
5448 	TREE_SIDE_EFFECTS (t) = 1;
5449       return convert_from_reference (t);
5450     }
5451 
5452   return build_reinterpret_cast_1 (type, expr, /*c_cast_p=*/false,
5453 				   /*valid_p=*/NULL);
5454 }
5455 
5456 /* Perform a const_cast from EXPR to TYPE.  If the cast is valid,
5457    return an appropriate expression.  Otherwise, return
5458    error_mark_node.  If the cast is not valid, and COMPLAIN is true,
5459    then a diagnostic will be issued.  If VALID_P is non-NULL, we are
5460    performing a C-style cast, its value upon return will indicate
5461    whether or not the conversion succeeded.  */
5462 
5463 static tree
build_const_cast_1(tree dst_type,tree expr,bool complain,bool * valid_p)5464 build_const_cast_1 (tree dst_type, tree expr, bool complain,
5465 		    bool *valid_p)
5466 {
5467   tree src_type;
5468   tree reference_type;
5469 
5470   /* Callers are responsible for handling error_mark_node as a
5471      destination type.  */
5472   gcc_assert (dst_type != error_mark_node);
5473   /* In a template, callers should be building syntactic
5474      representations of casts, not using this machinery.  */
5475   gcc_assert (!processing_template_decl);
5476 
5477   /* Assume the conversion is invalid.  */
5478   if (valid_p)
5479     *valid_p = false;
5480 
5481   if (!POINTER_TYPE_P (dst_type) && !TYPE_PTRMEM_P (dst_type))
5482     {
5483       if (complain)
5484 	error ("invalid use of const_cast with type %qT, "
5485 	       "which is not a pointer, "
5486 	       "reference, nor a pointer-to-data-member type", dst_type);
5487       return error_mark_node;
5488     }
5489 
5490   if (TREE_CODE (TREE_TYPE (dst_type)) == FUNCTION_TYPE)
5491     {
5492       if (complain)
5493 	error ("invalid use of const_cast with type %qT, which is a pointer "
5494 	       "or reference to a function type", dst_type);
5495       return error_mark_node;
5496     }
5497 
5498   /* Save casted types in the function's used types hash table.  */
5499   used_types_insert (dst_type);
5500 
5501   src_type = TREE_TYPE (expr);
5502   /* Expressions do not really have reference types.  */
5503   if (TREE_CODE (src_type) == REFERENCE_TYPE)
5504     src_type = TREE_TYPE (src_type);
5505 
5506   /* [expr.const.cast]
5507 
5508      An lvalue of type T1 can be explicitly converted to an lvalue of
5509      type T2 using the cast const_cast<T2&> (where T1 and T2 are object
5510      types) if a pointer to T1 can be explicitly converted to the type
5511      pointer to T2 using a const_cast.  */
5512   if (TREE_CODE (dst_type) == REFERENCE_TYPE)
5513     {
5514       reference_type = dst_type;
5515       if (! real_lvalue_p (expr))
5516 	{
5517 	  if (complain)
5518 	    error ("invalid const_cast of an rvalue of type %qT to type %qT",
5519 		   src_type, dst_type);
5520 	  return error_mark_node;
5521 	}
5522       dst_type = build_pointer_type (TREE_TYPE (dst_type));
5523       src_type = build_pointer_type (src_type);
5524     }
5525   else
5526     {
5527       reference_type = NULL_TREE;
5528       /* If the destination type is not a reference type, the
5529 	 lvalue-to-rvalue, array-to-pointer, and function-to-pointer
5530 	 conversions are performed.  */
5531       src_type = type_decays_to (src_type);
5532       if (src_type == error_mark_node)
5533 	return error_mark_node;
5534     }
5535 
5536   if ((TYPE_PTR_P (src_type) || TYPE_PTRMEM_P (src_type))
5537       && comp_ptr_ttypes_const (dst_type, src_type))
5538     {
5539       if (valid_p)
5540 	{
5541 	  *valid_p = true;
5542 	  /* This cast is actually a C-style cast.  Issue a warning if
5543 	     the user is making a potentially unsafe cast.  */
5544 	  if (warn_cast_qual)
5545 	    check_for_casting_away_constness (src_type, dst_type,
5546 					      warning0,
5547 					      "cast");
5548 	}
5549       if (reference_type)
5550 	{
5551 	  expr = build_unary_op (ADDR_EXPR, expr, 0);
5552 	  expr = build_nop (reference_type, expr);
5553 	  return convert_from_reference (expr);
5554 	}
5555       else
5556 	{
5557 	  expr = decay_conversion (expr);
5558 	  /* build_c_cast puts on a NOP_EXPR to make the result not an
5559 	     lvalue.  Strip such NOP_EXPRs if VALUE is being used in
5560 	     non-lvalue context.  */
5561 	  if (TREE_CODE (expr) == NOP_EXPR
5562 	      && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5563 	    expr = TREE_OPERAND (expr, 0);
5564 	  return build_nop (dst_type, expr);
5565 	}
5566     }
5567 
5568   if (complain)
5569     error ("invalid const_cast from type %qT to type %qT",
5570 	   src_type, dst_type);
5571   return error_mark_node;
5572 }
5573 
5574 tree
build_const_cast(tree type,tree expr)5575 build_const_cast (tree type, tree expr)
5576 {
5577   if (type == error_mark_node || error_operand_p (expr))
5578     return error_mark_node;
5579 
5580   if (processing_template_decl)
5581     {
5582       tree t = build_min (CONST_CAST_EXPR, type, expr);
5583 
5584       if (!TREE_SIDE_EFFECTS (t)
5585 	  && type_dependent_expression_p (expr))
5586 	/* There might turn out to be side effects inside expr.  */
5587 	TREE_SIDE_EFFECTS (t) = 1;
5588       return convert_from_reference (t);
5589     }
5590 
5591   return build_const_cast_1 (type, expr, /*complain=*/true,
5592 			     /*valid_p=*/NULL);
5593 }
5594 
5595 /* Build an expression representing an explicit C-style cast to type
5596    TYPE of expression EXPR.  */
5597 
5598 tree
build_c_cast(tree type,tree expr)5599 build_c_cast (tree type, tree expr)
5600 {
5601   tree value = expr;
5602   tree result;
5603   bool valid_p;
5604 
5605   if (type == error_mark_node || error_operand_p (expr))
5606     return error_mark_node;
5607 
5608   if (processing_template_decl)
5609     {
5610       tree t = build_min (CAST_EXPR, type,
5611 			  tree_cons (NULL_TREE, value, NULL_TREE));
5612       /* We don't know if it will or will not have side effects.  */
5613       TREE_SIDE_EFFECTS (t) = 1;
5614       return convert_from_reference (t);
5615     }
5616 
5617   /* Casts to a (pointer to a) specific ObjC class (or 'id' or
5618      'Class') should always be retained, because this information aids
5619      in method lookup.  */
5620   if (objc_is_object_ptr (type)
5621       && objc_is_object_ptr (TREE_TYPE (expr)))
5622     return build_nop (type, expr);
5623 
5624   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
5625      Strip such NOP_EXPRs if VALUE is being used in non-lvalue context.  */
5626   if (TREE_CODE (type) != REFERENCE_TYPE
5627       && TREE_CODE (value) == NOP_EXPR
5628       && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0)))
5629     value = TREE_OPERAND (value, 0);
5630 
5631   if (TREE_CODE (type) == ARRAY_TYPE)
5632     {
5633       /* Allow casting from T1* to T2[] because Cfront allows it.
5634 	 NIHCL uses it. It is not valid ISO C++ however.  */
5635       if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
5636 	{
5637 	  pedwarn ("ISO C++ forbids casting to an array type %qT", type);
5638 	  type = build_pointer_type (TREE_TYPE (type));
5639 	}
5640       else
5641 	{
5642 	  error ("ISO C++ forbids casting to an array type %qT", type);
5643 	  return error_mark_node;
5644 	}
5645     }
5646 
5647   if (TREE_CODE (type) == FUNCTION_TYPE
5648       || TREE_CODE (type) == METHOD_TYPE)
5649     {
5650       error ("invalid cast to function type %qT", type);
5651       return error_mark_node;
5652     }
5653 
5654   /* A C-style cast can be a const_cast.  */
5655   result = build_const_cast_1 (type, value, /*complain=*/false,
5656 			       &valid_p);
5657   if (valid_p)
5658     return result;
5659 
5660   /* Or a static cast.  */
5661   result = build_static_cast_1 (type, value, /*c_cast_p=*/true,
5662 				&valid_p);
5663   /* Or a reinterpret_cast.  */
5664   if (!valid_p)
5665     result = build_reinterpret_cast_1 (type, value, /*c_cast_p=*/true,
5666 				       &valid_p);
5667   /* The static_cast or reinterpret_cast may be followed by a
5668      const_cast.  */
5669   if (valid_p
5670       /* A valid cast may result in errors if, for example, a
5671 	 conversion to am ambiguous base class is required.  */
5672       && !error_operand_p (result))
5673     {
5674       tree result_type;
5675 
5676       /* Non-class rvalues always have cv-unqualified type.  */
5677       if (!CLASS_TYPE_P (type))
5678 	type = TYPE_MAIN_VARIANT (type);
5679       result_type = TREE_TYPE (result);
5680       if (!CLASS_TYPE_P (result_type))
5681 	result_type = TYPE_MAIN_VARIANT (result_type);
5682       /* If the type of RESULT does not match TYPE, perform a
5683 	 const_cast to make it match.  If the static_cast or
5684 	 reinterpret_cast succeeded, we will differ by at most
5685 	 cv-qualification, so the follow-on const_cast is guaranteed
5686 	 to succeed.  */
5687       if (!same_type_p (non_reference (type), non_reference (result_type)))
5688 	{
5689 	  result = build_const_cast_1 (type, result, false, &valid_p);
5690 	  gcc_assert (valid_p);
5691 	}
5692       return result;
5693     }
5694 
5695   return error_mark_node;
5696 }
5697 
5698 /* Build an assignment expression of lvalue LHS from value RHS.
5699    MODIFYCODE is the code for a binary operator that we use
5700    to combine the old value of LHS with RHS to get the new value.
5701    Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment.
5702 
5703    C++: If MODIFYCODE is INIT_EXPR, then leave references unbashed.  */
5704 
5705 tree
build_modify_expr(tree lhs,enum tree_code modifycode,tree rhs)5706 build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
5707 {
5708   tree result;
5709   tree newrhs = rhs;
5710   tree lhstype = TREE_TYPE (lhs);
5711   tree olhstype = lhstype;
5712   tree olhs = NULL_TREE;
5713   bool plain_assign = (modifycode == NOP_EXPR);
5714 
5715   /* Avoid duplicate error messages from operands that had errors.  */
5716   if (error_operand_p (lhs) || error_operand_p (rhs))
5717     return error_mark_node;
5718 
5719   /* Handle control structure constructs used as "lvalues".  */
5720   switch (TREE_CODE (lhs))
5721     {
5722       /* Handle --foo = 5; as these are valid constructs in C++.  */
5723     case PREDECREMENT_EXPR:
5724     case PREINCREMENT_EXPR:
5725       if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
5726 	lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
5727 		      stabilize_reference (TREE_OPERAND (lhs, 0)),
5728 		      TREE_OPERAND (lhs, 1));
5729       return build2 (COMPOUND_EXPR, lhstype,
5730 		     lhs,
5731 		     build_modify_expr (TREE_OPERAND (lhs, 0),
5732 					modifycode, rhs));
5733 
5734       /* Handle (a, b) used as an "lvalue".  */
5735     case COMPOUND_EXPR:
5736       newrhs = build_modify_expr (TREE_OPERAND (lhs, 1),
5737 				  modifycode, rhs);
5738       if (newrhs == error_mark_node)
5739 	return error_mark_node;
5740       return build2 (COMPOUND_EXPR, lhstype,
5741 		     TREE_OPERAND (lhs, 0), newrhs);
5742 
5743     case MODIFY_EXPR:
5744       if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
5745 	lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
5746 		      stabilize_reference (TREE_OPERAND (lhs, 0)),
5747 		      TREE_OPERAND (lhs, 1));
5748       newrhs = build_modify_expr (TREE_OPERAND (lhs, 0), modifycode, rhs);
5749       if (newrhs == error_mark_node)
5750 	return error_mark_node;
5751       return build2 (COMPOUND_EXPR, lhstype, lhs, newrhs);
5752 
5753     case MIN_EXPR:
5754     case MAX_EXPR:
5755       /* MIN_EXPR and MAX_EXPR are currently only permitted as lvalues,
5756 	 when neither operand has side-effects.  */
5757       if (!lvalue_or_else (lhs, lv_assign))
5758 	return error_mark_node;
5759 
5760       gcc_assert (!TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0))
5761 		  && !TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 1)));
5762 
5763       lhs = build3 (COND_EXPR, TREE_TYPE (lhs),
5764 		    build2 (TREE_CODE (lhs) == MIN_EXPR ? LE_EXPR : GE_EXPR,
5765 			    boolean_type_node,
5766 			    TREE_OPERAND (lhs, 0),
5767 			    TREE_OPERAND (lhs, 1)),
5768 		    TREE_OPERAND (lhs, 0),
5769 		    TREE_OPERAND (lhs, 1));
5770       /* Fall through.  */
5771 
5772       /* Handle (a ? b : c) used as an "lvalue".  */
5773     case COND_EXPR:
5774       {
5775 	/* Produce (a ? (b = rhs) : (c = rhs))
5776 	   except that the RHS goes through a save-expr
5777 	   so the code to compute it is only emitted once.  */
5778 	tree cond;
5779 	tree preeval = NULL_TREE;
5780 
5781 	if (VOID_TYPE_P (TREE_TYPE (rhs)))
5782 	  {
5783 	    error ("void value not ignored as it ought to be");
5784 	    return error_mark_node;
5785 	  }
5786 
5787 	rhs = stabilize_expr (rhs, &preeval);
5788 
5789 	/* Check this here to avoid odd errors when trying to convert
5790 	   a throw to the type of the COND_EXPR.  */
5791 	if (!lvalue_or_else (lhs, lv_assign))
5792 	  return error_mark_node;
5793 
5794 	cond = build_conditional_expr
5795 	  (TREE_OPERAND (lhs, 0),
5796 	   build_modify_expr (TREE_OPERAND (lhs, 1),
5797 			      modifycode, rhs),
5798 	   build_modify_expr (TREE_OPERAND (lhs, 2),
5799 			      modifycode, rhs));
5800 
5801 	if (cond == error_mark_node)
5802 	  return cond;
5803 	/* Make sure the code to compute the rhs comes out
5804 	   before the split.  */
5805 	if (preeval)
5806 	  cond = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), preeval, cond);
5807 	return cond;
5808       }
5809 
5810     default:
5811       break;
5812     }
5813 
5814   if (modifycode == INIT_EXPR)
5815     {
5816       if (TREE_CODE (rhs) == CONSTRUCTOR)
5817 	{
5818 	  if (! same_type_p (TREE_TYPE (rhs), lhstype))
5819 	    /* Call convert to generate an error; see PR 11063.  */
5820 	    rhs = convert (lhstype, rhs);
5821 	  result = build2 (INIT_EXPR, lhstype, lhs, rhs);
5822 	  TREE_SIDE_EFFECTS (result) = 1;
5823 	  return result;
5824 	}
5825       else if (! IS_AGGR_TYPE (lhstype))
5826 	/* Do the default thing.  */;
5827       else
5828 	{
5829 	  result = build_special_member_call (lhs, complete_ctor_identifier,
5830 					      build_tree_list (NULL_TREE, rhs),
5831 					      lhstype, LOOKUP_NORMAL);
5832 	  if (result == NULL_TREE)
5833 	    return error_mark_node;
5834 	  return result;
5835 	}
5836     }
5837   else
5838     {
5839       lhs = require_complete_type (lhs);
5840       if (lhs == error_mark_node)
5841 	return error_mark_node;
5842 
5843       if (modifycode == NOP_EXPR)
5844 	{
5845 	  /* `operator=' is not an inheritable operator.  */
5846 	  if (! IS_AGGR_TYPE (lhstype))
5847 	    /* Do the default thing.  */;
5848 	  else
5849 	    {
5850 	      result = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL,
5851 				     lhs, rhs, make_node (NOP_EXPR),
5852 				     /*overloaded_p=*/NULL);
5853 	      if (result == NULL_TREE)
5854 		return error_mark_node;
5855 	      return result;
5856 	    }
5857 	  /* APPLE LOCAL end C* property (Radar 4436866) */
5858 	  /* `operator=' is not an inheritable operator.  */
5859 	  if (! IS_AGGR_TYPE (lhstype))
5860 	    /* Do the default thing.  */;
5861 	  else
5862 	    {
5863 	      result = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL,
5864 				     lhs, rhs, make_node (NOP_EXPR),
5865 				     /*overloaded_p=*/NULL);
5866 	      if (result == NULL_TREE)
5867 		return error_mark_node;
5868 	      return result;
5869 	    }
5870 	  lhstype = olhstype;
5871 	}
5872       else
5873 	{
5874 	  /* A binary op has been requested.  Combine the old LHS
5875 	     value with the RHS producing the value we should actually
5876 	     store into the LHS.  */
5877 
5878 	  gcc_assert (!PROMOTES_TO_AGGR_TYPE (lhstype, REFERENCE_TYPE));
5879 	  lhs = stabilize_reference (lhs);
5880 	  newrhs = cp_build_binary_op (modifycode, lhs, rhs);
5881 	  if (newrhs == error_mark_node)
5882 	    {
5883 	      error ("  in evaluation of %<%Q(%#T, %#T)%>", modifycode,
5884 		     TREE_TYPE (lhs), TREE_TYPE (rhs));
5885 	      return error_mark_node;
5886 	    }
5887 
5888 	  /* Now it looks like a plain assignment.  */
5889 	  modifycode = NOP_EXPR;
5890 	  lhstype = olhstype;
5891 	}
5892       gcc_assert (TREE_CODE (lhstype) != REFERENCE_TYPE);
5893       gcc_assert (TREE_CODE (TREE_TYPE (newrhs)) != REFERENCE_TYPE);
5894     }
5895 
5896   /* The left-hand side must be an lvalue.  */
5897   if (!lvalue_or_else (lhs, lv_assign))
5898     return error_mark_node;
5899 
5900   /* Warn about modifying something that is `const'.  Don't warn if
5901      this is initialization.  */
5902   if (modifycode != INIT_EXPR
5903       && (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype)
5904 	  /* Functions are not modifiable, even though they are
5905 	     lvalues.  */
5906 	  || TREE_CODE (TREE_TYPE (lhs)) == FUNCTION_TYPE
5907 	  || TREE_CODE (TREE_TYPE (lhs)) == METHOD_TYPE
5908 	  /* If it's an aggregate and any field is const, then it is
5909 	     effectively const.  */
5910 	  || (CLASS_TYPE_P (lhstype)
5911 	      && C_TYPE_FIELDS_READONLY (lhstype))))
5912     readonly_error (lhs, "assignment", 0);
5913 
5914   /* If storing into a structure or union member, it has probably been
5915      given type `int'.  Compute the type that would go with the actual
5916      amount of storage the member occupies.  */
5917 
5918   if (TREE_CODE (lhs) == COMPONENT_REF
5919       && (TREE_CODE (lhstype) == INTEGER_TYPE
5920 	  || TREE_CODE (lhstype) == REAL_TYPE
5921 	  || TREE_CODE (lhstype) == ENUMERAL_TYPE))
5922     {
5923       lhstype = TREE_TYPE (get_unwidened (lhs, 0));
5924 
5925       /* If storing in a field that is in actuality a short or narrower
5926 	 than one, we must store in the field in its actual type.  */
5927 
5928       if (lhstype != TREE_TYPE (lhs))
5929 	{
5930 	  /* Avoid warnings converting integral types back into enums for
5931 	     enum bit fields.  */
5932 	  if (TREE_CODE (lhstype) == INTEGER_TYPE
5933 	      && TREE_CODE (olhstype) == ENUMERAL_TYPE)
5934 	    {
5935 	      if (TREE_SIDE_EFFECTS (lhs))
5936 		lhs = stabilize_reference (lhs);
5937 	      olhs = lhs;
5938 	    }
5939 	  lhs = copy_node (lhs);
5940 	  TREE_TYPE (lhs) = lhstype;
5941 	}
5942     }
5943 
5944   /* Convert new value to destination type.  */
5945 
5946   if (TREE_CODE (lhstype) == ARRAY_TYPE)
5947     {
5948       int from_array;
5949 
5950       if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype),
5951 				TYPE_MAIN_VARIANT (TREE_TYPE (rhs))))
5952 	{
5953 	  error ("incompatible types in assignment of %qT to %qT",
5954 		 TREE_TYPE (rhs), lhstype);
5955 	  return error_mark_node;
5956 	}
5957 
5958       /* Allow array assignment in compiler-generated code.  */
5959       if (! DECL_ARTIFICIAL (current_function_decl))
5960 	{
5961           /* This routine is used for both initialization and assignment.
5962              Make sure the diagnostic message differentiates the context.  */
5963           if (modifycode == INIT_EXPR)
5964             error ("array used as initializer");
5965           else
5966             error ("invalid array assignment");
5967 	  return error_mark_node;
5968 	}
5969 
5970       from_array = TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
5971 		   ? 1 + (modifycode != INIT_EXPR): 0;
5972       return build_vec_init (lhs, NULL_TREE, newrhs,
5973 			     /*explicit_default_init_p=*/false,
5974 			     from_array);
5975     }
5976 
5977   if (modifycode == INIT_EXPR)
5978     newrhs = convert_for_initialization (lhs, lhstype, newrhs, LOOKUP_NORMAL,
5979 					 "initialization", NULL_TREE, 0);
5980   else
5981     {
5982       /* Avoid warnings on enum bit fields.  */
5983       if (TREE_CODE (olhstype) == ENUMERAL_TYPE
5984 	  && TREE_CODE (lhstype) == INTEGER_TYPE)
5985 	{
5986 	  newrhs = convert_for_assignment (olhstype, newrhs, "assignment",
5987 					   NULL_TREE, 0);
5988 	  newrhs = convert_force (lhstype, newrhs, 0);
5989 	}
5990       else
5991 	newrhs = convert_for_assignment (lhstype, newrhs, "assignment",
5992 					 NULL_TREE, 0);
5993       if (TREE_CODE (newrhs) == CALL_EXPR
5994 	  && TYPE_NEEDS_CONSTRUCTING (lhstype))
5995 	newrhs = build_cplus_new (lhstype, newrhs);
5996 
5997       /* Can't initialize directly from a TARGET_EXPR, since that would
5998 	 cause the lhs to be constructed twice, and possibly result in
5999 	 accidental self-initialization.  So we force the TARGET_EXPR to be
6000 	 expanded without a target.  */
6001       if (TREE_CODE (newrhs) == TARGET_EXPR)
6002 	newrhs = build2 (COMPOUND_EXPR, TREE_TYPE (newrhs), newrhs,
6003 			 TREE_OPERAND (newrhs, 0));
6004     }
6005 
6006   if (newrhs == error_mark_node)
6007     return error_mark_node;
6008 
6009   if (c_dialect_objc () && flag_objc_gc)
6010     {
6011       result = objc_generate_write_barrier (lhs, modifycode, newrhs);
6012 
6013       if (result)
6014 	return result;
6015     }
6016 
6017   result = build2 (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR,
6018 		   lhstype, lhs, newrhs);
6019 
6020   TREE_SIDE_EFFECTS (result) = 1;
6021   if (!plain_assign)
6022     TREE_NO_WARNING (result) = 1;
6023 
6024   /* If we got the LHS in a different type for storing in,
6025      convert the result back to the nominal type of LHS
6026      so that the value we return always has the same type
6027      as the LHS argument.  */
6028 
6029   if (olhstype == TREE_TYPE (result))
6030     return result;
6031   if (olhs)
6032     {
6033       result = build2 (COMPOUND_EXPR, olhstype, result, olhs);
6034       TREE_NO_WARNING (result) = 1;
6035       return result;
6036     }
6037   return convert_for_assignment (olhstype, result, "assignment",
6038 				 NULL_TREE, 0);
6039 }
6040 
6041 tree
build_x_modify_expr(tree lhs,enum tree_code modifycode,tree rhs)6042 build_x_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
6043 {
6044   /* APPLE LOCAL __block assign sequence point 6639533 */
6045   bool insert_sequence_point = false;
6046 
6047   if (processing_template_decl)
6048     return build_min_nt (MODOP_EXPR, lhs,
6049 			 build_min_nt (modifycode, NULL_TREE, NULL_TREE), rhs);
6050 
6051   /* APPLE LOCAL begin __block assign sequence point 6639533 */
6052   /* For byref = x;, we have to transform this into ({ typeof(x) x' =
6053      x; byref = x`; )} to ensure there is a sequence point before the
6054      evaluation of the byref, inorder to ensure that the access
6055      expression for byref doesn't start running before x is evaluated,
6056      as it will access the __forwarding pointer and that must be done
6057      after x is evaluated.  */
6058   /* First we check to see if lhs is a byref...  byrefs look like:
6059 	__Block_byref_X.__forwarding->x  */
6060   if (TREE_CODE (lhs) == COMPONENT_REF)
6061     {
6062       tree inner = TREE_OPERAND (lhs, 0);
6063       /* now check for -> */
6064       if (TREE_CODE (inner) == INDIRECT_REF)
6065 	{
6066 	  inner = TREE_OPERAND (inner, 0);
6067 	  if (TREE_CODE (inner) == COMPONENT_REF)
6068 	    {
6069 	      inner = TREE_OPERAND (inner, 0);
6070 	      if (TREE_CODE (inner) == VAR_DECL
6071 		  && COPYABLE_BYREF_LOCAL_VAR (inner))
6072 		{
6073 		  tree old_rhs = rhs;
6074 		  /* then we save the rhs.  */
6075 		  rhs = save_expr (rhs);
6076 		  if (rhs != old_rhs)
6077 		    /* And arrange for the sequence point to be inserted.  */
6078 		    insert_sequence_point = true;
6079 		}
6080 	    }
6081 	}
6082     }
6083   /* APPLE LOCAL end __block assign sequence point 6639533 */
6084 
6085   if (modifycode != NOP_EXPR)
6086     {
6087       tree rval = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs,
6088 				make_node (modifycode),
6089 				/*overloaded_p=*/NULL);
6090       if (rval)
6091 	{
6092 	  /* APPLE LOCAL begin __block assign sequence point 6639533 */
6093 	  if (insert_sequence_point)
6094 	    rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), rhs, rval);
6095 	  /* APPLE LOCAL end __block assign sequence point 6639533 */
6096 	  TREE_NO_WARNING (rval) = 1;
6097 	  return rval;
6098 	}
6099     }
6100   lhs = build_modify_expr (lhs, modifycode, rhs);
6101   /* APPLE LOCAL begin __block assign sequence point 6639533 */
6102   if (insert_sequence_point)
6103     lhs = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), rhs, lhs);
6104   /* APPLE LOCAL end __block assign sequence point 6639533 */
6105   return lhs;
6106 }
6107 
6108 
6109 /* Get difference in deltas for different pointer to member function
6110    types.  Returns an integer constant of type PTRDIFF_TYPE_NODE.  If
6111    the conversion is invalid, the constant is zero.  If
6112    ALLOW_INVERSE_P is true, then allow reverse conversions as well.
6113    If C_CAST_P is true this conversion is taking place as part of a
6114    C-style cast.
6115 
6116    Note that the naming of FROM and TO is kind of backwards; the return
6117    value is what we add to a TO in order to get a FROM.  They are named
6118    this way because we call this function to find out how to convert from
6119    a pointer to member of FROM to a pointer to member of TO.  */
6120 
6121 static tree
get_delta_difference(tree from,tree to,bool allow_inverse_p,bool c_cast_p)6122 get_delta_difference (tree from, tree to,
6123 		      bool allow_inverse_p,
6124 		      bool c_cast_p)
6125 {
6126   tree binfo;
6127   base_kind kind;
6128   tree result;
6129 
6130   /* Assume no conversion is required.  */
6131   result = integer_zero_node;
6132   binfo = lookup_base (to, from, c_cast_p ? ba_unique : ba_check, &kind);
6133   if (kind == bk_inaccessible || kind == bk_ambig)
6134     error ("   in pointer to member function conversion");
6135   else if (binfo)
6136     {
6137       if (kind != bk_via_virtual)
6138 	result = BINFO_OFFSET (binfo);
6139       else
6140 	{
6141 	  tree virt_binfo = binfo_from_vbase (binfo);
6142 
6143 	  /* This is a reinterpret cast, we choose to do nothing.  */
6144 	  if (allow_inverse_p)
6145 	    warning (0, "pointer to member cast via virtual base %qT",
6146 		     BINFO_TYPE (virt_binfo));
6147 	  else
6148 	    error ("pointer to member conversion via virtual base %qT",
6149 		   BINFO_TYPE (virt_binfo));
6150 	}
6151     }
6152   else if (same_type_ignoring_top_level_qualifiers_p (from, to))
6153     /* Pointer to member of incomplete class is permitted*/;
6154   else if (!allow_inverse_p)
6155     {
6156       error_not_base_type (from, to);
6157       error ("   in pointer to member conversion");
6158     }
6159   else
6160     {
6161       binfo = lookup_base (from, to, c_cast_p ? ba_unique : ba_check, &kind);
6162       if (binfo)
6163 	{
6164 	  if (kind != bk_via_virtual)
6165 	    result = size_diffop (size_zero_node, BINFO_OFFSET (binfo));
6166 	  else
6167 	    {
6168 	      /* This is a reinterpret cast, we choose to do nothing.  */
6169 	      tree virt_binfo = binfo_from_vbase (binfo);
6170 
6171 	      warning (0, "pointer to member cast via virtual base %qT",
6172 		       BINFO_TYPE (virt_binfo));
6173 	    }
6174 	}
6175     }
6176 
6177   return fold_if_not_in_template (convert_to_integer (ptrdiff_type_node,
6178 						      result));
6179 }
6180 
6181 /* Return a constructor for the pointer-to-member-function TYPE using
6182    the other components as specified.  */
6183 
6184 tree
build_ptrmemfunc1(tree type,tree delta,tree pfn)6185 build_ptrmemfunc1 (tree type, tree delta, tree pfn)
6186 {
6187   tree u = NULL_TREE;
6188   tree delta_field;
6189   tree pfn_field;
6190   VEC(constructor_elt, gc) *v;
6191 
6192   /* Pull the FIELD_DECLs out of the type.  */
6193   pfn_field = TYPE_FIELDS (type);
6194   delta_field = TREE_CHAIN (pfn_field);
6195 
6196   /* Make sure DELTA has the type we want.  */
6197   delta = convert_and_check (delta_type_node, delta);
6198 
6199   /* Finish creating the initializer.  */
6200   v = VEC_alloc(constructor_elt, gc, 2);
6201   CONSTRUCTOR_APPEND_ELT(v, pfn_field, pfn);
6202   CONSTRUCTOR_APPEND_ELT(v, delta_field, delta);
6203   u = build_constructor (type, v);
6204   TREE_CONSTANT (u) = TREE_CONSTANT (pfn) & TREE_CONSTANT (delta);
6205   TREE_INVARIANT (u) = TREE_INVARIANT (pfn) & TREE_INVARIANT (delta);
6206   TREE_STATIC (u) = (TREE_CONSTANT (u)
6207 		     && (initializer_constant_valid_p (pfn, TREE_TYPE (pfn))
6208 			 != NULL_TREE)
6209 		     && (initializer_constant_valid_p (delta, TREE_TYPE (delta))
6210 			 != NULL_TREE));
6211   return u;
6212 }
6213 
6214 /* Build a constructor for a pointer to member function.  It can be
6215    used to initialize global variables, local variable, or used
6216    as a value in expressions.  TYPE is the POINTER to METHOD_TYPE we
6217    want to be.
6218 
6219    If FORCE is nonzero, then force this conversion, even if
6220    we would rather not do it.  Usually set when using an explicit
6221    cast.  A C-style cast is being processed iff C_CAST_P is true.
6222 
6223    Return error_mark_node, if something goes wrong.  */
6224 
6225 tree
build_ptrmemfunc(tree type,tree pfn,int force,bool c_cast_p)6226 build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p)
6227 {
6228   tree fn;
6229   tree pfn_type;
6230   tree to_type;
6231 
6232   if (error_operand_p (pfn))
6233     return error_mark_node;
6234 
6235   pfn_type = TREE_TYPE (pfn);
6236   to_type = build_ptrmemfunc_type (type);
6237 
6238   /* Handle multiple conversions of pointer to member functions.  */
6239   if (TYPE_PTRMEMFUNC_P (pfn_type))
6240     {
6241       tree delta = NULL_TREE;
6242       tree npfn = NULL_TREE;
6243       tree n;
6244 
6245       if (!force
6246 	  && !can_convert_arg (to_type, TREE_TYPE (pfn), pfn, LOOKUP_NORMAL))
6247 	error ("invalid conversion to type %qT from type %qT",
6248 	       to_type, pfn_type);
6249 
6250       n = get_delta_difference (TYPE_PTRMEMFUNC_OBJECT_TYPE (pfn_type),
6251 				TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type),
6252 				force,
6253 				c_cast_p);
6254 
6255       /* We don't have to do any conversion to convert a
6256 	 pointer-to-member to its own type.  But, we don't want to
6257 	 just return a PTRMEM_CST if there's an explicit cast; that
6258 	 cast should make the expression an invalid template argument.  */
6259       if (TREE_CODE (pfn) != PTRMEM_CST)
6260 	{
6261 	  if (same_type_p (to_type, pfn_type))
6262 	    return pfn;
6263 	  else if (integer_zerop (n))
6264 	    return build_reinterpret_cast (to_type, pfn);
6265 	}
6266 
6267       if (TREE_SIDE_EFFECTS (pfn))
6268 	pfn = save_expr (pfn);
6269 
6270       /* Obtain the function pointer and the current DELTA.  */
6271       if (TREE_CODE (pfn) == PTRMEM_CST)
6272 	expand_ptrmemfunc_cst (pfn, &delta, &npfn);
6273       else
6274 	{
6275 	  npfn = build_ptrmemfunc_access_expr (pfn, pfn_identifier);
6276 	  delta = build_ptrmemfunc_access_expr (pfn, delta_identifier);
6277 	}
6278 
6279       /* Just adjust the DELTA field.  */
6280       gcc_assert  (same_type_ignoring_top_level_qualifiers_p
6281 		   (TREE_TYPE (delta), ptrdiff_type_node));
6282       if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta)
6283 	n = cp_build_binary_op (LSHIFT_EXPR, n, integer_one_node);
6284       delta = cp_build_binary_op (PLUS_EXPR, delta, n);
6285       return build_ptrmemfunc1 (to_type, delta, npfn);
6286     }
6287 
6288   /* Handle null pointer to member function conversions.  */
6289   if (integer_zerop (pfn))
6290     {
6291       pfn = build_c_cast (type, integer_zero_node);
6292       return build_ptrmemfunc1 (to_type,
6293 				integer_zero_node,
6294 				pfn);
6295     }
6296 
6297   if (type_unknown_p (pfn))
6298     return instantiate_type (type, pfn, tf_warning_or_error);
6299 
6300   fn = TREE_OPERAND (pfn, 0);
6301   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
6302 	      /* In a template, we will have preserved the
6303 		 OFFSET_REF.  */
6304 	      || (processing_template_decl && TREE_CODE (fn) == OFFSET_REF));
6305   return make_ptrmem_cst (to_type, fn);
6306 }
6307 
6308 /* Return the DELTA, IDX, PFN, and DELTA2 values for the PTRMEM_CST
6309    given by CST.
6310 
6311    ??? There is no consistency as to the types returned for the above
6312    values.  Some code acts as if it were a sizetype and some as if it were
6313    integer_type_node.  */
6314 
6315 void
expand_ptrmemfunc_cst(tree cst,tree * delta,tree * pfn)6316 expand_ptrmemfunc_cst (tree cst, tree *delta, tree *pfn)
6317 {
6318   tree type = TREE_TYPE (cst);
6319   tree fn = PTRMEM_CST_MEMBER (cst);
6320   tree ptr_class, fn_class;
6321 
6322   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
6323 
6324   /* The class that the function belongs to.  */
6325   fn_class = DECL_CONTEXT (fn);
6326 
6327   /* The class that we're creating a pointer to member of.  */
6328   ptr_class = TYPE_PTRMEMFUNC_OBJECT_TYPE (type);
6329 
6330   /* First, calculate the adjustment to the function's class.  */
6331   *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0,
6332 				 /*c_cast_p=*/0);
6333 
6334   if (!DECL_VIRTUAL_P (fn))
6335     *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn));
6336   else
6337     {
6338       /* If we're dealing with a virtual function, we have to adjust 'this'
6339 	 again, to point to the base which provides the vtable entry for
6340 	 fn; the call will do the opposite adjustment.  */
6341       tree orig_class = DECL_CONTEXT (fn);
6342       tree binfo = binfo_or_else (orig_class, fn_class);
6343       *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
6344 		       *delta, BINFO_OFFSET (binfo));
6345       *delta = fold_if_not_in_template (*delta);
6346 
6347       /* We set PFN to the vtable offset at which the function can be
6348 	 found, plus one (unless ptrmemfunc_vbit_in_delta, in which
6349 	 case delta is shifted left, and then incremented).  */
6350       *pfn = DECL_VINDEX (fn);
6351       *pfn = build2 (MULT_EXPR, integer_type_node, *pfn,
6352 		     TYPE_SIZE_UNIT (vtable_entry_type));
6353       *pfn = fold_if_not_in_template (*pfn);
6354 
6355       switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
6356 	{
6357 	case ptrmemfunc_vbit_in_pfn:
6358 	  *pfn = build2 (PLUS_EXPR, integer_type_node, *pfn,
6359 			 integer_one_node);
6360 	  *pfn = fold_if_not_in_template (*pfn);
6361 	  break;
6362 
6363 	case ptrmemfunc_vbit_in_delta:
6364 	  *delta = build2 (LSHIFT_EXPR, TREE_TYPE (*delta),
6365 			   *delta, integer_one_node);
6366 	  *delta = fold_if_not_in_template (*delta);
6367 	  *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
6368 			   *delta, integer_one_node);
6369 	  *delta = fold_if_not_in_template (*delta);
6370 	  break;
6371 
6372 	default:
6373 	  gcc_unreachable ();
6374 	}
6375 
6376       *pfn = build_nop (TYPE_PTRMEMFUNC_FN_TYPE (type), *pfn);
6377       *pfn = fold_if_not_in_template (*pfn);
6378     }
6379 }
6380 
6381 /* Return an expression for PFN from the pointer-to-member function
6382    given by T.  */
6383 
6384 static tree
pfn_from_ptrmemfunc(tree t)6385 pfn_from_ptrmemfunc (tree t)
6386 {
6387   if (TREE_CODE (t) == PTRMEM_CST)
6388     {
6389       tree delta;
6390       tree pfn;
6391 
6392       expand_ptrmemfunc_cst (t, &delta, &pfn);
6393       if (pfn)
6394 	return pfn;
6395     }
6396 
6397   return build_ptrmemfunc_access_expr (t, pfn_identifier);
6398 }
6399 
6400 /* Convert value RHS to type TYPE as preparation for an assignment to
6401    an lvalue of type TYPE.  ERRTYPE is a string to use in error
6402    messages: "assignment", "return", etc.  If FNDECL is non-NULL, we
6403    are doing the conversion in order to pass the PARMNUMth argument of
6404    FNDECL.  */
6405 
6406 static tree
convert_for_assignment(tree type,tree rhs,const char * errtype,tree fndecl,int parmnum)6407 convert_for_assignment (tree type, tree rhs,
6408 			const char *errtype, tree fndecl, int parmnum)
6409 {
6410   tree rhstype;
6411   enum tree_code coder;
6412   /* APPLE LOCAL radar 4874632 */
6413   tree new_rhs = NULL_TREE;
6414 
6415   /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
6416   if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
6417     rhs = TREE_OPERAND (rhs, 0);
6418 
6419   rhstype = TREE_TYPE (rhs);
6420   coder = TREE_CODE (rhstype);
6421 
6422   if (TREE_CODE (type) == VECTOR_TYPE && coder == VECTOR_TYPE
6423       && vector_types_convertible_p (type, rhstype, true))
6424     return convert (type, rhs);
6425 
6426   if (rhs == error_mark_node || rhstype == error_mark_node)
6427     return error_mark_node;
6428   if (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node)
6429     return error_mark_node;
6430 
6431   /* The RHS of an assignment cannot have void type.  */
6432   if (coder == VOID_TYPE)
6433     {
6434       error ("void value not ignored as it ought to be");
6435       return error_mark_node;
6436     }
6437 
6438   /* Simplify the RHS if possible.  */
6439   if (TREE_CODE (rhs) == CONST_DECL)
6440     rhs = DECL_INITIAL (rhs);
6441 
6442   if (c_dialect_objc ())
6443     {
6444       int parmno;
6445       tree rname = fndecl;
6446 
6447       if (!strcmp (errtype, "assignment"))
6448 	parmno = -1;
6449       else if (!strcmp (errtype, "initialization"))
6450 	parmno = -2;
6451       else
6452 	{
6453 	  tree selector = objc_message_selector ();
6454 
6455 	  parmno = parmnum;
6456 
6457 	  if (selector && parmno > 1)
6458 	    {
6459 	      rname = selector;
6460 	      parmno -= 1;
6461 	    }
6462 	}
6463 
6464       /* APPLE LOCAL file radar 6231433 */
6465       if (objc_compare_types (type, rhstype, parmno, rname, "comparison"))
6466 	/* APPLE LOCAL radar 4874632 */
6467 	new_rhs = convert (type, rhs);
6468     }
6469 
6470   /* [expr.ass]
6471 
6472      The expression is implicitly converted (clause _conv_) to the
6473      cv-unqualified type of the left operand.
6474 
6475      We allow bad conversions here because by the time we get to this point
6476      we are committed to doing the conversion.  If we end up doing a bad
6477      conversion, convert_like will complain.  */
6478   if (!can_convert_arg_bad (type, rhstype, rhs))
6479     {
6480       /* When -Wno-pmf-conversions is use, we just silently allow
6481 	 conversions from pointers-to-members to plain pointers.  If
6482 	 the conversion doesn't work, cp_convert will complain.  */
6483       if (!warn_pmf2ptr
6484 	  && TYPE_PTR_P (type)
6485 	  && TYPE_PTRMEMFUNC_P (rhstype))
6486 	rhs = cp_convert (strip_top_quals (type), rhs);
6487       else
6488 	{
6489 	  /* If the right-hand side has unknown type, then it is an
6490 	     overloaded function.  Call instantiate_type to get error
6491 	     messages.  */
6492 	  if (rhstype == unknown_type_node)
6493 	    instantiate_type (type, rhs, tf_warning_or_error);
6494 	  else if (fndecl)
6495 	    error ("cannot convert %qT to %qT for argument %qP to %qD",
6496 		   rhstype, type, parmnum, fndecl);
6497 	  else
6498 	    error ("cannot convert %qT to %qT in %s", rhstype, type, errtype);
6499 	  return error_mark_node;
6500 	}
6501     }
6502   if (warn_missing_format_attribute)
6503     {
6504       const enum tree_code codel = TREE_CODE (type);
6505       if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
6506 	  && coder == codel
6507 	  && check_missing_format_attribute (type, rhstype))
6508 	warning (OPT_Wmissing_format_attribute,
6509 		 "%s might be a candidate for a format attribute",
6510 		 errtype);
6511     }
6512 
6513   /* If -Wparentheses, warn about a = b = c when a has type bool and b
6514      does not.  */
6515   if (warn_parentheses
6516       && type == boolean_type_node
6517       && TREE_CODE (rhs) == MODIFY_EXPR
6518       && !TREE_NO_WARNING (rhs)
6519       && TREE_TYPE (rhs) != boolean_type_node)
6520     {
6521       warning (OPT_Wparentheses,
6522 	       "suggest parentheses around assignment used as truth value");
6523       TREE_NO_WARNING (rhs) = 1;
6524     }
6525 
6526   return perform_implicit_conversion (strip_top_quals (type), rhs);
6527 }
6528 
6529 /* Convert RHS to be of type TYPE.
6530    If EXP is nonzero, it is the target of the initialization.
6531    ERRTYPE is a string to use in error messages.
6532 
6533    Two major differences between the behavior of
6534    `convert_for_assignment' and `convert_for_initialization'
6535    are that references are bashed in the former, while
6536    copied in the latter, and aggregates are assigned in
6537    the former (operator=) while initialized in the
6538    latter (X(X&)).
6539 
6540    If using constructor make sure no conversion operator exists, if one does
6541    exist, an ambiguity exists.
6542 
6543    If flags doesn't include LOOKUP_COMPLAIN, don't complain about anything.  */
6544 
6545 tree
convert_for_initialization(tree exp,tree type,tree rhs,int flags,const char * errtype,tree fndecl,int parmnum)6546 convert_for_initialization (tree exp, tree type, tree rhs, int flags,
6547 			    const char *errtype, tree fndecl, int parmnum)
6548 {
6549   enum tree_code codel = TREE_CODE (type);
6550   tree rhstype;
6551   enum tree_code coder;
6552 
6553   /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
6554      Strip such NOP_EXPRs, since RHS is used in non-lvalue context.  */
6555   if (TREE_CODE (rhs) == NOP_EXPR
6556       && TREE_TYPE (rhs) == TREE_TYPE (TREE_OPERAND (rhs, 0))
6557       && codel != REFERENCE_TYPE)
6558     rhs = TREE_OPERAND (rhs, 0);
6559 
6560   if (type == error_mark_node
6561       || rhs == error_mark_node
6562       || (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node))
6563     return error_mark_node;
6564 
6565   if ((TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
6566        && TREE_CODE (type) != ARRAY_TYPE
6567        && (TREE_CODE (type) != REFERENCE_TYPE
6568 	   || TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
6569       || (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE
6570 	  && (TREE_CODE (type) != REFERENCE_TYPE
6571 	      || TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE))
6572       || TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE)
6573     rhs = decay_conversion (rhs);
6574 
6575   rhstype = TREE_TYPE (rhs);
6576   coder = TREE_CODE (rhstype);
6577 
6578   if (coder == ERROR_MARK)
6579     return error_mark_node;
6580 
6581   /* We accept references to incomplete types, so we can
6582      return here before checking if RHS is of complete type.  */
6583 
6584   if (codel == REFERENCE_TYPE)
6585     {
6586       /* This should eventually happen in convert_arguments.  */
6587       int savew = 0, savee = 0;
6588 
6589       if (fndecl)
6590 	savew = warningcount, savee = errorcount;
6591       rhs = initialize_reference (type, rhs, /*decl=*/NULL_TREE,
6592 				  /*cleanup=*/NULL);
6593       if (fndecl)
6594 	{
6595 	  if (warningcount > savew)
6596 	    warning (0, "in passing argument %P of %q+D", parmnum, fndecl);
6597 	  else if (errorcount > savee)
6598 	    error ("in passing argument %P of %q+D", parmnum, fndecl);
6599 	}
6600       return rhs;
6601     }
6602 
6603   if (exp != 0)
6604     exp = require_complete_type (exp);
6605   if (exp == error_mark_node)
6606     return error_mark_node;
6607 
6608   rhstype = non_reference (rhstype);
6609 
6610   type = complete_type (type);
6611 
6612   if (IS_AGGR_TYPE (type))
6613     return ocp_convert (type, rhs, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
6614 
6615   return convert_for_assignment (type, rhs, errtype, fndecl, parmnum);
6616 }
6617 
6618 /* If RETVAL is the address of, or a reference to, a local variable or
6619    temporary give an appropriate warning.  */
6620 
6621 static void
maybe_warn_about_returning_address_of_local(tree retval)6622 maybe_warn_about_returning_address_of_local (tree retval)
6623 {
6624   tree valtype = TREE_TYPE (DECL_RESULT (current_function_decl));
6625   tree whats_returned = retval;
6626 
6627   for (;;)
6628     {
6629       if (TREE_CODE (whats_returned) == COMPOUND_EXPR)
6630 	whats_returned = TREE_OPERAND (whats_returned, 1);
6631       else if (TREE_CODE (whats_returned) == CONVERT_EXPR
6632 	       || TREE_CODE (whats_returned) == NON_LVALUE_EXPR
6633 	       || TREE_CODE (whats_returned) == NOP_EXPR)
6634 	whats_returned = TREE_OPERAND (whats_returned, 0);
6635       else
6636 	break;
6637     }
6638 
6639   if (TREE_CODE (whats_returned) != ADDR_EXPR)
6640     return;
6641   whats_returned = TREE_OPERAND (whats_returned, 0);
6642 
6643   if (TREE_CODE (valtype) == REFERENCE_TYPE)
6644     {
6645       if (TREE_CODE (whats_returned) == AGGR_INIT_EXPR
6646 	  || TREE_CODE (whats_returned) == TARGET_EXPR)
6647 	{
6648 	  warning (0, "returning reference to temporary");
6649 	  return;
6650 	}
6651       if (TREE_CODE (whats_returned) == VAR_DECL
6652 	  && DECL_NAME (whats_returned)
6653 	  && TEMP_NAME_P (DECL_NAME (whats_returned)))
6654 	{
6655 	  warning (0, "reference to non-lvalue returned");
6656 	  return;
6657 	}
6658     }
6659 
6660   while (TREE_CODE (whats_returned) == COMPONENT_REF
6661 	 || TREE_CODE (whats_returned) == ARRAY_REF)
6662     whats_returned = TREE_OPERAND (whats_returned, 0);
6663 
6664   if (DECL_P (whats_returned)
6665       && DECL_NAME (whats_returned)
6666       && DECL_FUNCTION_SCOPE_P (whats_returned)
6667       && !(TREE_STATIC (whats_returned)
6668 	   || TREE_PUBLIC (whats_returned)))
6669     {
6670       if (TREE_CODE (valtype) == REFERENCE_TYPE)
6671 	warning (0, "reference to local variable %q+D returned",
6672 		 whats_returned);
6673       /* APPLE LOCAL begin blocks 6040305 (cn) */
6674       else if (TREE_CODE (valtype) == BLOCK_POINTER_TYPE)
6675 	error ("returning block that lives on the local stack");
6676       /* APPLE LOCAL end blocks 6040305 (cn) */
6677       else
6678 	warning (0, "address of local variable %q+D returned",
6679 		 whats_returned);
6680       return;
6681     }
6682 }
6683 
6684 /* APPLE LOCAL begin blocks 6040305 (cm) */
6685 static bool
types_are_block_compatible(tree t1,tree t2)6686 types_are_block_compatible (tree t1, tree t2)
6687 {
6688   return comptypes (t1, t2, COMPARE_STRICT);
6689 }
6690 /* APPLE LOCAL end blocks 6040305 (cm) */
6691 
6692 /* Check that returning RETVAL from the current function is valid.
6693    Return an expression explicitly showing all conversions required to
6694    change RETVAL into the function return type, and to assign it to
6695    the DECL_RESULT for the function.  Set *NO_WARNING to true if
6696    code reaches end of non-void function warning shouldn't be issued
6697    on this RETURN_EXPR.  */
6698 
6699 tree
check_return_expr(tree retval,bool * no_warning)6700 check_return_expr (tree retval, bool *no_warning)
6701 {
6702   tree result;
6703   /* The type actually returned by the function, after any
6704      promotions.  */
6705   tree valtype;
6706   int fn_returns_value_p;
6707 
6708   *no_warning = false;
6709 
6710   /* A `volatile' function is one that isn't supposed to return, ever.
6711      (This is a G++ extension, used to get better code for functions
6712      that call the `volatile' function.)  */
6713   if (TREE_THIS_VOLATILE (current_function_decl))
6714     warning (0, "function declared %<noreturn%> has a %<return%> statement");
6715 
6716   /* Check for various simple errors.  */
6717   if (DECL_DESTRUCTOR_P (current_function_decl))
6718     {
6719       if (retval)
6720 	error ("returning a value from a destructor");
6721       return NULL_TREE;
6722     }
6723   else if (DECL_CONSTRUCTOR_P (current_function_decl))
6724     {
6725       if (in_function_try_handler)
6726 	/* If a return statement appears in a handler of the
6727 	   function-try-block of a constructor, the program is ill-formed.  */
6728 	error ("cannot return from a handler of a function-try-block of a constructor");
6729       else if (retval)
6730 	/* You can't return a value from a constructor.  */
6731 	error ("returning a value from a constructor");
6732       return NULL_TREE;
6733     }
6734 
6735   /* APPLE LOCAL begin blocks 6040305 (cm) */
6736   /* APPLE LOCAL radar 6185344 */
6737   if (cur_block && !cur_block->block_has_return_type)
6738     {
6739       /* If this is the first return we've seen in the block, infer the type of
6740    the block from it. */
6741       if (cur_block->return_type == NULL_TREE)
6742   {
6743     if (retval)
6744       {
6745 	 tree restype;
6746 	 retval = decay_conversion (retval);
6747 	 restype = TYPE_MAIN_VARIANT (TREE_TYPE (retval));
6748 	 TREE_TYPE (current_function_decl)
6749       = build_function_type (restype,
6750 		       TYPE_ARG_TYPES (TREE_TYPE (current_function_decl)));
6751 	 TREE_TYPE (DECL_RESULT (current_function_decl)) = restype;
6752 	 relayout_decl (DECL_RESULT (current_function_decl));
6753 	 cur_block->return_type = restype;
6754       }
6755     else
6756       cur_block->return_type = void_type_node;
6757   }
6758 
6759       /* Verify that this result type matches the previous one.  We
6760    are pickier with blocks than for normal functions because
6761    this is a new feature and we set the rules. */
6762       if (TREE_CODE (cur_block->return_type) == VOID_TYPE)
6763   {
6764     if (retval)
6765       {
6766 	 error ("void block should not return a value");
6767 	 return error_mark_node;
6768       }
6769   }
6770       else if (!retval)
6771   {
6772     error ("non-void block should return a value");
6773     return error_mark_node;
6774   }
6775 
6776       if (retval)
6777   {
6778     /* We have a non-void block with an expression, continue checking.  */
6779     valtype = TREE_TYPE (retval);
6780 
6781     /* For now, restrict multiple return statements in a block to have
6782 	strict compatible types only. */
6783     if (!types_are_block_compatible (cur_block->return_type, valtype))
6784       {
6785 	 error ("incompatible type returning %qT, expected %qT",
6786 	    valtype, cur_block->return_type);
6787 	 return error_mark_node;
6788       }
6789   }
6790     }
6791   /* APPLE LOCAL end blocks 6040305 (cm) */
6792 
6793   if (processing_template_decl)
6794     {
6795       current_function_returns_value = 1;
6796       return retval;
6797     }
6798 
6799   /* When no explicit return-value is given in a function with a named
6800      return value, the named return value is used.  */
6801   result = DECL_RESULT (current_function_decl);
6802   valtype = TREE_TYPE (result);
6803   gcc_assert (valtype != NULL_TREE);
6804   fn_returns_value_p = !VOID_TYPE_P (valtype);
6805   if (!retval && DECL_NAME (result) && fn_returns_value_p)
6806     retval = result;
6807 
6808   /* Check for a return statement with no return value in a function
6809      that's supposed to return a value.  */
6810   if (!retval && fn_returns_value_p)
6811     {
6812       pedwarn ("return-statement with no value, in function returning %qT",
6813 	       valtype);
6814       /* Clear this, so finish_function won't say that we reach the
6815 	 end of a non-void function (which we don't, we gave a
6816 	 return!).  */
6817       current_function_returns_null = 0;
6818       /* And signal caller that TREE_NO_WARNING should be set on the
6819 	 RETURN_EXPR to avoid control reaches end of non-void function
6820 	 warnings in tree-cfg.c.  */
6821       *no_warning = true;
6822     }
6823   /* Check for a return statement with a value in a function that
6824      isn't supposed to return a value.  */
6825   else if (retval && !fn_returns_value_p)
6826     {
6827       if (VOID_TYPE_P (TREE_TYPE (retval)))
6828 	/* You can return a `void' value from a function of `void'
6829 	   type.  In that case, we have to evaluate the expression for
6830 	   its side-effects.  */
6831 	  finish_expr_stmt (retval);
6832       else
6833 	pedwarn ("return-statement with a value, in function "
6834 		 "returning 'void'");
6835 
6836       current_function_returns_null = 1;
6837 
6838       /* There's really no value to return, after all.  */
6839       return NULL_TREE;
6840     }
6841   else if (!retval)
6842     /* Remember that this function can sometimes return without a
6843        value.  */
6844     current_function_returns_null = 1;
6845   else
6846     /* Remember that this function did return a value.  */
6847     current_function_returns_value = 1;
6848 
6849   /* Check for erroneous operands -- but after giving ourselves a
6850      chance to provide an error about returning a value from a void
6851      function.  */
6852   if (error_operand_p (retval))
6853     {
6854       current_function_return_value = error_mark_node;
6855       return error_mark_node;
6856     }
6857 
6858   /* Only operator new(...) throw(), can return NULL [expr.new/13].  */
6859   if ((DECL_OVERLOADED_OPERATOR_P (current_function_decl) == NEW_EXPR
6860        || DECL_OVERLOADED_OPERATOR_P (current_function_decl) == VEC_NEW_EXPR)
6861       && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl))
6862       && ! flag_check_new
6863       && null_ptr_cst_p (retval))
6864     warning (0, "%<operator new%> must not return NULL unless it is "
6865 	     "declared %<throw()%> (or -fcheck-new is in effect)");
6866 
6867   /* Effective C++ rule 15.  See also start_function.  */
6868   if (warn_ecpp
6869       && DECL_NAME (current_function_decl) == ansi_assopname(NOP_EXPR))
6870     {
6871       bool warn = true;
6872 
6873       /* The function return type must be a reference to the current
6874 	class.  */
6875       if (TREE_CODE (valtype) == REFERENCE_TYPE
6876 	  && same_type_ignoring_top_level_qualifiers_p
6877 	      (TREE_TYPE (valtype), TREE_TYPE (current_class_ref)))
6878 	{
6879 	  /* Returning '*this' is obviously OK.  */
6880 	  if (retval == current_class_ref)
6881 	    warn = false;
6882 	  /* If we are calling a function whose return type is the same of
6883 	     the current class reference, it is ok.  */
6884 	  else if (TREE_CODE (retval) == INDIRECT_REF
6885 		   && TREE_CODE (TREE_OPERAND (retval, 0)) == CALL_EXPR)
6886 	    warn = false;
6887 	}
6888 
6889       if (warn)
6890 	warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
6891     }
6892 
6893   /* The fabled Named Return Value optimization, as per [class.copy]/15:
6894 
6895      [...]      For  a function with a class return type, if the expression
6896      in the return statement is the name of a local  object,  and  the  cv-
6897      unqualified  type  of  the  local  object  is the same as the function
6898      return type, an implementation is permitted to omit creating the  tem-
6899      porary  object  to  hold  the function return value [...]
6900 
6901      So, if this is a value-returning function that always returns the same
6902      local variable, remember it.
6903 
6904      It might be nice to be more flexible, and choose the first suitable
6905      variable even if the function sometimes returns something else, but
6906      then we run the risk of clobbering the variable we chose if the other
6907      returned expression uses the chosen variable somehow.  And people expect
6908      this restriction, anyway.  (jason 2000-11-19)
6909 
6910      See finish_function and finalize_nrv for the rest of this optimization.  */
6911 
6912   if (fn_returns_value_p && flag_elide_constructors)
6913     {
6914       if (retval != NULL_TREE
6915 	  && (current_function_return_value == NULL_TREE
6916 	      || current_function_return_value == retval)
6917 	  && TREE_CODE (retval) == VAR_DECL
6918 	  && DECL_CONTEXT (retval) == current_function_decl
6919 	  && ! TREE_STATIC (retval)
6920 	  && ! DECL_ANON_UNION_VAR_P (retval)
6921 	  && (DECL_ALIGN (retval)
6922 	      >= DECL_ALIGN (DECL_RESULT (current_function_decl)))
6923 	  && same_type_p ((TYPE_MAIN_VARIANT
6924 			   (TREE_TYPE (retval))),
6925 			  (TYPE_MAIN_VARIANT
6926 			   (TREE_TYPE (TREE_TYPE (current_function_decl))))))
6927 	current_function_return_value = retval;
6928       else
6929 	current_function_return_value = error_mark_node;
6930     }
6931 
6932   /* We don't need to do any conversions when there's nothing being
6933      returned.  */
6934   if (!retval)
6935     return NULL_TREE;
6936 
6937   /* Do any required conversions.  */
6938   if (retval == result || DECL_CONSTRUCTOR_P (current_function_decl))
6939     /* No conversions are required.  */
6940     ;
6941   else
6942     {
6943       /* The type the function is declared to return.  */
6944       tree functype = TREE_TYPE (TREE_TYPE (current_function_decl));
6945 
6946       /* The functype's return type will have been set to void, if it
6947 	 was an incomplete type.  Just treat this as 'return;' */
6948       if (VOID_TYPE_P (functype))
6949 	return error_mark_node;
6950 
6951       /* First convert the value to the function's return type, then
6952 	 to the type of return value's location to handle the
6953 	 case that functype is smaller than the valtype.  */
6954       retval = convert_for_initialization
6955 	(NULL_TREE, functype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
6956 	 "return", NULL_TREE, 0);
6957       retval = convert (valtype, retval);
6958 
6959       /* If the conversion failed, treat this just like `return;'.  */
6960       if (retval == error_mark_node)
6961 	return retval;
6962       /* We can't initialize a register from a AGGR_INIT_EXPR.  */
6963       else if (! current_function_returns_struct
6964 	       && TREE_CODE (retval) == TARGET_EXPR
6965 	       && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR)
6966 	retval = build2 (COMPOUND_EXPR, TREE_TYPE (retval), retval,
6967 			 TREE_OPERAND (retval, 0));
6968       else
6969 	maybe_warn_about_returning_address_of_local (retval);
6970     }
6971 
6972   /* Actually copy the value returned into the appropriate location.  */
6973   if (retval && retval != result)
6974     retval = build2 (INIT_EXPR, TREE_TYPE (result), result, retval);
6975 
6976   return retval;
6977 }
6978 
6979 
6980 /* Returns nonzero if the pointer-type FROM can be converted to the
6981    pointer-type TO via a qualification conversion.  If CONSTP is -1,
6982    then we return nonzero if the pointers are similar, and the
6983    cv-qualification signature of FROM is a proper subset of that of TO.
6984 
6985    If CONSTP is positive, then all outer pointers have been
6986    const-qualified.  */
6987 
6988 static int
comp_ptr_ttypes_real(tree to,tree from,int constp)6989 comp_ptr_ttypes_real (tree to, tree from, int constp)
6990 {
6991   bool to_more_cv_qualified = false;
6992 
6993   for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6994     {
6995       if (TREE_CODE (to) != TREE_CODE (from))
6996 	return 0;
6997 
6998       if (TREE_CODE (from) == OFFSET_TYPE
6999 	  && !same_type_p (TYPE_OFFSET_BASETYPE (from),
7000 			   TYPE_OFFSET_BASETYPE (to)))
7001 	return 0;
7002 
7003       /* Const and volatile mean something different for function types,
7004 	 so the usual checks are not appropriate.  */
7005       if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
7006 	{
7007 	  /* In Objective-C++, some types may have been 'volatilized' by
7008 	     the compiler for EH; when comparing them here, the volatile
7009 	     qualification must be ignored.  */
7010 	  bool objc_quals_match = objc_type_quals_match (to, from);
7011 
7012 	  if (!at_least_as_qualified_p (to, from) && !objc_quals_match)
7013 	    return 0;
7014 
7015 	  if (!at_least_as_qualified_p (from, to) && !objc_quals_match)
7016 	    {
7017 	      if (constp == 0)
7018 		return 0;
7019 	      to_more_cv_qualified = true;
7020 	    }
7021 
7022 	  if (constp > 0)
7023 	    constp &= TYPE_READONLY (to);
7024 	}
7025 
7026       if (TREE_CODE (to) != POINTER_TYPE && !TYPE_PTRMEM_P (to))
7027 	return ((constp >= 0 || to_more_cv_qualified)
7028 		&& same_type_ignoring_top_level_qualifiers_p (to, from));
7029     }
7030 }
7031 
7032 /* When comparing, say, char ** to char const **, this function takes
7033    the 'char *' and 'char const *'.  Do not pass non-pointer/reference
7034    types to this function.  */
7035 
7036 int
comp_ptr_ttypes(tree to,tree from)7037 comp_ptr_ttypes (tree to, tree from)
7038 {
7039   return comp_ptr_ttypes_real (to, from, 1);
7040 }
7041 
7042 /* Returns 1 if to and from are (possibly multi-level) pointers to the same
7043    type or inheritance-related types, regardless of cv-quals.  */
7044 
7045 int
ptr_reasonably_similar(tree to,tree from)7046 ptr_reasonably_similar (tree to, tree from)
7047 {
7048   for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
7049     {
7050       /* Any target type is similar enough to void.  */
7051       if (TREE_CODE (to) == VOID_TYPE
7052 	  || TREE_CODE (from) == VOID_TYPE)
7053 	return 1;
7054 
7055       if (TREE_CODE (to) != TREE_CODE (from))
7056 	return 0;
7057 
7058       if (TREE_CODE (from) == OFFSET_TYPE
7059 	  && comptypes (TYPE_OFFSET_BASETYPE (to),
7060 			TYPE_OFFSET_BASETYPE (from),
7061 			COMPARE_BASE | COMPARE_DERIVED))
7062 	continue;
7063 
7064       if (TREE_CODE (to) == VECTOR_TYPE
7065 	  && vector_types_convertible_p (to, from, false))
7066 	return 1;
7067 
7068       if (TREE_CODE (to) == INTEGER_TYPE
7069 	  && TYPE_PRECISION (to) == TYPE_PRECISION (from))
7070 	return 1;
7071 
7072       if (TREE_CODE (to) == FUNCTION_TYPE)
7073 	return 1;
7074 
7075       if (TREE_CODE (to) != POINTER_TYPE)
7076 	return comptypes
7077 	  (TYPE_MAIN_VARIANT (to), TYPE_MAIN_VARIANT (from),
7078 	   COMPARE_BASE | COMPARE_DERIVED);
7079     }
7080 }
7081 
7082 /* Return true if TO and FROM (both of which are POINTER_TYPEs or
7083    pointer-to-member types) are the same, ignoring cv-qualification at
7084    all levels.  */
7085 
7086 bool
comp_ptr_ttypes_const(tree to,tree from)7087 comp_ptr_ttypes_const (tree to, tree from)
7088 {
7089   for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
7090     {
7091       if (TREE_CODE (to) != TREE_CODE (from))
7092 	return false;
7093 
7094       if (TREE_CODE (from) == OFFSET_TYPE
7095 	  && same_type_p (TYPE_OFFSET_BASETYPE (from),
7096 			  TYPE_OFFSET_BASETYPE (to)))
7097 	  continue;
7098 
7099       if (TREE_CODE (to) != POINTER_TYPE)
7100 	return same_type_ignoring_top_level_qualifiers_p (to, from);
7101     }
7102 }
7103 
7104 /* Returns the type qualifiers for this type, including the qualifiers on the
7105    elements for an array type.  */
7106 
7107 int
cp_type_quals(tree type)7108 cp_type_quals (tree type)
7109 {
7110   type = strip_array_types (type);
7111   if (type == error_mark_node)
7112     return TYPE_UNQUALIFIED;
7113   return TYPE_QUALS (type);
7114 }
7115 
7116 /* Returns nonzero if the TYPE is const from a C++ perspective: look inside
7117    arrays.  */
7118 
7119 bool
cp_type_readonly(tree type)7120 cp_type_readonly (tree type)
7121 {
7122   type = strip_array_types (type);
7123   return TYPE_READONLY (type);
7124 }
7125 
7126 /* Returns nonzero if the TYPE contains a mutable member.  */
7127 
7128 bool
cp_has_mutable_p(tree type)7129 cp_has_mutable_p (tree type)
7130 {
7131   type = strip_array_types (type);
7132 
7133   return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type);
7134 }
7135 
7136 /* Apply the TYPE_QUALS to the new DECL.  */
7137 void
cp_apply_type_quals_to_decl(int type_quals,tree decl)7138 cp_apply_type_quals_to_decl (int type_quals, tree decl)
7139 {
7140   tree type = TREE_TYPE (decl);
7141 
7142   if (type == error_mark_node)
7143     return;
7144 
7145   if (TREE_CODE (type) == FUNCTION_TYPE
7146       && type_quals != TYPE_UNQUALIFIED)
7147     {
7148       /* This was an error in C++98 (cv-qualifiers cannot be added to
7149 	 a function type), but DR 295 makes the code well-formed by
7150 	 dropping the extra qualifiers. */
7151       if (pedantic)
7152 	{
7153 	  tree bad_type = build_qualified_type (type, type_quals);
7154 	  pedwarn ("ignoring %qV qualifiers added to function type %qT",
7155 		   bad_type, type);
7156 	}
7157 
7158       TREE_TYPE (decl) = TYPE_MAIN_VARIANT (type);
7159       return;
7160     }
7161 
7162   /* Avoid setting TREE_READONLY incorrectly.  */
7163   if (/* If the object has a constructor, the constructor may modify
7164 	 the object.  */
7165       TYPE_NEEDS_CONSTRUCTING (type)
7166       /* If the type isn't complete, we don't know yet if it will need
7167 	 constructing.  */
7168       || !COMPLETE_TYPE_P (type)
7169       /* If the type has a mutable component, that component might be
7170 	 modified.  */
7171       || TYPE_HAS_MUTABLE_P (type))
7172     type_quals &= ~TYPE_QUAL_CONST;
7173 
7174   c_apply_type_quals_to_decl (type_quals, decl);
7175 }
7176 
7177 /* Subroutine of casts_away_constness.  Make T1 and T2 point at
7178    exemplar types such that casting T1 to T2 is casting away constness
7179    if and only if there is no implicit conversion from T1 to T2.  */
7180 
7181 static void
casts_away_constness_r(tree * t1,tree * t2)7182 casts_away_constness_r (tree *t1, tree *t2)
7183 {
7184   int quals1;
7185   int quals2;
7186 
7187   /* [expr.const.cast]
7188 
7189      For multi-level pointer to members and multi-level mixed pointers
7190      and pointers to members (conv.qual), the "member" aspect of a
7191      pointer to member level is ignored when determining if a const
7192      cv-qualifier has been cast away.  */
7193   /* [expr.const.cast]
7194 
7195      For  two  pointer types:
7196 
7197 	    X1 is T1cv1,1 * ... cv1,N *   where T1 is not a pointer type
7198 	    X2 is T2cv2,1 * ... cv2,M *   where T2 is not a pointer type
7199 	    K is min(N,M)
7200 
7201      casting from X1 to X2 casts away constness if, for a non-pointer
7202      type T there does not exist an implicit conversion (clause
7203      _conv_) from:
7204 
7205 	    Tcv1,(N-K+1) * cv1,(N-K+2) * ... cv1,N *
7206 
7207      to
7208 
7209 	    Tcv2,(M-K+1) * cv2,(M-K+2) * ... cv2,M *.  */
7210   if ((!TYPE_PTR_P (*t1) && !TYPE_PTRMEM_P (*t1))
7211       || (!TYPE_PTR_P (*t2) && !TYPE_PTRMEM_P (*t2)))
7212     {
7213       *t1 = cp_build_qualified_type (void_type_node,
7214 				     cp_type_quals (*t1));
7215       *t2 = cp_build_qualified_type (void_type_node,
7216 				     cp_type_quals (*t2));
7217       return;
7218     }
7219 
7220   quals1 = cp_type_quals (*t1);
7221   quals2 = cp_type_quals (*t2);
7222 
7223   if (TYPE_PTRMEM_P (*t1))
7224     *t1 = TYPE_PTRMEM_POINTED_TO_TYPE (*t1);
7225   else
7226     *t1 = TREE_TYPE (*t1);
7227   if (TYPE_PTRMEM_P (*t2))
7228     *t2 = TYPE_PTRMEM_POINTED_TO_TYPE (*t2);
7229   else
7230     *t2 = TREE_TYPE (*t2);
7231 
7232   casts_away_constness_r (t1, t2);
7233   *t1 = build_pointer_type (*t1);
7234   *t2 = build_pointer_type (*t2);
7235   *t1 = cp_build_qualified_type (*t1, quals1);
7236   *t2 = cp_build_qualified_type (*t2, quals2);
7237 }
7238 
7239 /* Returns nonzero if casting from TYPE1 to TYPE2 casts away
7240    constness.  */
7241 
7242 static bool
casts_away_constness(tree t1,tree t2)7243 casts_away_constness (tree t1, tree t2)
7244 {
7245   if (TREE_CODE (t2) == REFERENCE_TYPE)
7246     {
7247       /* [expr.const.cast]
7248 
7249 	 Casting from an lvalue of type T1 to an lvalue of type T2
7250 	 using a reference cast casts away constness if a cast from an
7251 	 rvalue of type "pointer to T1" to the type "pointer to T2"
7252 	 casts away constness.  */
7253       t1 = (TREE_CODE (t1) == REFERENCE_TYPE ? TREE_TYPE (t1) : t1);
7254       return casts_away_constness (build_pointer_type (t1),
7255 				   build_pointer_type (TREE_TYPE (t2)));
7256     }
7257 
7258   if (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
7259     /* [expr.const.cast]
7260 
7261        Casting from an rvalue of type "pointer to data member of X
7262        of type T1" to the type "pointer to data member of Y of type
7263        T2" casts away constness if a cast from an rvalue of type
7264        "pointer to T1" to the type "pointer to T2" casts away
7265        constness.  */
7266     return casts_away_constness
7267       (build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t1)),
7268        build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t2)));
7269 
7270   /* Casting away constness is only something that makes sense for
7271      pointer or reference types.  */
7272   if (TREE_CODE (t1) != POINTER_TYPE
7273       || TREE_CODE (t2) != POINTER_TYPE)
7274     return false;
7275 
7276   /* Top-level qualifiers don't matter.  */
7277   t1 = TYPE_MAIN_VARIANT (t1);
7278   t2 = TYPE_MAIN_VARIANT (t2);
7279   casts_away_constness_r (&t1, &t2);
7280   if (!can_convert (t2, t1))
7281     return true;
7282 
7283   return false;
7284 }
7285 
7286 /* If T is a REFERENCE_TYPE return the type to which T refers.
7287    Otherwise, return T itself.  */
7288 
7289 tree
non_reference(tree t)7290 non_reference (tree t)
7291 {
7292   if (TREE_CODE (t) == REFERENCE_TYPE)
7293     t = TREE_TYPE (t);
7294   return t;
7295 }
7296 
7297 
7298 /* Return nonzero if REF is an lvalue valid for this language;
7299    otherwise, print an error message and return zero.  USE says
7300    how the lvalue is being used and so selects the error message.  */
7301 
7302 int
lvalue_or_else(tree ref,enum lvalue_use use)7303 lvalue_or_else (tree ref, enum lvalue_use use)
7304 {
7305   int win = lvalue_p (ref);
7306 
7307   if (!win)
7308     lvalue_error (use);
7309 
7310   return win;
7311 }
7312