1 /* Evaluate expressions for GDB.
2 
3    Copyright (C) 1986-2021 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19 
20 #include "defs.h"
21 #include "symtab.h"
22 #include "gdbtypes.h"
23 #include "value.h"
24 #include "expression.h"
25 #include "target.h"
26 #include "frame.h"
27 #include "gdbthread.h"
28 #include "language.h"		/* For CAST_IS_CONVERSION.  */
29 #include "cp-abi.h"
30 #include "infcall.h"
31 #include "objc-lang.h"
32 #include "block.h"
33 #include "parser-defs.h"
34 #include "cp-support.h"
35 #include "ui-out.h"
36 #include "regcache.h"
37 #include "user-regs.h"
38 #include "valprint.h"
39 #include "gdb_obstack.h"
40 #include "objfiles.h"
41 #include "typeprint.h"
42 #include <ctype.h>
43 #include "expop.h"
44 #include "c-exp.h"
45 #include "inferior.h"
46 
47 
48 /* Parse the string EXP as a C expression, evaluate it,
49    and return the result as a number.  */
50 
51 CORE_ADDR
parse_and_eval_address(const char * exp)52 parse_and_eval_address (const char *exp)
53 {
54   expression_up expr = parse_expression (exp);
55 
56   return value_as_address (evaluate_expression (expr.get ()));
57 }
58 
59 /* Like parse_and_eval_address, but treats the value of the expression
60    as an integer, not an address, returns a LONGEST, not a CORE_ADDR.  */
61 LONGEST
parse_and_eval_long(const char * exp)62 parse_and_eval_long (const char *exp)
63 {
64   expression_up expr = parse_expression (exp);
65 
66   return value_as_long (evaluate_expression (expr.get ()));
67 }
68 
69 struct value *
parse_and_eval(const char * exp)70 parse_and_eval (const char *exp)
71 {
72   expression_up expr = parse_expression (exp);
73 
74   return evaluate_expression (expr.get ());
75 }
76 
77 /* Parse up to a comma (or to a closeparen)
78    in the string EXPP as an expression, evaluate it, and return the value.
79    EXPP is advanced to point to the comma.  */
80 
81 struct value *
parse_to_comma_and_eval(const char ** expp)82 parse_to_comma_and_eval (const char **expp)
83 {
84   expression_up expr = parse_exp_1 (expp, 0, nullptr, 1);
85 
86   return evaluate_expression (expr.get ());
87 }
88 
89 
90 /* See expression.h.  */
91 
92 struct value *
evaluate(struct type * expect_type,enum noside noside)93 expression::evaluate (struct type *expect_type, enum noside noside)
94 {
95   gdb::optional<enable_thread_stack_temporaries> stack_temporaries;
96   if (target_has_execution () && inferior_ptid != null_ptid
97       && language_defn->la_language == language_cplus
98       && !thread_stack_temporaries_enabled_p (inferior_thread ()))
99     stack_temporaries.emplace (inferior_thread ());
100 
101   struct value *retval = op->evaluate (expect_type, this, noside);
102 
103   if (stack_temporaries.has_value ()
104       && value_in_thread_stack_temporaries (retval, inferior_thread ()))
105     retval = value_non_lval (retval);
106 
107   return retval;
108 }
109 
110 /* See value.h.  */
111 
112 struct value *
evaluate_expression(struct expression * exp,struct type * expect_type)113 evaluate_expression (struct expression *exp, struct type *expect_type)
114 {
115   return exp->evaluate (expect_type, EVAL_NORMAL);
116 }
117 
118 /* Evaluate an expression, avoiding all memory references
119    and getting a value whose type alone is correct.  */
120 
121 struct value *
evaluate_type(struct expression * exp)122 evaluate_type (struct expression *exp)
123 {
124   return exp->evaluate (nullptr, EVAL_AVOID_SIDE_EFFECTS);
125 }
126 
127 /* Find the current value of a watchpoint on EXP.  Return the value in
128    *VALP and *RESULTP and the chain of intermediate and final values
129    in *VAL_CHAIN.  RESULTP and VAL_CHAIN may be NULL if the caller does
130    not need them.
131 
132    If PRESERVE_ERRORS is true, then exceptions are passed through.
133    Otherwise, if PRESERVE_ERRORS is false, then if a memory error
134    occurs while evaluating the expression, *RESULTP will be set to
135    NULL.  *RESULTP may be a lazy value, if the result could not be
136    read from memory.  It is used to determine whether a value is
137    user-specified (we should watch the whole value) or intermediate
138    (we should watch only the bit used to locate the final value).
139 
140    If the final value, or any intermediate value, could not be read
141    from memory, *VALP will be set to NULL.  *VAL_CHAIN will still be
142    set to any referenced values.  *VALP will never be a lazy value.
143    This is the value which we store in struct breakpoint.
144 
145    If VAL_CHAIN is non-NULL, the values put into *VAL_CHAIN will be
146    released from the value chain.  If VAL_CHAIN is NULL, all generated
147    values will be left on the value chain.  */
148 
149 void
fetch_subexp_value(struct expression * exp,expr::operation * op,struct value ** valp,struct value ** resultp,std::vector<value_ref_ptr> * val_chain,bool preserve_errors)150 fetch_subexp_value (struct expression *exp,
151 		    expr::operation *op,
152 		    struct value **valp, struct value **resultp,
153 		    std::vector<value_ref_ptr> *val_chain,
154 		    bool preserve_errors)
155 {
156   struct value *mark, *new_mark, *result;
157 
158   *valp = NULL;
159   if (resultp)
160     *resultp = NULL;
161   if (val_chain)
162     val_chain->clear ();
163 
164   /* Evaluate the expression.  */
165   mark = value_mark ();
166   result = NULL;
167 
168   try
169     {
170       result = op->evaluate (nullptr, exp, EVAL_NORMAL);
171     }
172   catch (const gdb_exception &ex)
173     {
174       /* Ignore memory errors if we want watchpoints pointing at
175 	 inaccessible memory to still be created; otherwise, throw the
176 	 error to some higher catcher.  */
177       switch (ex.error)
178 	{
179 	case MEMORY_ERROR:
180 	  if (!preserve_errors)
181 	    break;
182 	  /* Fall through.  */
183 	default:
184 	  throw;
185 	  break;
186 	}
187     }
188 
189   new_mark = value_mark ();
190   if (mark == new_mark)
191     return;
192   if (resultp)
193     *resultp = result;
194 
195   /* Make sure it's not lazy, so that after the target stops again we
196      have a non-lazy previous value to compare with.  */
197   if (result != NULL)
198     {
199       if (!value_lazy (result))
200 	*valp = result;
201       else
202 	{
203 
204 	  try
205 	    {
206 	      value_fetch_lazy (result);
207 	      *valp = result;
208 	    }
209 	  catch (const gdb_exception_error &except)
210 	    {
211 	    }
212 	}
213     }
214 
215   if (val_chain)
216     {
217       /* Return the chain of intermediate values.  We use this to
218 	 decide which addresses to watch.  */
219       *val_chain = value_release_to_mark (mark);
220     }
221 }
222 
223 /* Promote value ARG1 as appropriate before performing a unary operation
224    on this argument.
225    If the result is not appropriate for any particular language then it
226    needs to patch this function.  */
227 
228 void
unop_promote(const struct language_defn * language,struct gdbarch * gdbarch,struct value ** arg1)229 unop_promote (const struct language_defn *language, struct gdbarch *gdbarch,
230 	      struct value **arg1)
231 {
232   struct type *type1;
233 
234   *arg1 = coerce_ref (*arg1);
235   type1 = check_typedef (value_type (*arg1));
236 
237   if (is_integral_type (type1))
238     {
239       switch (language->la_language)
240 	{
241 	default:
242 	  /* Perform integral promotion for ANSI C/C++.
243 	     If not appropriate for any particular language
244 	     it needs to modify this function.  */
245 	  {
246 	    struct type *builtin_int = builtin_type (gdbarch)->builtin_int;
247 
248 	    if (TYPE_LENGTH (type1) < TYPE_LENGTH (builtin_int))
249 	      *arg1 = value_cast (builtin_int, *arg1);
250 	  }
251 	  break;
252 	}
253     }
254 }
255 
256 /* Promote values ARG1 and ARG2 as appropriate before performing a binary
257    operation on those two operands.
258    If the result is not appropriate for any particular language then it
259    needs to patch this function.  */
260 
261 void
binop_promote(const struct language_defn * language,struct gdbarch * gdbarch,struct value ** arg1,struct value ** arg2)262 binop_promote (const struct language_defn *language, struct gdbarch *gdbarch,
263 	       struct value **arg1, struct value **arg2)
264 {
265   struct type *promoted_type = NULL;
266   struct type *type1;
267   struct type *type2;
268 
269   *arg1 = coerce_ref (*arg1);
270   *arg2 = coerce_ref (*arg2);
271 
272   type1 = check_typedef (value_type (*arg1));
273   type2 = check_typedef (value_type (*arg2));
274 
275   if ((type1->code () != TYPE_CODE_FLT
276        && type1->code () != TYPE_CODE_DECFLOAT
277        && !is_integral_type (type1))
278       || (type2->code () != TYPE_CODE_FLT
279 	  && type2->code () != TYPE_CODE_DECFLOAT
280 	  && !is_integral_type (type2)))
281     return;
282 
283   if (is_fixed_point_type (type1) || is_fixed_point_type (type2))
284         return;
285 
286   if (type1->code () == TYPE_CODE_DECFLOAT
287       || type2->code () == TYPE_CODE_DECFLOAT)
288     {
289       /* No promotion required.  */
290     }
291   else if (type1->code () == TYPE_CODE_FLT
292 	   || type2->code () == TYPE_CODE_FLT)
293     {
294       switch (language->la_language)
295 	{
296 	case language_c:
297 	case language_cplus:
298 	case language_asm:
299 	case language_objc:
300 	case language_opencl:
301 	  /* No promotion required.  */
302 	  break;
303 
304 	default:
305 	  /* For other languages the result type is unchanged from gdb
306 	     version 6.7 for backward compatibility.
307 	     If either arg was long double, make sure that value is also long
308 	     double.  Otherwise use double.  */
309 	  if (TYPE_LENGTH (type1) * 8 > gdbarch_double_bit (gdbarch)
310 	      || TYPE_LENGTH (type2) * 8 > gdbarch_double_bit (gdbarch))
311 	    promoted_type = builtin_type (gdbarch)->builtin_long_double;
312 	  else
313 	    promoted_type = builtin_type (gdbarch)->builtin_double;
314 	  break;
315 	}
316     }
317   else if (type1->code () == TYPE_CODE_BOOL
318 	   && type2->code () == TYPE_CODE_BOOL)
319     {
320       /* No promotion required.  */
321     }
322   else
323     /* Integral operations here.  */
324     /* FIXME: Also mixed integral/booleans, with result an integer.  */
325     {
326       const struct builtin_type *builtin = builtin_type (gdbarch);
327       unsigned int promoted_len1 = TYPE_LENGTH (type1);
328       unsigned int promoted_len2 = TYPE_LENGTH (type2);
329       int is_unsigned1 = type1->is_unsigned ();
330       int is_unsigned2 = type2->is_unsigned ();
331       unsigned int result_len;
332       int unsigned_operation;
333 
334       /* Determine type length and signedness after promotion for
335 	 both operands.  */
336       if (promoted_len1 < TYPE_LENGTH (builtin->builtin_int))
337 	{
338 	  is_unsigned1 = 0;
339 	  promoted_len1 = TYPE_LENGTH (builtin->builtin_int);
340 	}
341       if (promoted_len2 < TYPE_LENGTH (builtin->builtin_int))
342 	{
343 	  is_unsigned2 = 0;
344 	  promoted_len2 = TYPE_LENGTH (builtin->builtin_int);
345 	}
346 
347       if (promoted_len1 > promoted_len2)
348 	{
349 	  unsigned_operation = is_unsigned1;
350 	  result_len = promoted_len1;
351 	}
352       else if (promoted_len2 > promoted_len1)
353 	{
354 	  unsigned_operation = is_unsigned2;
355 	  result_len = promoted_len2;
356 	}
357       else
358 	{
359 	  unsigned_operation = is_unsigned1 || is_unsigned2;
360 	  result_len = promoted_len1;
361 	}
362 
363       switch (language->la_language)
364 	{
365 	case language_c:
366 	case language_cplus:
367 	case language_asm:
368 	case language_objc:
369 	  if (result_len <= TYPE_LENGTH (builtin->builtin_int))
370 	    {
371 	      promoted_type = (unsigned_operation
372 			       ? builtin->builtin_unsigned_int
373 			       : builtin->builtin_int);
374 	    }
375 	  else if (result_len <= TYPE_LENGTH (builtin->builtin_long))
376 	    {
377 	      promoted_type = (unsigned_operation
378 			       ? builtin->builtin_unsigned_long
379 			       : builtin->builtin_long);
380 	    }
381 	  else
382 	    {
383 	      promoted_type = (unsigned_operation
384 			       ? builtin->builtin_unsigned_long_long
385 			       : builtin->builtin_long_long);
386 	    }
387 	  break;
388 	case language_opencl:
389 	  if (result_len <= TYPE_LENGTH (lookup_signed_typename
390 					 (language, "int")))
391 	    {
392 	      promoted_type =
393 		(unsigned_operation
394 		 ? lookup_unsigned_typename (language, "int")
395 		 : lookup_signed_typename (language, "int"));
396 	    }
397 	  else if (result_len <= TYPE_LENGTH (lookup_signed_typename
398 					      (language, "long")))
399 	    {
400 	      promoted_type =
401 		(unsigned_operation
402 		 ? lookup_unsigned_typename (language, "long")
403 		 : lookup_signed_typename (language,"long"));
404 	    }
405 	  break;
406 	default:
407 	  /* For other languages the result type is unchanged from gdb
408 	     version 6.7 for backward compatibility.
409 	     If either arg was long long, make sure that value is also long
410 	     long.  Otherwise use long.  */
411 	  if (unsigned_operation)
412 	    {
413 	      if (result_len > gdbarch_long_bit (gdbarch) / HOST_CHAR_BIT)
414 		promoted_type = builtin->builtin_unsigned_long_long;
415 	      else
416 		promoted_type = builtin->builtin_unsigned_long;
417 	    }
418 	  else
419 	    {
420 	      if (result_len > gdbarch_long_bit (gdbarch) / HOST_CHAR_BIT)
421 		promoted_type = builtin->builtin_long_long;
422 	      else
423 		promoted_type = builtin->builtin_long;
424 	    }
425 	  break;
426 	}
427     }
428 
429   if (promoted_type)
430     {
431       /* Promote both operands to common type.  */
432       *arg1 = value_cast (promoted_type, *arg1);
433       *arg2 = value_cast (promoted_type, *arg2);
434     }
435 }
436 
437 static int
ptrmath_type_p(const struct language_defn * lang,struct type * type)438 ptrmath_type_p (const struct language_defn *lang, struct type *type)
439 {
440   type = check_typedef (type);
441   if (TYPE_IS_REFERENCE (type))
442     type = TYPE_TARGET_TYPE (type);
443 
444   switch (type->code ())
445     {
446     case TYPE_CODE_PTR:
447     case TYPE_CODE_FUNC:
448       return 1;
449 
450     case TYPE_CODE_ARRAY:
451       return type->is_vector () ? 0 : lang->c_style_arrays_p ();
452 
453     default:
454       return 0;
455     }
456 }
457 
458 /* Represents a fake method with the given parameter types.  This is
459    used by the parser to construct a temporary "expected" type for
460    method overload resolution.  FLAGS is used as instance flags of the
461    new type, in order to be able to make the new type represent a
462    const/volatile overload.  */
463 
464 class fake_method
465 {
466 public:
467   fake_method (type_instance_flags flags,
468 	       int num_types, struct type **param_types);
469   ~fake_method ();
470 
471   /* The constructed type.  */
type()472   struct type *type () { return &m_type; }
473 
474 private:
475   struct type m_type {};
476   main_type m_main_type {};
477 };
478 
fake_method(type_instance_flags flags,int num_types,struct type ** param_types)479 fake_method::fake_method (type_instance_flags flags,
480 			  int num_types, struct type **param_types)
481 {
482   struct type *type = &m_type;
483 
484   TYPE_MAIN_TYPE (type) = &m_main_type;
485   TYPE_LENGTH (type) = 1;
486   type->set_code (TYPE_CODE_METHOD);
487   TYPE_CHAIN (type) = type;
488   type->set_instance_flags (flags);
489   if (num_types > 0)
490     {
491       if (param_types[num_types - 1] == NULL)
492 	{
493 	  --num_types;
494 	  type->set_has_varargs (true);
495 	}
496       else if (check_typedef (param_types[num_types - 1])->code ()
497 	       == TYPE_CODE_VOID)
498 	{
499 	  --num_types;
500 	  /* Caller should have ensured this.  */
501 	  gdb_assert (num_types == 0);
502 	  type->set_is_prototyped (true);
503 	}
504     }
505 
506   /* We don't use TYPE_ZALLOC here to allocate space as TYPE is owned by
507      neither an objfile nor a gdbarch.  As a result we must manually
508      allocate memory for auxiliary fields, and free the memory ourselves
509      when we are done with it.  */
510   type->set_num_fields (num_types);
511   type->set_fields
512     ((struct field *) xzalloc (sizeof (struct field) * num_types));
513 
514   while (num_types-- > 0)
515     type->field (num_types).set_type (param_types[num_types]);
516 }
517 
~fake_method()518 fake_method::~fake_method ()
519 {
520   xfree (m_type.fields ());
521 }
522 
523 namespace expr
524 {
525 
526 value *
evaluate(struct type * expect_type,struct expression * exp,enum noside noside)527 type_instance_operation::evaluate (struct type *expect_type,
528 				   struct expression *exp,
529 				   enum noside noside)
530 {
531   type_instance_flags flags = std::get<0> (m_storage);
532   std::vector<type *> &types = std::get<1> (m_storage);
533 
534   fake_method fake_expect_type (flags, types.size (), types.data ());
535   return std::get<2> (m_storage)->evaluate (fake_expect_type.type (),
536 					    exp, noside);
537 }
538 
539 }
540 
541 /* Helper for evaluating an OP_VAR_VALUE.  */
542 
543 value *
evaluate_var_value(enum noside noside,const block * blk,symbol * var)544 evaluate_var_value (enum noside noside, const block *blk, symbol *var)
545 {
546   /* JYG: We used to just return value_zero of the symbol type if
547      we're asked to avoid side effects.  Otherwise we return
548      value_of_variable (...).  However I'm not sure if
549      value_of_variable () has any side effect.  We need a full value
550      object returned here for whatis_exp () to call evaluate_type ()
551      and then pass the full value to value_rtti_target_type () if we
552      are dealing with a pointer or reference to a base class and print
553      object is on.  */
554 
555   struct value *ret = NULL;
556 
557   try
558     {
559       ret = value_of_variable (var, blk);
560     }
561 
562   catch (const gdb_exception_error &except)
563     {
564       if (noside != EVAL_AVOID_SIDE_EFFECTS)
565 	throw;
566 
567       ret = value_zero (SYMBOL_TYPE (var), not_lval);
568     }
569 
570   return ret;
571 }
572 
573 namespace expr
574 
575 {
576 
577 value *
evaluate(struct type * expect_type,struct expression * exp,enum noside noside)578 var_value_operation::evaluate (struct type *expect_type,
579 			       struct expression *exp,
580 			       enum noside noside)
581 {
582   symbol *var = std::get<0> (m_storage).symbol;
583   if (SYMBOL_TYPE (var)->code () == TYPE_CODE_ERROR)
584     error_unknown_type (var->print_name ());
585   return evaluate_var_value (noside, std::get<0> (m_storage).block, var);
586 }
587 
588 } /* namespace expr */
589 
590 /* Helper for evaluating an OP_VAR_MSYM_VALUE.  */
591 
592 value *
evaluate_var_msym_value(enum noside noside,struct objfile * objfile,minimal_symbol * msymbol)593 evaluate_var_msym_value (enum noside noside,
594 			 struct objfile *objfile, minimal_symbol *msymbol)
595 {
596   CORE_ADDR address;
597   type *the_type = find_minsym_type_and_address (msymbol, objfile, &address);
598 
599   if (noside == EVAL_AVOID_SIDE_EFFECTS && !the_type->is_gnu_ifunc ())
600     return value_zero (the_type, not_lval);
601   else
602     return value_at_lazy (the_type, address);
603 }
604 
605 /* See expression.h.  */
606 
607 value *
evaluate_subexp_do_call(expression * exp,enum noside noside,value * callee,gdb::array_view<value * > argvec,const char * function_name,type * default_return_type)608 evaluate_subexp_do_call (expression *exp, enum noside noside,
609 			 value *callee,
610 			 gdb::array_view<value *> argvec,
611 			 const char *function_name,
612 			 type *default_return_type)
613 {
614   if (callee == NULL)
615     error (_("Cannot evaluate function -- may be inlined"));
616   if (noside == EVAL_AVOID_SIDE_EFFECTS)
617     {
618       /* If the return type doesn't look like a function type,
619 	 call an error.  This can happen if somebody tries to turn
620 	 a variable into a function call.  */
621 
622       type *ftype = value_type (callee);
623 
624       if (ftype->code () == TYPE_CODE_INTERNAL_FUNCTION)
625 	{
626 	  /* We don't know anything about what the internal
627 	     function might return, but we have to return
628 	     something.  */
629 	  return value_zero (builtin_type (exp->gdbarch)->builtin_int,
630 			     not_lval);
631 	}
632       else if (ftype->code () == TYPE_CODE_XMETHOD)
633 	{
634 	  type *return_type = result_type_of_xmethod (callee, argvec);
635 
636 	  if (return_type == NULL)
637 	    error (_("Xmethod is missing return type."));
638 	  return value_zero (return_type, not_lval);
639 	}
640       else if (ftype->code () == TYPE_CODE_FUNC
641 	       || ftype->code () == TYPE_CODE_METHOD)
642 	{
643 	  if (ftype->is_gnu_ifunc ())
644 	    {
645 	      CORE_ADDR address = value_address (callee);
646 	      type *resolved_type = find_gnu_ifunc_target_type (address);
647 
648 	      if (resolved_type != NULL)
649 		ftype = resolved_type;
650 	    }
651 
652 	  type *return_type = TYPE_TARGET_TYPE (ftype);
653 
654 	  if (return_type == NULL)
655 	    return_type = default_return_type;
656 
657 	  if (return_type == NULL)
658 	    error_call_unknown_return_type (function_name);
659 
660 	  return allocate_value (return_type);
661 	}
662       else
663 	error (_("Expression of type other than "
664 		 "\"Function returning ...\" used as function"));
665     }
666   switch (value_type (callee)->code ())
667     {
668     case TYPE_CODE_INTERNAL_FUNCTION:
669       return call_internal_function (exp->gdbarch, exp->language_defn,
670 				     callee, argvec.size (), argvec.data ());
671     case TYPE_CODE_XMETHOD:
672       return call_xmethod (callee, argvec);
673     default:
674       return call_function_by_hand (callee, default_return_type, argvec);
675     }
676 }
677 
678 namespace expr
679 {
680 
681 value *
evaluate_funcall(struct type * expect_type,struct expression * exp,enum noside noside,const char * function_name,const std::vector<operation_up> & args)682 operation::evaluate_funcall (struct type *expect_type,
683 			     struct expression *exp,
684 			     enum noside noside,
685 			     const char *function_name,
686 			     const std::vector<operation_up> &args)
687 {
688   std::vector<value *> vals (args.size ());
689 
690   value *callee = evaluate_with_coercion (exp, noside);
691   struct type *type = value_type (callee);
692   if (type->code () == TYPE_CODE_PTR)
693     type = TYPE_TARGET_TYPE (type);
694   for (int i = 0; i < args.size (); ++i)
695     {
696       if (i < type->num_fields ())
697 	vals[i] = args[i]->evaluate (type->field (i).type (), exp, noside);
698       else
699 	vals[i] = args[i]->evaluate_with_coercion (exp, noside);
700     }
701 
702   return evaluate_subexp_do_call (exp, noside, callee, vals,
703 				  function_name, expect_type);
704 }
705 
706 value *
evaluate_funcall(struct type * expect_type,struct expression * exp,enum noside noside,const std::vector<operation_up> & args)707 var_value_operation::evaluate_funcall (struct type *expect_type,
708 				       struct expression *exp,
709 				       enum noside noside,
710 				       const std::vector<operation_up> &args)
711 {
712   if (!overload_resolution
713       || exp->language_defn->la_language != language_cplus)
714     return operation::evaluate_funcall (expect_type, exp, noside, args);
715 
716   std::vector<value *> argvec (args.size ());
717   for (int i = 0; i < args.size (); ++i)
718     argvec[i] = args[i]->evaluate_with_coercion (exp, noside);
719 
720   struct symbol *symp;
721   find_overload_match (argvec, NULL, NON_METHOD,
722 		       NULL, std::get<0> (m_storage).symbol,
723 		       NULL, &symp, NULL, 0, noside);
724 
725   if (SYMBOL_TYPE (symp)->code () == TYPE_CODE_ERROR)
726     error_unknown_type (symp->print_name ());
727   value *callee = evaluate_var_value (noside, std::get<0> (m_storage).block,
728 				      symp);
729 
730   return evaluate_subexp_do_call (exp, noside, callee, argvec,
731 				  nullptr, expect_type);
732 }
733 
734 value *
evaluate_funcall(struct type * expect_type,struct expression * exp,enum noside noside,const std::vector<operation_up> & args)735 scope_operation::evaluate_funcall (struct type *expect_type,
736 				   struct expression *exp,
737 				   enum noside noside,
738 				   const std::vector<operation_up> &args)
739 {
740   if (!overload_resolution
741       || exp->language_defn->la_language != language_cplus)
742     return operation::evaluate_funcall (expect_type, exp, noside, args);
743 
744   /* Unpack it locally so we can properly handle overload
745      resolution.  */
746   const std::string &name = std::get<1> (m_storage);
747   struct type *type = std::get<0> (m_storage);
748 
749   symbol *function = NULL;
750   const char *function_name = NULL;
751   std::vector<value *> argvec (1 + args.size ());
752   if (type->code () == TYPE_CODE_NAMESPACE)
753     {
754       function = cp_lookup_symbol_namespace (type->name (),
755 					     name.c_str (),
756 					     get_selected_block (0),
757 					     VAR_DOMAIN).symbol;
758       if (function == NULL)
759 	error (_("No symbol \"%s\" in namespace \"%s\"."),
760 	       name.c_str (), type->name ());
761     }
762   else
763     {
764       gdb_assert (type->code () == TYPE_CODE_STRUCT
765 		  || type->code () == TYPE_CODE_UNION);
766       function_name = name.c_str ();
767 
768       /* We need a properly typed value for method lookup.  */
769       argvec[0] = value_zero (type, lval_memory);
770     }
771 
772   for (int i = 0; i < args.size (); ++i)
773     argvec[i + 1] = args[i]->evaluate_with_coercion (exp, noside);
774   gdb::array_view<value *> arg_view = argvec;
775 
776   value *callee = nullptr;
777   if (function_name != nullptr)
778     {
779       int static_memfuncp;
780 
781       find_overload_match (arg_view, function_name, METHOD,
782 			   &argvec[0], nullptr, &callee, nullptr,
783 			   &static_memfuncp, 0, noside);
784       if (!static_memfuncp)
785 	{
786 	  /* For the time being, we don't handle this.  */
787 	  error (_("Call to overloaded function %s requires "
788 		   "`this' pointer"),
789 		 function_name);
790 	}
791 
792       arg_view = arg_view.slice (1);
793     }
794   else
795     {
796       symbol *symp;
797       arg_view = arg_view.slice (1);
798       find_overload_match (arg_view, nullptr,
799 			   NON_METHOD, nullptr, function,
800 			   nullptr, &symp, nullptr, 1, noside);
801       callee = value_of_variable (symp, get_selected_block (0));
802     }
803 
804   return evaluate_subexp_do_call (exp, noside, callee, arg_view,
805 				  nullptr, expect_type);
806 }
807 
808 value *
evaluate_funcall(struct type * expect_type,struct expression * exp,enum noside noside,const std::vector<operation_up> & args)809 structop_member_base::evaluate_funcall (struct type *expect_type,
810 					struct expression *exp,
811 					enum noside noside,
812 					const std::vector<operation_up> &args)
813 {
814   /* First, evaluate the structure into lhs.  */
815   value *lhs;
816   if (opcode () == STRUCTOP_MEMBER)
817     lhs = std::get<0> (m_storage)->evaluate_for_address (exp, noside);
818   else
819     lhs = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
820 
821   std::vector<value *> vals (args.size () + 1);
822   gdb::array_view<value *> val_view = vals;
823   /* If the function is a virtual function, then the aggregate
824      value (providing the structure) plays its part by providing
825      the vtable.  Otherwise, it is just along for the ride: call
826      the function directly.  */
827   value *rhs = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
828   value *callee;
829 
830   type *a1_type = check_typedef (value_type (rhs));
831   if (a1_type->code () == TYPE_CODE_METHODPTR)
832     {
833       if (noside == EVAL_AVOID_SIDE_EFFECTS)
834 	callee = value_zero (TYPE_TARGET_TYPE (a1_type), not_lval);
835       else
836 	callee = cplus_method_ptr_to_value (&lhs, rhs);
837 
838       vals[0] = lhs;
839     }
840   else if (a1_type->code () == TYPE_CODE_MEMBERPTR)
841     {
842       struct type *type_ptr
843 	= lookup_pointer_type (TYPE_SELF_TYPE (a1_type));
844       struct type *target_type_ptr
845 	= lookup_pointer_type (TYPE_TARGET_TYPE (a1_type));
846 
847       /* Now, convert this value to an address.  */
848       lhs = value_cast (type_ptr, lhs);
849 
850       long mem_offset = value_as_long (rhs);
851 
852       callee = value_from_pointer (target_type_ptr,
853 				   value_as_long (lhs) + mem_offset);
854       callee = value_ind (callee);
855 
856       val_view = val_view.slice (1);
857     }
858   else
859     error (_("Non-pointer-to-member value used in pointer-to-member "
860 	     "construct"));
861 
862   for (int i = 0; i < args.size (); ++i)
863     vals[i + 1] = args[i]->evaluate_with_coercion (exp, noside);
864 
865   return evaluate_subexp_do_call (exp, noside, callee, val_view,
866 				  nullptr, expect_type);
867 
868 }
869 
870 value *
evaluate_funcall(struct type * expect_type,struct expression * exp,enum noside noside,const std::vector<operation_up> & args)871 structop_base_operation::evaluate_funcall
872      (struct type *expect_type, struct expression *exp, enum noside noside,
873       const std::vector<operation_up> &args)
874 {
875   /* Allocate space for the function call arguments, Including space for a
876      `this' pointer at the start.  */
877   std::vector<value *> vals (args.size () + 1);
878   /* First, evaluate the structure into vals[0].  */
879   enum exp_opcode op = opcode ();
880   if (op == STRUCTOP_STRUCT)
881     {
882       /* If v is a variable in a register, and the user types
883 	 v.method (), this will produce an error, because v has no
884 	 address.
885 
886 	 A possible way around this would be to allocate a copy of
887 	 the variable on the stack, copy in the contents, call the
888 	 function, and copy out the contents.  I.e. convert this
889 	 from call by reference to call by copy-return (or
890 	 whatever it's called).  However, this does not work
891 	 because it is not the same: the method being called could
892 	 stash a copy of the address, and then future uses through
893 	 that address (after the method returns) would be expected
894 	 to use the variable itself, not some copy of it.  */
895       vals[0] = std::get<0> (m_storage)->evaluate_for_address (exp, noside);
896     }
897   else
898     {
899       vals[0] = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
900       /* Check to see if the operator '->' has been overloaded.
901 	 If the operator has been overloaded replace vals[0] with the
902 	 value returned by the custom operator and continue
903 	 evaluation.  */
904       while (unop_user_defined_p (op, vals[0]))
905 	{
906 	  struct value *value = nullptr;
907 	  try
908 	    {
909 	      value = value_x_unop (vals[0], op, noside);
910 	    }
911 	  catch (const gdb_exception_error &except)
912 	    {
913 	      if (except.error == NOT_FOUND_ERROR)
914 		break;
915 	      else
916 		throw;
917 	    }
918 
919 	  vals[0] = value;
920 	}
921     }
922 
923   /* Evaluate the arguments.  The '+ 1' here is to allow for the `this'
924      pointer we placed into vals[0].  */
925   for (int i = 0; i < args.size (); ++i)
926     vals[i + 1] = args[i]->evaluate_with_coercion (exp, noside);
927 
928   /* The array view includes the `this' pointer.  */
929   gdb::array_view<value *> arg_view (vals);
930 
931   int static_memfuncp;
932   value *callee;
933   const char *tstr = std::get<1> (m_storage).c_str ();
934   if (overload_resolution
935       && exp->language_defn->la_language == language_cplus)
936     {
937       /* Language is C++, do some overload resolution before
938 	 evaluation.  */
939       value *val0 = vals[0];
940       find_overload_match (arg_view, tstr, METHOD,
941 			   &val0, nullptr, &callee, nullptr,
942 			   &static_memfuncp, 0, noside);
943       vals[0] = val0;
944     }
945   else
946     /* Non-C++ case -- or no overload resolution.  */
947     {
948       struct value *temp = vals[0];
949 
950       callee = value_struct_elt (&temp, arg_view, tstr,
951 				 &static_memfuncp,
952 				 op == STRUCTOP_STRUCT
953 				 ? "structure" : "structure pointer");
954       /* value_struct_elt updates temp with the correct value of the
955 	 ``this'' pointer if necessary, so modify it to reflect any
956 	 ``this'' changes.  */
957       vals[0] = value_from_longest (lookup_pointer_type (value_type (temp)),
958 				    value_address (temp)
959 				    + value_embedded_offset (temp));
960     }
961 
962   /* Take out `this' if needed.  */
963   if (static_memfuncp)
964     arg_view = arg_view.slice (1);
965 
966   return evaluate_subexp_do_call (exp, noside, callee, arg_view,
967 				  nullptr, expect_type);
968 }
969 
970 
971 } /* namespace expr */
972 
973 /* Return true if type is integral or reference to integral */
974 
975 static bool
is_integral_or_integral_reference(struct type * type)976 is_integral_or_integral_reference (struct type *type)
977 {
978   if (is_integral_type (type))
979     return true;
980 
981   type = check_typedef (type);
982   return (type != nullptr
983 	  && TYPE_IS_REFERENCE (type)
984 	  && is_integral_type (TYPE_TARGET_TYPE (type)));
985 }
986 
987 /* Helper function that implements the body of OP_SCOPE.  */
988 
989 struct value *
eval_op_scope(struct type * expect_type,struct expression * exp,enum noside noside,struct type * type,const char * string)990 eval_op_scope (struct type *expect_type, struct expression *exp,
991 	       enum noside noside,
992 	       struct type *type, const char *string)
993 {
994   struct value *arg1 = value_aggregate_elt (type, string, expect_type,
995 					    0, noside);
996   if (arg1 == NULL)
997     error (_("There is no field named %s"), string);
998   return arg1;
999 }
1000 
1001 /* Helper function that implements the body of OP_VAR_ENTRY_VALUE.  */
1002 
1003 struct value *
eval_op_var_entry_value(struct type * expect_type,struct expression * exp,enum noside noside,symbol * sym)1004 eval_op_var_entry_value (struct type *expect_type, struct expression *exp,
1005 			 enum noside noside, symbol *sym)
1006 {
1007   if (noside == EVAL_AVOID_SIDE_EFFECTS)
1008     return value_zero (SYMBOL_TYPE (sym), not_lval);
1009 
1010   if (SYMBOL_COMPUTED_OPS (sym) == NULL
1011       || SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry == NULL)
1012     error (_("Symbol \"%s\" does not have any specific entry value"),
1013 	   sym->print_name ());
1014 
1015   struct frame_info *frame = get_selected_frame (NULL);
1016   return SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry (sym, frame);
1017 }
1018 
1019 /* Helper function that implements the body of OP_VAR_MSYM_VALUE.  */
1020 
1021 struct value *
eval_op_var_msym_value(struct type * expect_type,struct expression * exp,enum noside noside,bool outermost_p,bound_minimal_symbol msymbol)1022 eval_op_var_msym_value (struct type *expect_type, struct expression *exp,
1023 			enum noside noside, bool outermost_p,
1024 			bound_minimal_symbol msymbol)
1025 {
1026   value *val = evaluate_var_msym_value (noside, msymbol.objfile,
1027 					msymbol.minsym);
1028 
1029   struct type *type = value_type (val);
1030   if (type->code () == TYPE_CODE_ERROR
1031       && (noside != EVAL_AVOID_SIDE_EFFECTS || !outermost_p))
1032     error_unknown_type (msymbol.minsym->print_name ());
1033   return val;
1034 }
1035 
1036 /* Helper function that implements the body of OP_FUNC_STATIC_VAR.  */
1037 
1038 struct value *
eval_op_func_static_var(struct type * expect_type,struct expression * exp,enum noside noside,value * func,const char * var)1039 eval_op_func_static_var (struct type *expect_type, struct expression *exp,
1040 			 enum noside noside,
1041 			 value *func, const char *var)
1042 {
1043   CORE_ADDR addr = value_address (func);
1044   const block *blk = block_for_pc (addr);
1045   struct block_symbol sym = lookup_symbol (var, blk, VAR_DOMAIN, NULL);
1046   if (sym.symbol == NULL)
1047     error (_("No symbol \"%s\" in specified context."), var);
1048   return evaluate_var_value (noside, sym.block, sym.symbol);
1049 }
1050 
1051 /* Helper function that implements the body of OP_REGISTER.  */
1052 
1053 struct value *
eval_op_register(struct type * expect_type,struct expression * exp,enum noside noside,const char * name)1054 eval_op_register (struct type *expect_type, struct expression *exp,
1055 		  enum noside noside, const char *name)
1056 {
1057   int regno;
1058   struct value *val;
1059 
1060   regno = user_reg_map_name_to_regnum (exp->gdbarch,
1061 				       name, strlen (name));
1062   if (regno == -1)
1063     error (_("Register $%s not available."), name);
1064 
1065   /* In EVAL_AVOID_SIDE_EFFECTS mode, we only need to return
1066      a value with the appropriate register type.  Unfortunately,
1067      we don't have easy access to the type of user registers.
1068      So for these registers, we fetch the register value regardless
1069      of the evaluation mode.  */
1070   if (noside == EVAL_AVOID_SIDE_EFFECTS
1071       && regno < gdbarch_num_cooked_regs (exp->gdbarch))
1072     val = value_zero (register_type (exp->gdbarch, regno), not_lval);
1073   else
1074     val = value_of_register (regno, get_selected_frame (NULL));
1075   if (val == NULL)
1076     error (_("Value of register %s not available."), name);
1077   else
1078     return val;
1079 }
1080 
1081 /* Helper function that implements the body of OP_STRING.  */
1082 
1083 struct value *
eval_op_string(struct type * expect_type,struct expression * exp,enum noside noside,int len,const char * string)1084 eval_op_string (struct type *expect_type, struct expression *exp,
1085 		enum noside noside, int len, const char *string)
1086 {
1087   struct type *type = language_string_char_type (exp->language_defn,
1088 						 exp->gdbarch);
1089   return value_string (string, len, type);
1090 }
1091 
1092 /* Helper function that implements the body of OP_OBJC_SELECTOR.  */
1093 
1094 struct value *
eval_op_objc_selector(struct type * expect_type,struct expression * exp,enum noside noside,const char * sel)1095 eval_op_objc_selector (struct type *expect_type, struct expression *exp,
1096 		       enum noside noside,
1097 		       const char *sel)
1098 {
1099   struct type *selector_type = builtin_type (exp->gdbarch)->builtin_data_ptr;
1100   return value_from_longest (selector_type,
1101 			     lookup_child_selector (exp->gdbarch, sel));
1102 }
1103 
1104 /* Helper function that implements the body of BINOP_CONCAT.  */
1105 
1106 struct value *
eval_op_concat(struct type * expect_type,struct expression * exp,enum noside noside,struct value * arg1,struct value * arg2)1107 eval_op_concat (struct type *expect_type, struct expression *exp,
1108 		enum noside noside, struct value *arg1, struct value *arg2)
1109 {
1110   if (binop_user_defined_p (BINOP_CONCAT, arg1, arg2))
1111     return value_x_binop (arg1, arg2, BINOP_CONCAT, OP_NULL, noside);
1112   else
1113     return value_concat (arg1, arg2);
1114 }
1115 
1116 /* A helper function for TERNOP_SLICE.  */
1117 
1118 struct value *
eval_op_ternop(struct type * expect_type,struct expression * exp,enum noside noside,struct value * array,struct value * low,struct value * upper)1119 eval_op_ternop (struct type *expect_type, struct expression *exp,
1120 		enum noside noside,
1121 		struct value *array, struct value *low, struct value *upper)
1122 {
1123   int lowbound = value_as_long (low);
1124   int upperbound = value_as_long (upper);
1125   return value_slice (array, lowbound, upperbound - lowbound + 1);
1126 }
1127 
1128 /* A helper function for STRUCTOP_STRUCT.  */
1129 
1130 struct value *
eval_op_structop_struct(struct type * expect_type,struct expression * exp,enum noside noside,struct value * arg1,const char * string)1131 eval_op_structop_struct (struct type *expect_type, struct expression *exp,
1132 			 enum noside noside,
1133 			 struct value *arg1, const char *string)
1134 {
1135   struct value *arg3 = value_struct_elt (&arg1, {}, string,
1136 					 NULL, "structure");
1137   if (noside == EVAL_AVOID_SIDE_EFFECTS)
1138     arg3 = value_zero (value_type (arg3), VALUE_LVAL (arg3));
1139   return arg3;
1140 }
1141 
1142 /* A helper function for STRUCTOP_PTR.  */
1143 
1144 struct value *
eval_op_structop_ptr(struct type * expect_type,struct expression * exp,enum noside noside,struct value * arg1,const char * string)1145 eval_op_structop_ptr (struct type *expect_type, struct expression *exp,
1146 		      enum noside noside,
1147 		      struct value *arg1, const char *string)
1148 {
1149   /* Check to see if operator '->' has been overloaded.  If so replace
1150      arg1 with the value returned by evaluating operator->().  */
1151   while (unop_user_defined_p (STRUCTOP_PTR, arg1))
1152     {
1153       struct value *value = NULL;
1154       try
1155 	{
1156 	  value = value_x_unop (arg1, STRUCTOP_PTR, noside);
1157 	}
1158 
1159       catch (const gdb_exception_error &except)
1160 	{
1161 	  if (except.error == NOT_FOUND_ERROR)
1162 	    break;
1163 	  else
1164 	    throw;
1165 	}
1166 
1167       arg1 = value;
1168     }
1169 
1170   /* JYG: if print object is on we need to replace the base type
1171      with rtti type in order to continue on with successful
1172      lookup of member / method only available in the rtti type.  */
1173   {
1174     struct type *arg_type = value_type (arg1);
1175     struct type *real_type;
1176     int full, using_enc;
1177     LONGEST top;
1178     struct value_print_options opts;
1179 
1180     get_user_print_options (&opts);
1181     if (opts.objectprint && TYPE_TARGET_TYPE (arg_type)
1182 	&& (TYPE_TARGET_TYPE (arg_type)->code () == TYPE_CODE_STRUCT))
1183       {
1184 	real_type = value_rtti_indirect_type (arg1, &full, &top,
1185 					      &using_enc);
1186 	if (real_type)
1187 	  arg1 = value_cast (real_type, arg1);
1188       }
1189   }
1190 
1191   struct value *arg3 = value_struct_elt (&arg1, {}, string,
1192 					 NULL, "structure pointer");
1193   if (noside == EVAL_AVOID_SIDE_EFFECTS)
1194     arg3 = value_zero (value_type (arg3), VALUE_LVAL (arg3));
1195   return arg3;
1196 }
1197 
1198 /* A helper function for STRUCTOP_MEMBER.  */
1199 
1200 struct value *
eval_op_member(struct type * expect_type,struct expression * exp,enum noside noside,struct value * arg1,struct value * arg2)1201 eval_op_member (struct type *expect_type, struct expression *exp,
1202 		enum noside noside,
1203 		struct value *arg1, struct value *arg2)
1204 {
1205   long mem_offset;
1206 
1207   struct value *arg3;
1208   struct type *type = check_typedef (value_type (arg2));
1209   switch (type->code ())
1210     {
1211     case TYPE_CODE_METHODPTR:
1212       if (noside == EVAL_AVOID_SIDE_EFFECTS)
1213 	return value_zero (TYPE_TARGET_TYPE (type), not_lval);
1214       else
1215 	{
1216 	  arg2 = cplus_method_ptr_to_value (&arg1, arg2);
1217 	  gdb_assert (value_type (arg2)->code () == TYPE_CODE_PTR);
1218 	  return value_ind (arg2);
1219 	}
1220 
1221     case TYPE_CODE_MEMBERPTR:
1222       /* Now, convert these values to an address.  */
1223       arg1 = value_cast_pointers (lookup_pointer_type (TYPE_SELF_TYPE (type)),
1224 				  arg1, 1);
1225 
1226       mem_offset = value_as_long (arg2);
1227 
1228       arg3 = value_from_pointer (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
1229 				 value_as_long (arg1) + mem_offset);
1230       return value_ind (arg3);
1231 
1232     default:
1233       error (_("non-pointer-to-member value used "
1234 	       "in pointer-to-member construct"));
1235     }
1236 }
1237 
1238 /* A helper function for BINOP_ADD.  */
1239 
1240 struct value *
eval_op_add(struct type * expect_type,struct expression * exp,enum noside noside,struct value * arg1,struct value * arg2)1241 eval_op_add (struct type *expect_type, struct expression *exp,
1242 	     enum noside noside,
1243 	     struct value *arg1, struct value *arg2)
1244 {
1245   if (binop_user_defined_p (BINOP_ADD, arg1, arg2))
1246     return value_x_binop (arg1, arg2, BINOP_ADD, OP_NULL, noside);
1247   else if (ptrmath_type_p (exp->language_defn, value_type (arg1))
1248 	   && is_integral_or_integral_reference (value_type (arg2)))
1249     return value_ptradd (arg1, value_as_long (arg2));
1250   else if (ptrmath_type_p (exp->language_defn, value_type (arg2))
1251 	   && is_integral_or_integral_reference (value_type (arg1)))
1252     return value_ptradd (arg2, value_as_long (arg1));
1253   else
1254     {
1255       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
1256       return value_binop (arg1, arg2, BINOP_ADD);
1257     }
1258 }
1259 
1260 /* A helper function for BINOP_SUB.  */
1261 
1262 struct value *
eval_op_sub(struct type * expect_type,struct expression * exp,enum noside noside,struct value * arg1,struct value * arg2)1263 eval_op_sub (struct type *expect_type, struct expression *exp,
1264 	     enum noside noside,
1265 	     struct value *arg1, struct value *arg2)
1266 {
1267   if (binop_user_defined_p (BINOP_SUB, arg1, arg2))
1268     return value_x_binop (arg1, arg2, BINOP_SUB, OP_NULL, noside);
1269   else if (ptrmath_type_p (exp->language_defn, value_type (arg1))
1270 	   && ptrmath_type_p (exp->language_defn, value_type (arg2)))
1271     {
1272       /* FIXME -- should be ptrdiff_t */
1273       struct type *type = builtin_type (exp->gdbarch)->builtin_long;
1274       return value_from_longest (type, value_ptrdiff (arg1, arg2));
1275     }
1276   else if (ptrmath_type_p (exp->language_defn, value_type (arg1))
1277 	   && is_integral_or_integral_reference (value_type (arg2)))
1278     return value_ptradd (arg1, - value_as_long (arg2));
1279   else
1280     {
1281       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
1282       return value_binop (arg1, arg2, BINOP_SUB);
1283     }
1284 }
1285 
1286 /* Helper function for several different binary operations.  */
1287 
1288 struct value *
eval_op_binary(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1,struct value * arg2)1289 eval_op_binary (struct type *expect_type, struct expression *exp,
1290 		enum noside noside, enum exp_opcode op,
1291 		struct value *arg1, struct value *arg2)
1292 {
1293   if (binop_user_defined_p (op, arg1, arg2))
1294     return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1295   else
1296     {
1297       /* If EVAL_AVOID_SIDE_EFFECTS and we're dividing by zero,
1298 	 fudge arg2 to avoid division-by-zero, the caller is
1299 	 (theoretically) only looking for the type of the result.  */
1300       if (noside == EVAL_AVOID_SIDE_EFFECTS
1301 	  /* ??? Do we really want to test for BINOP_MOD here?
1302 	     The implementation of value_binop gives it a well-defined
1303 	     value.  */
1304 	  && (op == BINOP_DIV
1305 	      || op == BINOP_INTDIV
1306 	      || op == BINOP_REM
1307 	      || op == BINOP_MOD)
1308 	  && value_logical_not (arg2))
1309 	{
1310 	  struct value *v_one;
1311 
1312 	  v_one = value_one (value_type (arg2));
1313 	  binop_promote (exp->language_defn, exp->gdbarch, &arg1, &v_one);
1314 	  return value_binop (arg1, v_one, op);
1315 	}
1316       else
1317 	{
1318 	  /* For shift and integer exponentiation operations,
1319 	     only promote the first argument.  */
1320 	  if ((op == BINOP_LSH || op == BINOP_RSH || op == BINOP_EXP)
1321 	      && is_integral_type (value_type (arg2)))
1322 	    unop_promote (exp->language_defn, exp->gdbarch, &arg1);
1323 	  else
1324 	    binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
1325 
1326 	  return value_binop (arg1, arg2, op);
1327 	}
1328     }
1329 }
1330 
1331 /* A helper function for BINOP_SUBSCRIPT.  */
1332 
1333 struct value *
eval_op_subscript(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1,struct value * arg2)1334 eval_op_subscript (struct type *expect_type, struct expression *exp,
1335 		   enum noside noside, enum exp_opcode op,
1336 		   struct value *arg1, struct value *arg2)
1337 {
1338   if (binop_user_defined_p (op, arg1, arg2))
1339     return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1340   else
1341     {
1342       /* If the user attempts to subscript something that is not an
1343 	 array or pointer type (like a plain int variable for example),
1344 	 then report this as an error.  */
1345 
1346       arg1 = coerce_ref (arg1);
1347       struct type *type = check_typedef (value_type (arg1));
1348       if (type->code () != TYPE_CODE_ARRAY
1349 	  && type->code () != TYPE_CODE_PTR)
1350 	{
1351 	  if (type->name ())
1352 	    error (_("cannot subscript something of type `%s'"),
1353 		   type->name ());
1354 	  else
1355 	    error (_("cannot subscript requested type"));
1356 	}
1357 
1358       if (noside == EVAL_AVOID_SIDE_EFFECTS)
1359 	return value_zero (TYPE_TARGET_TYPE (type), VALUE_LVAL (arg1));
1360       else
1361 	return value_subscript (arg1, value_as_long (arg2));
1362     }
1363 }
1364 
1365 /* A helper function for BINOP_EQUAL.  */
1366 
1367 struct value *
eval_op_equal(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1,struct value * arg2)1368 eval_op_equal (struct type *expect_type, struct expression *exp,
1369 	       enum noside noside, enum exp_opcode op,
1370 	       struct value *arg1, struct value *arg2)
1371 {
1372   if (binop_user_defined_p (op, arg1, arg2))
1373     {
1374       return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1375     }
1376   else
1377     {
1378       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
1379       int tem = value_equal (arg1, arg2);
1380       struct type *type = language_bool_type (exp->language_defn,
1381 					      exp->gdbarch);
1382       return value_from_longest (type, (LONGEST) tem);
1383     }
1384 }
1385 
1386 /* A helper function for BINOP_NOTEQUAL.  */
1387 
1388 struct value *
eval_op_notequal(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1,struct value * arg2)1389 eval_op_notequal (struct type *expect_type, struct expression *exp,
1390 		  enum noside noside, enum exp_opcode op,
1391 		  struct value *arg1, struct value *arg2)
1392 {
1393   if (binop_user_defined_p (op, arg1, arg2))
1394     {
1395       return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1396     }
1397   else
1398     {
1399       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
1400       int tem = value_equal (arg1, arg2);
1401       struct type *type = language_bool_type (exp->language_defn,
1402 					      exp->gdbarch);
1403       return value_from_longest (type, (LONGEST) ! tem);
1404     }
1405 }
1406 
1407 /* A helper function for BINOP_LESS.  */
1408 
1409 struct value *
eval_op_less(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1,struct value * arg2)1410 eval_op_less (struct type *expect_type, struct expression *exp,
1411 	      enum noside noside, enum exp_opcode op,
1412 	      struct value *arg1, struct value *arg2)
1413 {
1414   if (binop_user_defined_p (op, arg1, arg2))
1415     {
1416       return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1417     }
1418   else
1419     {
1420       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
1421       int tem = value_less (arg1, arg2);
1422       struct type *type = language_bool_type (exp->language_defn,
1423 					      exp->gdbarch);
1424       return value_from_longest (type, (LONGEST) tem);
1425     }
1426 }
1427 
1428 /* A helper function for BINOP_GTR.  */
1429 
1430 struct value *
eval_op_gtr(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1,struct value * arg2)1431 eval_op_gtr (struct type *expect_type, struct expression *exp,
1432 	     enum noside noside, enum exp_opcode op,
1433 	     struct value *arg1, struct value *arg2)
1434 {
1435   if (binop_user_defined_p (op, arg1, arg2))
1436     {
1437       return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1438     }
1439   else
1440     {
1441       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
1442       int tem = value_less (arg2, arg1);
1443       struct type *type = language_bool_type (exp->language_defn,
1444 					      exp->gdbarch);
1445       return value_from_longest (type, (LONGEST) tem);
1446     }
1447 }
1448 
1449 /* A helper function for BINOP_GEQ.  */
1450 
1451 struct value *
eval_op_geq(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1,struct value * arg2)1452 eval_op_geq (struct type *expect_type, struct expression *exp,
1453 	     enum noside noside, enum exp_opcode op,
1454 	     struct value *arg1, struct value *arg2)
1455 {
1456   if (binop_user_defined_p (op, arg1, arg2))
1457     {
1458       return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1459     }
1460   else
1461     {
1462       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
1463       int tem = value_less (arg2, arg1) || value_equal (arg1, arg2);
1464       struct type *type = language_bool_type (exp->language_defn,
1465 					      exp->gdbarch);
1466       return value_from_longest (type, (LONGEST) tem);
1467     }
1468 }
1469 
1470 /* A helper function for BINOP_LEQ.  */
1471 
1472 struct value *
eval_op_leq(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1,struct value * arg2)1473 eval_op_leq (struct type *expect_type, struct expression *exp,
1474 	     enum noside noside, enum exp_opcode op,
1475 	     struct value *arg1, struct value *arg2)
1476 {
1477   if (binop_user_defined_p (op, arg1, arg2))
1478     {
1479       return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1480     }
1481   else
1482     {
1483       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
1484       int tem = value_less (arg1, arg2) || value_equal (arg1, arg2);
1485       struct type *type = language_bool_type (exp->language_defn,
1486 					      exp->gdbarch);
1487       return value_from_longest (type, (LONGEST) tem);
1488     }
1489 }
1490 
1491 /* A helper function for BINOP_REPEAT.  */
1492 
1493 struct value *
eval_op_repeat(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1,struct value * arg2)1494 eval_op_repeat (struct type *expect_type, struct expression *exp,
1495 		enum noside noside, enum exp_opcode op,
1496 		struct value *arg1, struct value *arg2)
1497 {
1498   struct type *type = check_typedef (value_type (arg2));
1499   if (type->code () != TYPE_CODE_INT
1500       && type->code () != TYPE_CODE_ENUM)
1501     error (_("Non-integral right operand for \"@\" operator."));
1502   if (noside == EVAL_AVOID_SIDE_EFFECTS)
1503     {
1504       return allocate_repeat_value (value_type (arg1),
1505 				    longest_to_int (value_as_long (arg2)));
1506     }
1507   else
1508     return value_repeat (arg1, longest_to_int (value_as_long (arg2)));
1509 }
1510 
1511 /* A helper function for UNOP_PLUS.  */
1512 
1513 struct value *
eval_op_plus(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1)1514 eval_op_plus (struct type *expect_type, struct expression *exp,
1515 	      enum noside noside, enum exp_opcode op,
1516 	      struct value *arg1)
1517 {
1518   if (unop_user_defined_p (op, arg1))
1519     return value_x_unop (arg1, op, noside);
1520   else
1521     {
1522       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
1523       return value_pos (arg1);
1524     }
1525 }
1526 
1527 /* A helper function for UNOP_NEG.  */
1528 
1529 struct value *
eval_op_neg(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1)1530 eval_op_neg (struct type *expect_type, struct expression *exp,
1531 	     enum noside noside, enum exp_opcode op,
1532 	     struct value *arg1)
1533 {
1534   if (unop_user_defined_p (op, arg1))
1535     return value_x_unop (arg1, op, noside);
1536   else
1537     {
1538       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
1539       return value_neg (arg1);
1540     }
1541 }
1542 
1543 /* A helper function for UNOP_COMPLEMENT.  */
1544 
1545 struct value *
eval_op_complement(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1)1546 eval_op_complement (struct type *expect_type, struct expression *exp,
1547 		    enum noside noside, enum exp_opcode op,
1548 		    struct value *arg1)
1549 {
1550   if (unop_user_defined_p (UNOP_COMPLEMENT, arg1))
1551     return value_x_unop (arg1, UNOP_COMPLEMENT, noside);
1552   else
1553     {
1554       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
1555       return value_complement (arg1);
1556     }
1557 }
1558 
1559 /* A helper function for UNOP_LOGICAL_NOT.  */
1560 
1561 struct value *
eval_op_lognot(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1)1562 eval_op_lognot (struct type *expect_type, struct expression *exp,
1563 		enum noside noside, enum exp_opcode op,
1564 		struct value *arg1)
1565 {
1566   if (unop_user_defined_p (op, arg1))
1567     return value_x_unop (arg1, op, noside);
1568   else
1569     {
1570       struct type *type = language_bool_type (exp->language_defn,
1571 					      exp->gdbarch);
1572       return value_from_longest (type, (LONGEST) value_logical_not (arg1));
1573     }
1574 }
1575 
1576 /* A helper function for UNOP_IND.  */
1577 
1578 struct value *
eval_op_ind(struct type * expect_type,struct expression * exp,enum noside noside,struct value * arg1)1579 eval_op_ind (struct type *expect_type, struct expression *exp,
1580 	     enum noside noside,
1581 	     struct value *arg1)
1582 {
1583   struct type *type = check_typedef (value_type (arg1));
1584   if (type->code () == TYPE_CODE_METHODPTR
1585       || type->code () == TYPE_CODE_MEMBERPTR)
1586     error (_("Attempt to dereference pointer "
1587 	     "to member without an object"));
1588   if (unop_user_defined_p (UNOP_IND, arg1))
1589     return value_x_unop (arg1, UNOP_IND, noside);
1590   else if (noside == EVAL_AVOID_SIDE_EFFECTS)
1591     {
1592       type = check_typedef (value_type (arg1));
1593 
1594       /* If the type pointed to is dynamic then in order to resolve the
1595 	 dynamic properties we must actually dereference the pointer.
1596 	 There is a risk that this dereference will have side-effects
1597 	 in the inferior, but being able to print accurate type
1598 	 information seems worth the risk. */
1599       if ((type->code () != TYPE_CODE_PTR
1600 	   && !TYPE_IS_REFERENCE (type))
1601 	  || !is_dynamic_type (TYPE_TARGET_TYPE (type)))
1602 	{
1603 	  if (type->code () == TYPE_CODE_PTR
1604 	      || TYPE_IS_REFERENCE (type)
1605 	      /* In C you can dereference an array to get the 1st elt.  */
1606 	      || type->code () == TYPE_CODE_ARRAY)
1607 	    return value_zero (TYPE_TARGET_TYPE (type),
1608 			       lval_memory);
1609 	  else if (type->code () == TYPE_CODE_INT)
1610 	    /* GDB allows dereferencing an int.  */
1611 	    return value_zero (builtin_type (exp->gdbarch)->builtin_int,
1612 			       lval_memory);
1613 	  else
1614 	    error (_("Attempt to take contents of a non-pointer value."));
1615 	}
1616     }
1617 
1618   /* Allow * on an integer so we can cast it to whatever we want.
1619      This returns an int, which seems like the most C-like thing to
1620      do.  "long long" variables are rare enough that
1621      BUILTIN_TYPE_LONGEST would seem to be a mistake.  */
1622   if (type->code () == TYPE_CODE_INT)
1623     return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
1624 			  (CORE_ADDR) value_as_address (arg1));
1625   return value_ind (arg1);
1626 }
1627 
1628 /* A helper function for UNOP_ALIGNOF.  */
1629 
1630 struct value *
eval_op_alignof(struct type * expect_type,struct expression * exp,enum noside noside,struct value * arg1)1631 eval_op_alignof (struct type *expect_type, struct expression *exp,
1632 		 enum noside noside,
1633 		 struct value *arg1)
1634 {
1635   struct type *type = value_type (arg1);
1636   /* FIXME: This should be size_t.  */
1637   struct type *size_type = builtin_type (exp->gdbarch)->builtin_int;
1638   ULONGEST align = type_align (type);
1639   if (align == 0)
1640     error (_("could not determine alignment of type"));
1641   return value_from_longest (size_type, align);
1642 }
1643 
1644 /* A helper function for UNOP_MEMVAL.  */
1645 
1646 struct value *
eval_op_memval(struct type * expect_type,struct expression * exp,enum noside noside,struct value * arg1,struct type * type)1647 eval_op_memval (struct type *expect_type, struct expression *exp,
1648 		enum noside noside,
1649 		struct value *arg1, struct type *type)
1650 {
1651   if (noside == EVAL_AVOID_SIDE_EFFECTS)
1652     return value_zero (type, lval_memory);
1653   else
1654     return value_at_lazy (type, value_as_address (arg1));
1655 }
1656 
1657 /* A helper function for UNOP_PREINCREMENT.  */
1658 
1659 struct value *
eval_op_preinc(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1)1660 eval_op_preinc (struct type *expect_type, struct expression *exp,
1661 		enum noside noside, enum exp_opcode op,
1662 		struct value *arg1)
1663 {
1664   if (noside == EVAL_AVOID_SIDE_EFFECTS)
1665     return arg1;
1666   else if (unop_user_defined_p (op, arg1))
1667     {
1668       return value_x_unop (arg1, op, noside);
1669     }
1670   else
1671     {
1672       struct value *arg2;
1673       if (ptrmath_type_p (exp->language_defn, value_type (arg1)))
1674 	arg2 = value_ptradd (arg1, 1);
1675       else
1676 	{
1677 	  struct value *tmp = arg1;
1678 
1679 	  arg2 = value_one (value_type (arg1));
1680 	  binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
1681 	  arg2 = value_binop (tmp, arg2, BINOP_ADD);
1682 	}
1683 
1684       return value_assign (arg1, arg2);
1685     }
1686 }
1687 
1688 /* A helper function for UNOP_PREDECREMENT.  */
1689 
1690 struct value *
eval_op_predec(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1)1691 eval_op_predec (struct type *expect_type, struct expression *exp,
1692 		enum noside noside, enum exp_opcode op,
1693 		struct value *arg1)
1694 {
1695   if (noside == EVAL_AVOID_SIDE_EFFECTS)
1696     return arg1;
1697   else if (unop_user_defined_p (op, arg1))
1698     {
1699       return value_x_unop (arg1, op, noside);
1700     }
1701   else
1702     {
1703       struct value *arg2;
1704       if (ptrmath_type_p (exp->language_defn, value_type (arg1)))
1705 	arg2 = value_ptradd (arg1, -1);
1706       else
1707 	{
1708 	  struct value *tmp = arg1;
1709 
1710 	  arg2 = value_one (value_type (arg1));
1711 	  binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
1712 	  arg2 = value_binop (tmp, arg2, BINOP_SUB);
1713 	}
1714 
1715       return value_assign (arg1, arg2);
1716     }
1717 }
1718 
1719 /* A helper function for UNOP_POSTINCREMENT.  */
1720 
1721 struct value *
eval_op_postinc(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1)1722 eval_op_postinc (struct type *expect_type, struct expression *exp,
1723 		 enum noside noside, enum exp_opcode op,
1724 		 struct value *arg1)
1725 {
1726   if (noside == EVAL_AVOID_SIDE_EFFECTS)
1727     return arg1;
1728   else if (unop_user_defined_p (op, arg1))
1729     {
1730       return value_x_unop (arg1, op, noside);
1731     }
1732   else
1733     {
1734       struct value *arg3 = value_non_lval (arg1);
1735       struct value *arg2;
1736 
1737       if (ptrmath_type_p (exp->language_defn, value_type (arg1)))
1738 	arg2 = value_ptradd (arg1, 1);
1739       else
1740 	{
1741 	  struct value *tmp = arg1;
1742 
1743 	  arg2 = value_one (value_type (arg1));
1744 	  binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
1745 	  arg2 = value_binop (tmp, arg2, BINOP_ADD);
1746 	}
1747 
1748       value_assign (arg1, arg2);
1749       return arg3;
1750     }
1751 }
1752 
1753 /* A helper function for UNOP_POSTDECREMENT.  */
1754 
1755 struct value *
eval_op_postdec(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1)1756 eval_op_postdec (struct type *expect_type, struct expression *exp,
1757 		 enum noside noside, enum exp_opcode op,
1758 		 struct value *arg1)
1759 {
1760   if (noside == EVAL_AVOID_SIDE_EFFECTS)
1761     return arg1;
1762   else if (unop_user_defined_p (op, arg1))
1763     {
1764       return value_x_unop (arg1, op, noside);
1765     }
1766   else
1767     {
1768       struct value *arg3 = value_non_lval (arg1);
1769       struct value *arg2;
1770 
1771       if (ptrmath_type_p (exp->language_defn, value_type (arg1)))
1772 	arg2 = value_ptradd (arg1, -1);
1773       else
1774 	{
1775 	  struct value *tmp = arg1;
1776 
1777 	  arg2 = value_one (value_type (arg1));
1778 	  binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
1779 	  arg2 = value_binop (tmp, arg2, BINOP_SUB);
1780 	}
1781 
1782       value_assign (arg1, arg2);
1783       return arg3;
1784     }
1785 }
1786 
1787 /* A helper function for OP_TYPE.  */
1788 
1789 struct value *
eval_op_type(struct type * expect_type,struct expression * exp,enum noside noside,struct type * type)1790 eval_op_type (struct type *expect_type, struct expression *exp,
1791 	      enum noside noside, struct type *type)
1792 {
1793   if (noside == EVAL_AVOID_SIDE_EFFECTS)
1794     return allocate_value (type);
1795   else
1796     error (_("Attempt to use a type name as an expression"));
1797 }
1798 
1799 /* A helper function for BINOP_ASSIGN_MODIFY.  */
1800 
1801 struct value *
eval_binop_assign_modify(struct type * expect_type,struct expression * exp,enum noside noside,enum exp_opcode op,struct value * arg1,struct value * arg2)1802 eval_binop_assign_modify (struct type *expect_type, struct expression *exp,
1803 			  enum noside noside, enum exp_opcode op,
1804 			  struct value *arg1, struct value *arg2)
1805 {
1806   if (noside == EVAL_AVOID_SIDE_EFFECTS)
1807     return arg1;
1808   if (binop_user_defined_p (op, arg1, arg2))
1809     return value_x_binop (arg1, arg2, BINOP_ASSIGN_MODIFY, op, noside);
1810   else if (op == BINOP_ADD && ptrmath_type_p (exp->language_defn,
1811 					      value_type (arg1))
1812 	   && is_integral_type (value_type (arg2)))
1813     arg2 = value_ptradd (arg1, value_as_long (arg2));
1814   else if (op == BINOP_SUB && ptrmath_type_p (exp->language_defn,
1815 					      value_type (arg1))
1816 	   && is_integral_type (value_type (arg2)))
1817     arg2 = value_ptradd (arg1, - value_as_long (arg2));
1818   else
1819     {
1820       struct value *tmp = arg1;
1821 
1822       /* For shift and integer exponentiation operations,
1823 	 only promote the first argument.  */
1824       if ((op == BINOP_LSH || op == BINOP_RSH || op == BINOP_EXP)
1825 	  && is_integral_type (value_type (arg2)))
1826 	unop_promote (exp->language_defn, exp->gdbarch, &tmp);
1827       else
1828 	binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
1829 
1830       arg2 = value_binop (tmp, arg2, op);
1831     }
1832   return value_assign (arg1, arg2);
1833 }
1834 
1835 /* Note that ARGS needs 2 empty slots up front and must end with a
1836    null pointer.  */
1837 static struct value *
eval_op_objc_msgcall(struct type * expect_type,struct expression * exp,enum noside noside,CORE_ADDR selector,value * target,gdb::array_view<value * > args)1838 eval_op_objc_msgcall (struct type *expect_type, struct expression *exp,
1839 		      enum noside noside, CORE_ADDR selector,
1840 		      value *target, gdb::array_view<value *> args)
1841 {
1842   CORE_ADDR responds_selector = 0;
1843   CORE_ADDR method_selector = 0;
1844 
1845   int struct_return = 0;
1846 
1847   struct value *msg_send = NULL;
1848   struct value *msg_send_stret = NULL;
1849   int gnu_runtime = 0;
1850 
1851   struct value *method = NULL;
1852   struct value *called_method = NULL;
1853 
1854   struct type *selector_type = NULL;
1855   struct type *long_type;
1856   struct type *type;
1857 
1858   struct value *ret = NULL;
1859   CORE_ADDR addr = 0;
1860 
1861   value *argvec[5];
1862 
1863   long_type = builtin_type (exp->gdbarch)->builtin_long;
1864   selector_type = builtin_type (exp->gdbarch)->builtin_data_ptr;
1865 
1866   if (value_as_long (target) == 0)
1867     return value_from_longest (long_type, 0);
1868 
1869   if (lookup_minimal_symbol ("objc_msg_lookup", 0, 0).minsym)
1870     gnu_runtime = 1;
1871 
1872   /* Find the method dispatch (Apple runtime) or method lookup
1873      (GNU runtime) function for Objective-C.  These will be used
1874      to lookup the symbol information for the method.  If we
1875      can't find any symbol information, then we'll use these to
1876      call the method, otherwise we can call the method
1877      directly.  The msg_send_stret function is used in the special
1878      case of a method that returns a structure (Apple runtime
1879      only).  */
1880   if (gnu_runtime)
1881     {
1882       type = selector_type;
1883 
1884       type = lookup_function_type (type);
1885       type = lookup_pointer_type (type);
1886       type = lookup_function_type (type);
1887       type = lookup_pointer_type (type);
1888 
1889       msg_send = find_function_in_inferior ("objc_msg_lookup", NULL);
1890       msg_send_stret
1891 	= find_function_in_inferior ("objc_msg_lookup", NULL);
1892 
1893       msg_send = value_from_pointer (type, value_as_address (msg_send));
1894       msg_send_stret = value_from_pointer (type,
1895 					   value_as_address (msg_send_stret));
1896     }
1897   else
1898     {
1899       msg_send = find_function_in_inferior ("objc_msgSend", NULL);
1900       /* Special dispatcher for methods returning structs.  */
1901       msg_send_stret
1902 	= find_function_in_inferior ("objc_msgSend_stret", NULL);
1903     }
1904 
1905   /* Verify the target object responds to this method.  The
1906      standard top-level 'Object' class uses a different name for
1907      the verification method than the non-standard, but more
1908      often used, 'NSObject' class.  Make sure we check for both.  */
1909 
1910   responds_selector
1911     = lookup_child_selector (exp->gdbarch, "respondsToSelector:");
1912   if (responds_selector == 0)
1913     responds_selector
1914       = lookup_child_selector (exp->gdbarch, "respondsTo:");
1915 
1916   if (responds_selector == 0)
1917     error (_("no 'respondsTo:' or 'respondsToSelector:' method"));
1918 
1919   method_selector
1920     = lookup_child_selector (exp->gdbarch, "methodForSelector:");
1921   if (method_selector == 0)
1922     method_selector
1923       = lookup_child_selector (exp->gdbarch, "methodFor:");
1924 
1925   if (method_selector == 0)
1926     error (_("no 'methodFor:' or 'methodForSelector:' method"));
1927 
1928   /* Call the verification method, to make sure that the target
1929      class implements the desired method.  */
1930 
1931   argvec[0] = msg_send;
1932   argvec[1] = target;
1933   argvec[2] = value_from_longest (long_type, responds_selector);
1934   argvec[3] = value_from_longest (long_type, selector);
1935   argvec[4] = 0;
1936 
1937   ret = call_function_by_hand (argvec[0], NULL, {argvec + 1, 3});
1938   if (gnu_runtime)
1939     {
1940       /* Function objc_msg_lookup returns a pointer.  */
1941       argvec[0] = ret;
1942       ret = call_function_by_hand (argvec[0], NULL, {argvec + 1, 3});
1943     }
1944   if (value_as_long (ret) == 0)
1945     error (_("Target does not respond to this message selector."));
1946 
1947   /* Call "methodForSelector:" method, to get the address of a
1948      function method that implements this selector for this
1949      class.  If we can find a symbol at that address, then we
1950      know the return type, parameter types etc.  (that's a good
1951      thing).  */
1952 
1953   argvec[0] = msg_send;
1954   argvec[1] = target;
1955   argvec[2] = value_from_longest (long_type, method_selector);
1956   argvec[3] = value_from_longest (long_type, selector);
1957   argvec[4] = 0;
1958 
1959   ret = call_function_by_hand (argvec[0], NULL, {argvec + 1, 3});
1960   if (gnu_runtime)
1961     {
1962       argvec[0] = ret;
1963       ret = call_function_by_hand (argvec[0], NULL, {argvec + 1, 3});
1964     }
1965 
1966   /* ret should now be the selector.  */
1967 
1968   addr = value_as_long (ret);
1969   if (addr)
1970     {
1971       struct symbol *sym = NULL;
1972 
1973       /* The address might point to a function descriptor;
1974 	 resolve it to the actual code address instead.  */
1975       addr = gdbarch_convert_from_func_ptr_addr
1976 	(exp->gdbarch, addr, current_inferior ()->top_target ());
1977 
1978       /* Is it a high_level symbol?  */
1979       sym = find_pc_function (addr);
1980       if (sym != NULL)
1981 	method = value_of_variable (sym, 0);
1982     }
1983 
1984   /* If we found a method with symbol information, check to see
1985      if it returns a struct.  Otherwise assume it doesn't.  */
1986 
1987   if (method)
1988     {
1989       CORE_ADDR funaddr;
1990       struct type *val_type;
1991 
1992       funaddr = find_function_addr (method, &val_type);
1993 
1994       block_for_pc (funaddr);
1995 
1996       val_type = check_typedef (val_type);
1997 
1998       if ((val_type == NULL)
1999 	  || (val_type->code () == TYPE_CODE_ERROR))
2000 	{
2001 	  if (expect_type != NULL)
2002 	    val_type = expect_type;
2003 	}
2004 
2005       struct_return = using_struct_return (exp->gdbarch, method,
2006 					   val_type);
2007     }
2008   else if (expect_type != NULL)
2009     {
2010       struct_return = using_struct_return (exp->gdbarch, NULL,
2011 					   check_typedef (expect_type));
2012     }
2013 
2014   /* Found a function symbol.  Now we will substitute its
2015      value in place of the message dispatcher (obj_msgSend),
2016      so that we call the method directly instead of thru
2017      the dispatcher.  The main reason for doing this is that
2018      we can now evaluate the return value and parameter values
2019      according to their known data types, in case we need to
2020      do things like promotion, dereferencing, special handling
2021      of structs and doubles, etc.
2022 
2023      We want to use the type signature of 'method', but still
2024      jump to objc_msgSend() or objc_msgSend_stret() to better
2025      mimic the behavior of the runtime.  */
2026 
2027   if (method)
2028     {
2029       if (value_type (method)->code () != TYPE_CODE_FUNC)
2030 	error (_("method address has symbol information "
2031 		 "with non-function type; skipping"));
2032 
2033       /* Create a function pointer of the appropriate type, and
2034 	 replace its value with the value of msg_send or
2035 	 msg_send_stret.  We must use a pointer here, as
2036 	 msg_send and msg_send_stret are of pointer type, and
2037 	 the representation may be different on systems that use
2038 	 function descriptors.  */
2039       if (struct_return)
2040 	called_method
2041 	  = value_from_pointer (lookup_pointer_type (value_type (method)),
2042 				value_as_address (msg_send_stret));
2043       else
2044 	called_method
2045 	  = value_from_pointer (lookup_pointer_type (value_type (method)),
2046 				value_as_address (msg_send));
2047     }
2048   else
2049     {
2050       if (struct_return)
2051 	called_method = msg_send_stret;
2052       else
2053 	called_method = msg_send;
2054     }
2055 
2056 
2057   if (noside == EVAL_AVOID_SIDE_EFFECTS)
2058     {
2059       /* If the return type doesn't look like a function type,
2060 	 call an error.  This can happen if somebody tries to
2061 	 turn a variable into a function call.  This is here
2062 	 because people often want to call, eg, strcmp, which
2063 	 gdb doesn't know is a function.  If gdb isn't asked for
2064 	 it's opinion (ie. through "whatis"), it won't offer
2065 	 it.  */
2066 
2067       struct type *callee_type = value_type (called_method);
2068 
2069       if (callee_type && callee_type->code () == TYPE_CODE_PTR)
2070 	callee_type = TYPE_TARGET_TYPE (callee_type);
2071       callee_type = TYPE_TARGET_TYPE (callee_type);
2072 
2073       if (callee_type)
2074 	{
2075 	  if ((callee_type->code () == TYPE_CODE_ERROR) && expect_type)
2076 	    return allocate_value (expect_type);
2077 	  else
2078 	    return allocate_value (callee_type);
2079 	}
2080       else
2081 	error (_("Expression of type other than "
2082 		 "\"method returning ...\" used as a method"));
2083     }
2084 
2085   /* Now depending on whether we found a symbol for the method,
2086      we will either call the runtime dispatcher or the method
2087      directly.  */
2088 
2089   args[0] = target;
2090   args[1] = value_from_longest (long_type, selector);
2091 
2092   if (gnu_runtime && (method != NULL))
2093     {
2094       /* Function objc_msg_lookup returns a pointer.  */
2095       struct type *tem_type = value_type (called_method);
2096       tem_type = lookup_pointer_type (lookup_function_type (tem_type));
2097       deprecated_set_value_type (called_method, tem_type);
2098       called_method = call_function_by_hand (called_method, NULL, args);
2099     }
2100 
2101   return call_function_by_hand (called_method, NULL, args);
2102 }
2103 
2104 /* Helper function for MULTI_SUBSCRIPT.  */
2105 
2106 static struct value *
eval_multi_subscript(struct type * expect_type,struct expression * exp,enum noside noside,value * arg1,gdb::array_view<value * > args)2107 eval_multi_subscript (struct type *expect_type, struct expression *exp,
2108 		      enum noside noside, value *arg1,
2109 		      gdb::array_view<value *> args)
2110 {
2111   for (value *arg2 : args)
2112     {
2113       if (binop_user_defined_p (MULTI_SUBSCRIPT, arg1, arg2))
2114 	{
2115 	  arg1 = value_x_binop (arg1, arg2, MULTI_SUBSCRIPT, OP_NULL, noside);
2116 	}
2117       else
2118 	{
2119 	  arg1 = coerce_ref (arg1);
2120 	  struct type *type = check_typedef (value_type (arg1));
2121 
2122 	  switch (type->code ())
2123 	    {
2124 	    case TYPE_CODE_PTR:
2125 	    case TYPE_CODE_ARRAY:
2126 	    case TYPE_CODE_STRING:
2127 	      arg1 = value_subscript (arg1, value_as_long (arg2));
2128 	      break;
2129 
2130 	    default:
2131 	      if (type->name ())
2132 		error (_("cannot subscript something of type `%s'"),
2133 		       type->name ());
2134 	      else
2135 		error (_("cannot subscript requested type"));
2136 	    }
2137 	}
2138     }
2139   return (arg1);
2140 }
2141 
2142 namespace expr
2143 {
2144 
2145 value *
evaluate(struct type * expect_type,struct expression * exp,enum noside noside)2146 objc_msgcall_operation::evaluate (struct type *expect_type,
2147 				  struct expression *exp,
2148 				  enum noside noside)
2149 {
2150   enum noside sub_no_side = EVAL_NORMAL;
2151   struct type *selector_type = builtin_type (exp->gdbarch)->builtin_data_ptr;
2152 
2153   if (noside == EVAL_AVOID_SIDE_EFFECTS)
2154     sub_no_side = EVAL_NORMAL;
2155   else
2156     sub_no_side = noside;
2157   value *target
2158     = std::get<1> (m_storage)->evaluate (selector_type, exp, sub_no_side);
2159 
2160   if (value_as_long (target) == 0)
2161     sub_no_side = EVAL_AVOID_SIDE_EFFECTS;
2162   else
2163     sub_no_side = noside;
2164   std::vector<operation_up> &args = std::get<2> (m_storage);
2165   value **argvec = XALLOCAVEC (struct value *, args.size () + 3);
2166   argvec[0] = nullptr;
2167   argvec[1] = nullptr;
2168   for (int i = 0; i < args.size (); ++i)
2169     argvec[i + 2] = args[i]->evaluate_with_coercion (exp, sub_no_side);
2170   argvec[args.size () + 2] = nullptr;
2171 
2172   return eval_op_objc_msgcall (expect_type, exp, noside, std::
2173 			       get<0> (m_storage), target,
2174 			       gdb::make_array_view (argvec,
2175 						     args.size () + 3));
2176 }
2177 
2178 value *
evaluate(struct type * expect_type,struct expression * exp,enum noside noside)2179 multi_subscript_operation::evaluate (struct type *expect_type,
2180 				     struct expression *exp,
2181 				     enum noside noside)
2182 {
2183   value *arg1 = std::get<0> (m_storage)->evaluate_with_coercion (exp, noside);
2184   std::vector<operation_up> &values = std::get<1> (m_storage);
2185   value **argvec = XALLOCAVEC (struct value *, values.size ());
2186   for (int ix = 0; ix < values.size (); ++ix)
2187     argvec[ix] = values[ix]->evaluate_with_coercion (exp, noside);
2188   return eval_multi_subscript (expect_type, exp, noside, arg1,
2189 			       gdb::make_array_view (argvec, values.size ()));
2190 }
2191 
2192 value *
evaluate(struct type * expect_type,struct expression * exp,enum noside noside)2193 logical_and_operation::evaluate (struct type *expect_type,
2194 				 struct expression *exp,
2195 				 enum noside noside)
2196 {
2197   value *arg1 = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
2198 
2199   value *arg2 = std::get<1> (m_storage)->evaluate (nullptr, exp,
2200 						   EVAL_AVOID_SIDE_EFFECTS);
2201 
2202   if (binop_user_defined_p (BINOP_LOGICAL_AND, arg1, arg2))
2203     {
2204       arg2 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
2205       return value_x_binop (arg1, arg2, BINOP_LOGICAL_AND, OP_NULL, noside);
2206     }
2207   else
2208     {
2209       int tem = value_logical_not (arg1);
2210       if (!tem)
2211 	{
2212 	  arg2 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
2213 	  tem = value_logical_not (arg2);
2214 	}
2215       struct type *type = language_bool_type (exp->language_defn,
2216 					      exp->gdbarch);
2217       return value_from_longest (type, !tem);
2218     }
2219 }
2220 
2221 value *
evaluate(struct type * expect_type,struct expression * exp,enum noside noside)2222 logical_or_operation::evaluate (struct type *expect_type,
2223 				struct expression *exp,
2224 				enum noside noside)
2225 {
2226   value *arg1 = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
2227 
2228   value *arg2 = std::get<1> (m_storage)->evaluate (nullptr, exp,
2229 						   EVAL_AVOID_SIDE_EFFECTS);
2230 
2231   if (binop_user_defined_p (BINOP_LOGICAL_OR, arg1, arg2))
2232     {
2233       arg2 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
2234       return value_x_binop (arg1, arg2, BINOP_LOGICAL_OR, OP_NULL, noside);
2235     }
2236   else
2237     {
2238       int tem = value_logical_not (arg1);
2239       if (tem)
2240 	{
2241 	  arg2 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
2242 	  tem = value_logical_not (arg2);
2243 	}
2244 
2245       struct type *type = language_bool_type (exp->language_defn,
2246 					      exp->gdbarch);
2247       return value_from_longest (type, !tem);
2248     }
2249 }
2250 
2251 value *
evaluate(struct type * expect_type,struct expression * exp,enum noside noside)2252 adl_func_operation::evaluate (struct type *expect_type,
2253 			      struct expression *exp,
2254 			      enum noside noside)
2255 {
2256   std::vector<operation_up> &arg_ops = std::get<2> (m_storage);
2257   std::vector<value *> args (arg_ops.size ());
2258   for (int i = 0; i < arg_ops.size (); ++i)
2259     args[i] = arg_ops[i]->evaluate_with_coercion (exp, noside);
2260 
2261   struct symbol *symp;
2262   find_overload_match (args, std::get<0> (m_storage).c_str (),
2263 		       NON_METHOD,
2264 		       nullptr, nullptr,
2265 		       nullptr, &symp, nullptr, 0, noside);
2266   if (SYMBOL_TYPE (symp)->code () == TYPE_CODE_ERROR)
2267     error_unknown_type (symp->print_name ());
2268   value *callee = evaluate_var_value (noside, std::get<1> (m_storage), symp);
2269   return evaluate_subexp_do_call (exp, noside, callee, args,
2270 				  nullptr, expect_type);
2271 
2272 }
2273 
2274 /* This function evaluates brace-initializers (in C/C++) for
2275    structure types.  */
2276 
2277 struct value *
evaluate_struct_tuple(struct value * struct_val,struct expression * exp,enum noside noside,int nargs)2278 array_operation::evaluate_struct_tuple (struct value *struct_val,
2279 					struct expression *exp,
2280 					enum noside noside, int nargs)
2281 {
2282   const std::vector<operation_up> &in_args = std::get<2> (m_storage);
2283   struct type *struct_type = check_typedef (value_type (struct_val));
2284   struct type *field_type;
2285   int fieldno = -1;
2286 
2287   int idx = 0;
2288   while (--nargs >= 0)
2289     {
2290       struct value *val = NULL;
2291       int bitpos, bitsize;
2292       bfd_byte *addr;
2293 
2294       fieldno++;
2295       /* Skip static fields.  */
2296       while (fieldno < struct_type->num_fields ()
2297 	     && field_is_static (&struct_type->field (fieldno)))
2298 	fieldno++;
2299       if (fieldno >= struct_type->num_fields ())
2300 	error (_("too many initializers"));
2301       field_type = struct_type->field (fieldno).type ();
2302       if (field_type->code () == TYPE_CODE_UNION
2303 	  && TYPE_FIELD_NAME (struct_type, fieldno)[0] == '0')
2304 	error (_("don't know which variant you want to set"));
2305 
2306       /* Here, struct_type is the type of the inner struct,
2307 	 while substruct_type is the type of the inner struct.
2308 	 These are the same for normal structures, but a variant struct
2309 	 contains anonymous union fields that contain substruct fields.
2310 	 The value fieldno is the index of the top-level (normal or
2311 	 anonymous union) field in struct_field, while the value
2312 	 subfieldno is the index of the actual real (named inner) field
2313 	 in substruct_type.  */
2314 
2315       field_type = struct_type->field (fieldno).type ();
2316       if (val == 0)
2317 	val = in_args[idx++]->evaluate (field_type, exp, noside);
2318 
2319       /* Now actually set the field in struct_val.  */
2320 
2321       /* Assign val to field fieldno.  */
2322       if (value_type (val) != field_type)
2323 	val = value_cast (field_type, val);
2324 
2325       bitsize = TYPE_FIELD_BITSIZE (struct_type, fieldno);
2326       bitpos = TYPE_FIELD_BITPOS (struct_type, fieldno);
2327       addr = value_contents_writeable (struct_val) + bitpos / 8;
2328       if (bitsize)
2329 	modify_field (struct_type, addr,
2330 		      value_as_long (val), bitpos % 8, bitsize);
2331       else
2332 	memcpy (addr, value_contents (val),
2333 		TYPE_LENGTH (value_type (val)));
2334 
2335     }
2336   return struct_val;
2337 }
2338 
2339 value *
evaluate(struct type * expect_type,struct expression * exp,enum noside noside)2340 array_operation::evaluate (struct type *expect_type,
2341 			   struct expression *exp,
2342 			   enum noside noside)
2343 {
2344   int tem;
2345   int tem2 = std::get<0> (m_storage);
2346   int tem3 = std::get<1> (m_storage);
2347   const std::vector<operation_up> &in_args = std::get<2> (m_storage);
2348   int nargs = tem3 - tem2 + 1;
2349   struct type *type = expect_type ? check_typedef (expect_type) : nullptr;
2350 
2351   if (expect_type != nullptr
2352       && type->code () == TYPE_CODE_STRUCT)
2353     {
2354       struct value *rec = allocate_value (expect_type);
2355 
2356       memset (value_contents_raw (rec), '\0', TYPE_LENGTH (type));
2357       return evaluate_struct_tuple (rec, exp, noside, nargs);
2358     }
2359 
2360   if (expect_type != nullptr
2361       && type->code () == TYPE_CODE_ARRAY)
2362     {
2363       struct type *range_type = type->index_type ();
2364       struct type *element_type = TYPE_TARGET_TYPE (type);
2365       struct value *array = allocate_value (expect_type);
2366       int element_size = TYPE_LENGTH (check_typedef (element_type));
2367       LONGEST low_bound, high_bound, index;
2368 
2369       if (!get_discrete_bounds (range_type, &low_bound, &high_bound))
2370 	{
2371 	  low_bound = 0;
2372 	  high_bound = (TYPE_LENGTH (type) / element_size) - 1;
2373 	}
2374       index = low_bound;
2375       memset (value_contents_raw (array), 0, TYPE_LENGTH (expect_type));
2376       for (tem = nargs; --nargs >= 0;)
2377 	{
2378 	  struct value *element;
2379 
2380 	  element = in_args[index - low_bound]->evaluate (element_type,
2381 							  exp, noside);
2382 	  if (value_type (element) != element_type)
2383 	    element = value_cast (element_type, element);
2384 	  if (index > high_bound)
2385 	    /* To avoid memory corruption.  */
2386 	    error (_("Too many array elements"));
2387 	  memcpy (value_contents_raw (array)
2388 		  + (index - low_bound) * element_size,
2389 		  value_contents (element),
2390 		  element_size);
2391 	  index++;
2392 	}
2393       return array;
2394     }
2395 
2396   if (expect_type != nullptr
2397       && type->code () == TYPE_CODE_SET)
2398     {
2399       struct value *set = allocate_value (expect_type);
2400       gdb_byte *valaddr = value_contents_raw (set);
2401       struct type *element_type = type->index_type ();
2402       struct type *check_type = element_type;
2403       LONGEST low_bound, high_bound;
2404 
2405       /* Get targettype of elementtype.  */
2406       while (check_type->code () == TYPE_CODE_RANGE
2407 	     || check_type->code () == TYPE_CODE_TYPEDEF)
2408 	check_type = TYPE_TARGET_TYPE (check_type);
2409 
2410       if (!get_discrete_bounds (element_type, &low_bound, &high_bound))
2411 	error (_("(power)set type with unknown size"));
2412       memset (valaddr, '\0', TYPE_LENGTH (type));
2413       int idx = 0;
2414       for (tem = 0; tem < nargs; tem++)
2415 	{
2416 	  LONGEST range_low, range_high;
2417 	  struct type *range_low_type, *range_high_type;
2418 	  struct value *elem_val;
2419 
2420 	  elem_val = in_args[idx++]->evaluate (element_type, exp, noside);
2421 	  range_low_type = range_high_type = value_type (elem_val);
2422 	  range_low = range_high = value_as_long (elem_val);
2423 
2424 	  /* Check types of elements to avoid mixture of elements from
2425 	     different types. Also check if type of element is "compatible"
2426 	     with element type of powerset.  */
2427 	  if (range_low_type->code () == TYPE_CODE_RANGE)
2428 	    range_low_type = TYPE_TARGET_TYPE (range_low_type);
2429 	  if (range_high_type->code () == TYPE_CODE_RANGE)
2430 	    range_high_type = TYPE_TARGET_TYPE (range_high_type);
2431 	  if ((range_low_type->code () != range_high_type->code ())
2432 	      || (range_low_type->code () == TYPE_CODE_ENUM
2433 		  && (range_low_type != range_high_type)))
2434 	    /* different element modes.  */
2435 	    error (_("POWERSET tuple elements of different mode"));
2436 	  if ((check_type->code () != range_low_type->code ())
2437 	      || (check_type->code () == TYPE_CODE_ENUM
2438 		  && range_low_type != check_type))
2439 	    error (_("incompatible POWERSET tuple elements"));
2440 	  if (range_low > range_high)
2441 	    {
2442 	      warning (_("empty POWERSET tuple range"));
2443 	      continue;
2444 	    }
2445 	  if (range_low < low_bound || range_high > high_bound)
2446 	    error (_("POWERSET tuple element out of range"));
2447 	  range_low -= low_bound;
2448 	  range_high -= low_bound;
2449 	  for (; range_low <= range_high; range_low++)
2450 	    {
2451 	      int bit_index = (unsigned) range_low % TARGET_CHAR_BIT;
2452 
2453 	      if (gdbarch_byte_order (exp->gdbarch) == BFD_ENDIAN_BIG)
2454 		bit_index = TARGET_CHAR_BIT - 1 - bit_index;
2455 	      valaddr[(unsigned) range_low / TARGET_CHAR_BIT]
2456 		|= 1 << bit_index;
2457 	    }
2458 	}
2459       return set;
2460     }
2461 
2462   value **argvec = XALLOCAVEC (struct value *, nargs);
2463   for (tem = 0; tem < nargs; tem++)
2464     {
2465       /* Ensure that array expressions are coerced into pointer
2466 	 objects.  */
2467       argvec[tem] = in_args[tem]->evaluate_with_coercion (exp, noside);
2468     }
2469   return value_array (tem2, tem3, argvec);
2470 }
2471 
2472 }
2473 
2474 
2475 /* Helper for evaluate_subexp_for_address.  */
2476 
2477 static value *
evaluate_subexp_for_address_base(struct expression * exp,enum noside noside,value * x)2478 evaluate_subexp_for_address_base (struct expression *exp, enum noside noside,
2479 				  value *x)
2480 {
2481   if (noside == EVAL_AVOID_SIDE_EFFECTS)
2482     {
2483       struct type *type = check_typedef (value_type (x));
2484 
2485       if (TYPE_IS_REFERENCE (type))
2486 	return value_zero (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2487 			   not_lval);
2488       else if (VALUE_LVAL (x) == lval_memory || value_must_coerce_to_target (x))
2489 	return value_zero (lookup_pointer_type (value_type (x)),
2490 			   not_lval);
2491       else
2492 	error (_("Attempt to take address of "
2493 		 "value not located in memory."));
2494     }
2495   return value_addr (x);
2496 }
2497 
2498 namespace expr
2499 {
2500 
2501 value *
evaluate_for_cast(struct type * expect_type,struct expression * exp,enum noside noside)2502 operation::evaluate_for_cast (struct type *expect_type,
2503 			      struct expression *exp,
2504 			      enum noside noside)
2505 {
2506   value *val = evaluate (expect_type, exp, noside);
2507   return value_cast (expect_type, val);
2508 }
2509 
2510 value *
evaluate_for_address(struct expression * exp,enum noside noside)2511 operation::evaluate_for_address (struct expression *exp, enum noside noside)
2512 {
2513   value *val = evaluate (nullptr, exp, noside);
2514   return evaluate_subexp_for_address_base (exp, noside, val);
2515 }
2516 
2517 value *
evaluate_for_address(struct expression * exp,enum noside noside)2518 scope_operation::evaluate_for_address (struct expression *exp,
2519 				       enum noside noside)
2520 {
2521   value *x = value_aggregate_elt (std::get<0> (m_storage),
2522 				  std::get<1> (m_storage).c_str (),
2523 				  NULL, 1, noside);
2524   if (x == NULL)
2525     error (_("There is no field named %s"), std::get<1> (m_storage).c_str ());
2526   return x;
2527 }
2528 
2529 value *
evaluate_for_address(struct expression * exp,enum noside noside)2530 unop_ind_base_operation::evaluate_for_address (struct expression *exp,
2531 					       enum noside noside)
2532 {
2533   value *x = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
2534 
2535   /* We can't optimize out "&*" if there's a user-defined operator*.  */
2536   if (unop_user_defined_p (UNOP_IND, x))
2537     {
2538       x = value_x_unop (x, UNOP_IND, noside);
2539       return evaluate_subexp_for_address_base (exp, noside, x);
2540     }
2541 
2542   return coerce_array (x);
2543 }
2544 
2545 value *
evaluate_for_address(struct expression * exp,enum noside noside)2546 var_msym_value_operation::evaluate_for_address (struct expression *exp,
2547 						enum noside noside)
2548 {
2549   const bound_minimal_symbol &b = std::get<0> (m_storage);
2550   value *val = evaluate_var_msym_value (noside, b.objfile, b.minsym);
2551   if (noside == EVAL_AVOID_SIDE_EFFECTS)
2552     {
2553       struct type *type = lookup_pointer_type (value_type (val));
2554       return value_zero (type, not_lval);
2555     }
2556   else
2557     return value_addr (val);
2558 }
2559 
2560 value *
evaluate_for_address(struct expression * exp,enum noside noside)2561 unop_memval_operation::evaluate_for_address (struct expression *exp,
2562 					     enum noside noside)
2563 {
2564   return value_cast (lookup_pointer_type (std::get<1> (m_storage)),
2565 		     std::get<0> (m_storage)->evaluate (nullptr, exp, noside));
2566 }
2567 
2568 value *
evaluate_for_address(struct expression * exp,enum noside noside)2569 unop_memval_type_operation::evaluate_for_address (struct expression *exp,
2570 						  enum noside noside)
2571 {
2572   value *typeval = std::get<0> (m_storage)->evaluate (nullptr, exp,
2573 						      EVAL_AVOID_SIDE_EFFECTS);
2574   struct type *type = value_type (typeval);
2575   return value_cast (lookup_pointer_type (type),
2576 		     std::get<1> (m_storage)->evaluate (nullptr, exp, noside));
2577 }
2578 
2579 value *
evaluate_for_address(struct expression * exp,enum noside noside)2580 var_value_operation::evaluate_for_address (struct expression *exp,
2581 					   enum noside noside)
2582 {
2583   symbol *var = std::get<0> (m_storage).symbol;
2584 
2585   /* C++: The "address" of a reference should yield the address
2586    * of the object pointed to.  Let value_addr() deal with it.  */
2587   if (TYPE_IS_REFERENCE (SYMBOL_TYPE (var)))
2588     return operation::evaluate_for_address (exp, noside);
2589 
2590   if (noside == EVAL_AVOID_SIDE_EFFECTS)
2591     {
2592       struct type *type = lookup_pointer_type (SYMBOL_TYPE (var));
2593       enum address_class sym_class = SYMBOL_CLASS (var);
2594 
2595       if (sym_class == LOC_CONST
2596 	  || sym_class == LOC_CONST_BYTES
2597 	  || sym_class == LOC_REGISTER)
2598 	error (_("Attempt to take address of register or constant."));
2599 
2600       return value_zero (type, not_lval);
2601     }
2602   else
2603     return address_of_variable (var, std::get<0> (m_storage).block);
2604 }
2605 
2606 value *
evaluate_with_coercion(struct expression * exp,enum noside noside)2607 var_value_operation::evaluate_with_coercion (struct expression *exp,
2608 					     enum noside noside)
2609 {
2610   struct symbol *var = std::get<0> (m_storage).symbol;
2611   struct type *type = check_typedef (SYMBOL_TYPE (var));
2612   if (type->code () == TYPE_CODE_ARRAY
2613       && !type->is_vector ()
2614       && CAST_IS_CONVERSION (exp->language_defn))
2615     {
2616       struct value *val = address_of_variable (var,
2617 					       std::get<0> (m_storage).block);
2618       return value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)), val);
2619     }
2620   return evaluate (nullptr, exp, noside);
2621 }
2622 
2623 }
2624 
2625 /* Helper function for evaluating the size of a type.  */
2626 
2627 static value *
evaluate_subexp_for_sizeof_base(struct expression * exp,struct type * type)2628 evaluate_subexp_for_sizeof_base (struct expression *exp, struct type *type)
2629 {
2630   /* FIXME: This should be size_t.  */
2631   struct type *size_type = builtin_type (exp->gdbarch)->builtin_int;
2632   /* $5.3.3/2 of the C++ Standard (n3290 draft) says of sizeof:
2633      "When applied to a reference or a reference type, the result is
2634      the size of the referenced type."  */
2635   type = check_typedef (type);
2636   if (exp->language_defn->la_language == language_cplus
2637       && (TYPE_IS_REFERENCE (type)))
2638     type = check_typedef (TYPE_TARGET_TYPE (type));
2639   return value_from_longest (size_type, (LONGEST) TYPE_LENGTH (type));
2640 }
2641 
2642 namespace expr
2643 {
2644 
2645 value *
evaluate_for_sizeof(struct expression * exp,enum noside noside)2646 operation::evaluate_for_sizeof (struct expression *exp, enum noside noside)
2647 {
2648   value *val = evaluate (nullptr, exp, EVAL_AVOID_SIDE_EFFECTS);
2649   return evaluate_subexp_for_sizeof_base (exp, value_type (val));
2650 }
2651 
2652 value *
evaluate_for_sizeof(struct expression * exp,enum noside noside)2653 var_msym_value_operation::evaluate_for_sizeof (struct expression *exp,
2654 					       enum noside noside)
2655 
2656 {
2657   const bound_minimal_symbol &b = std::get<0> (m_storage);
2658   value *mval = evaluate_var_msym_value (noside, b.objfile, b.minsym);
2659 
2660   struct type *type = value_type (mval);
2661   if (type->code () == TYPE_CODE_ERROR)
2662     error_unknown_type (b.minsym->print_name ());
2663 
2664   /* FIXME: This should be size_t.  */
2665   struct type *size_type = builtin_type (exp->gdbarch)->builtin_int;
2666   return value_from_longest (size_type, TYPE_LENGTH (type));
2667 }
2668 
2669 value *
evaluate_for_sizeof(struct expression * exp,enum noside noside)2670 subscript_operation::evaluate_for_sizeof (struct expression *exp,
2671 					  enum noside noside)
2672 {
2673   if (noside == EVAL_NORMAL)
2674     {
2675       value *val = std::get<0> (m_storage)->evaluate (nullptr, exp,
2676 						      EVAL_AVOID_SIDE_EFFECTS);
2677       struct type *type = check_typedef (value_type (val));
2678       if (type->code () == TYPE_CODE_ARRAY)
2679 	{
2680 	  type = check_typedef (TYPE_TARGET_TYPE (type));
2681 	  if (type->code () == TYPE_CODE_ARRAY)
2682 	    {
2683 	      type = type->index_type ();
2684 	      /* Only re-evaluate the right hand side if the resulting type
2685 		 is a variable length type.  */
2686 	      if (type->bounds ()->flag_bound_evaluated)
2687 		{
2688 		  val = evaluate (nullptr, exp, EVAL_NORMAL);
2689 		  /* FIXME: This should be size_t.  */
2690 		  struct type *size_type
2691 		    = builtin_type (exp->gdbarch)->builtin_int;
2692 		  return value_from_longest
2693 		    (size_type, (LONGEST) TYPE_LENGTH (value_type (val)));
2694 		}
2695 	    }
2696 	}
2697     }
2698 
2699   return operation::evaluate_for_sizeof (exp, noside);
2700 }
2701 
2702 value *
evaluate_for_sizeof(struct expression * exp,enum noside noside)2703 unop_ind_base_operation::evaluate_for_sizeof (struct expression *exp,
2704 					      enum noside noside)
2705 {
2706   value *val = std::get<0> (m_storage)->evaluate (nullptr, exp,
2707 						  EVAL_AVOID_SIDE_EFFECTS);
2708   struct type *type = check_typedef (value_type (val));
2709   if (type->code () != TYPE_CODE_PTR
2710       && !TYPE_IS_REFERENCE (type)
2711       && type->code () != TYPE_CODE_ARRAY)
2712     error (_("Attempt to take contents of a non-pointer value."));
2713   type = TYPE_TARGET_TYPE (type);
2714   if (is_dynamic_type (type))
2715     type = value_type (value_ind (val));
2716   /* FIXME: This should be size_t.  */
2717   struct type *size_type = builtin_type (exp->gdbarch)->builtin_int;
2718   return value_from_longest (size_type, (LONGEST) TYPE_LENGTH (type));
2719 }
2720 
2721 value *
evaluate_for_sizeof(struct expression * exp,enum noside noside)2722 unop_memval_operation::evaluate_for_sizeof (struct expression *exp,
2723 					    enum noside noside)
2724 {
2725   return evaluate_subexp_for_sizeof_base (exp, std::get<1> (m_storage));
2726 }
2727 
2728 value *
evaluate_for_sizeof(struct expression * exp,enum noside noside)2729 unop_memval_type_operation::evaluate_for_sizeof (struct expression *exp,
2730 						 enum noside noside)
2731 {
2732   value *typeval = std::get<0> (m_storage)->evaluate (nullptr, exp,
2733 						      EVAL_AVOID_SIDE_EFFECTS);
2734   return evaluate_subexp_for_sizeof_base (exp, value_type (typeval));
2735 }
2736 
2737 value *
evaluate_for_sizeof(struct expression * exp,enum noside noside)2738 var_value_operation::evaluate_for_sizeof (struct expression *exp,
2739 					  enum noside noside)
2740 {
2741   struct type *type = SYMBOL_TYPE (std::get<0> (m_storage).symbol);
2742   if (is_dynamic_type (type))
2743     {
2744       value *val = evaluate (nullptr, exp, EVAL_NORMAL);
2745       type = value_type (val);
2746       if (type->code () == TYPE_CODE_ARRAY)
2747 	{
2748 	  /* FIXME: This should be size_t.  */
2749 	  struct type *size_type = builtin_type (exp->gdbarch)->builtin_int;
2750 	  if (type_not_allocated (type) || type_not_associated (type))
2751 	    return value_zero (size_type, not_lval);
2752 	  else if (is_dynamic_type (type->index_type ())
2753 		   && type->bounds ()->high.kind () == PROP_UNDEFINED)
2754 	    return allocate_optimized_out_value (size_type);
2755 	}
2756     }
2757   return evaluate_subexp_for_sizeof_base (exp, type);
2758 }
2759 
2760 value *
evaluate_for_cast(struct type * to_type,struct expression * exp,enum noside noside)2761 var_msym_value_operation::evaluate_for_cast (struct type *to_type,
2762 					     struct expression *exp,
2763 					     enum noside noside)
2764 {
2765   if (noside == EVAL_AVOID_SIDE_EFFECTS)
2766     return value_zero (to_type, not_lval);
2767 
2768   const bound_minimal_symbol &b = std::get<0> (m_storage);
2769   value *val = evaluate_var_msym_value (noside, b.objfile, b.minsym);
2770 
2771   val = value_cast (to_type, val);
2772 
2773   /* Don't allow e.g. '&(int)var_with_no_debug_info'.  */
2774   if (VALUE_LVAL (val) == lval_memory)
2775     {
2776       if (value_lazy (val))
2777 	value_fetch_lazy (val);
2778       VALUE_LVAL (val) = not_lval;
2779     }
2780   return val;
2781 }
2782 
2783 value *
evaluate_for_cast(struct type * to_type,struct expression * exp,enum noside noside)2784 var_value_operation::evaluate_for_cast (struct type *to_type,
2785 					struct expression *exp,
2786 					enum noside noside)
2787 {
2788   value *val = evaluate_var_value (noside,
2789 				   std::get<0> (m_storage).block,
2790 				   std::get<0> (m_storage).symbol);
2791 
2792   val = value_cast (to_type, val);
2793 
2794   /* Don't allow e.g. '&(int)var_with_no_debug_info'.  */
2795   if (VALUE_LVAL (val) == lval_memory)
2796     {
2797       if (value_lazy (val))
2798 	value_fetch_lazy (val);
2799       VALUE_LVAL (val) = not_lval;
2800     }
2801   return val;
2802 }
2803 
2804 }
2805 
2806 /* Parse a type expression in the string [P..P+LENGTH).  */
2807 
2808 struct type *
parse_and_eval_type(const char * p,int length)2809 parse_and_eval_type (const char *p, int length)
2810 {
2811   char *tmp = (char *) alloca (length + 4);
2812 
2813   tmp[0] = '(';
2814   memcpy (tmp + 1, p, length);
2815   tmp[length + 1] = ')';
2816   tmp[length + 2] = '0';
2817   tmp[length + 3] = '\0';
2818   expression_up expr = parse_expression (tmp);
2819   expr::unop_cast_operation *op
2820     = dynamic_cast<expr::unop_cast_operation *> (expr->op.get ());
2821   if (op == nullptr)
2822     error (_("Internal error in eval_type."));
2823   return op->get_type ();
2824 }
2825