This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Diagnose invalid pointer arithmetic on gdb.Value


On 20/09/16 16:41 +0100, Pedro Alves wrote:
On 09/20/2016 03:46 PM, Jonathan Wakely wrote:
Instead of passing invalid arguments to value_binop and getting a
misleading error, raise a TypeError directly in valpy_binop_throw.

Did you try changing value_binop instead?  The error string seems
misleading even in C:

(gdb) p ptr
$1 = 0x601040 <buf> ""
(gdb) p ptr + 1
$2 = 0x601041 <buf+1> ""
(gdb) p ptr + 1.0
Argument to arithmetic operation not a number or boolean.
(gdb)

Ah, so it's not specific to the Python API, in which case changing
value_binop (or scalar_binop more accurately) might make sense.
The check in scalar_binop *does* check for numbers, so the error is
accurate. The argument that triggers the errors is actually the
pointer argument, not the float one:

 if ((TYPE_CODE (type1) != TYPE_CODE_FLT
      && TYPE_CODE (type1) != TYPE_CODE_DECFLOAT
      && !is_integral_type (type1))
     || (TYPE_CODE (type2) != TYPE_CODE_FLT
	  && TYPE_CODE (type2) != TYPE_CODE_DECFLOAT
	  && !is_integral_type (type2)))
   error (_("Argument to arithmetic operation not a number or boolean."));


The problem is that pointer arithmetic with invalid operands ends up
here, because value_ptr{add,sub,diff} don't get called for invalid
arguments.

So maybe a better fix is to first check if either argument is a
pointer and give a more specific error, as attached (untested).

Attachment: ptrarith.txt
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]