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