From 7c711119166fc1c60c756059f39c6703d57eedbf Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 27 Dec 2018 12:16:06 -0700 Subject: [PATCH] Avoid questionable casts in py-symtab.c py-symtab.c has some questionable casts of Py_None to symtab_object*. This patch avoids these casts by instead using downcasts at the appropriate places. gdb/ChangeLog 2019-01-03 Tom Tromey * python/py-symtab.c (salpy_str): Update. (struct salpy_sal_object) : Now a PyObject. (salpy_dealloc): Update. (del_objfile_sal): Use gdbpy_ref. --- gdb/ChangeLog | 7 +++++++ gdb/python/py-symtab.c | 39 +++++++++++++++++++++++---------------- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3e8f66b..2292eaa 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 2019-01-03 Tom Tromey + * python/py-symtab.c (salpy_str): Update. + (struct salpy_sal_object) : Now a PyObject. + (salpy_dealloc): Update. + (del_objfile_sal): Use gdbpy_ref. + +2019-01-03 Tom Tromey + * python/py-type.c (convert_field): Use new_reference. Return gdbpy_ref. (make_fielditem): Return gdbpy_ref. diff --git a/gdb/python/py-symtab.c b/gdb/python/py-symtab.c index e4a10dc..a5f376a 100644 --- a/gdb/python/py-symtab.c +++ b/gdb/python/py-symtab.c @@ -58,7 +58,7 @@ static const struct objfile_data *stpy_objfile_data_key; typedef struct salpy_sal_object { PyObject_HEAD /* The GDB Symbol table structure. */ - symtab_object *symtab; + PyObject *symtab; /* The GDB Symbol table and line structure. */ struct symtab_and_line *sal; /* A Symtab and line object is associated with an objfile, so keep @@ -227,8 +227,13 @@ salpy_str (PyObject *self) SALPY_REQUIRE_VALID (self, sal); sal_obj = (sal_object *) self; - filename = (sal_obj->symtab == (symtab_object *) Py_None) - ? "" : symtab_to_filename_for_display (sal_obj->symtab->symtab); + if (sal_obj->symtab == Py_None) + filename = ""; + else + { + symtab *symtab = symtab_object_to_symtab (sal_obj->symtab); + filename = symtab_to_filename_for_display (symtab); + } return PyString_FromFormat ("symbol and line for %s, line %d", filename, sal->line); @@ -323,9 +328,10 @@ salpy_dealloc (PyObject *self) if (self_sal->prev) self_sal->prev->next = self_sal->next; - else if (self_sal->symtab != (symtab_object * ) Py_None) - set_objfile_data (SYMTAB_OBJFILE (self_sal->symtab->symtab), - salpy_objfile_data_key, self_sal->next); + else if (self_sal->symtab != Py_None) + set_objfile_data + (SYMTAB_OBJFILE (symtab_object_to_symtab (self_sal->symtab)), + salpy_objfile_data_key, self_sal->next); if (self_sal->next) self_sal->next->prev = self_sal->prev; @@ -343,11 +349,11 @@ salpy_dealloc (PyObject *self) static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION set_sal (sal_object *sal_obj, struct symtab_and_line sal) { - symtab_object *symtab_obj; + PyObject *symtab_obj; if (sal.symtab) { - symtab_obj = (symtab_object *) symtab_to_symtab_object (sal.symtab); + symtab_obj = symtab_to_symtab_object (sal.symtab); /* If a symtab existed in the sal, but it cannot be duplicated, we exit. */ if (symtab_obj == NULL) @@ -355,7 +361,7 @@ set_sal (sal_object *sal_obj, struct symtab_and_line sal) } else { - symtab_obj = (symtab_object *) Py_None; + symtab_obj = Py_None; Py_INCREF (Py_None); } @@ -367,16 +373,17 @@ set_sal (sal_object *sal_obj, struct symtab_and_line sal) /* If the SAL does not have a symtab, we do not add it to the objfile cleanup observer linked list. */ - if (sal_obj->symtab != (symtab_object *)Py_None) + if (sal_obj->symtab != Py_None) { + symtab *symtab = symtab_object_to_symtab (sal_obj->symtab); + sal_obj->next - = ((struct salpy_sal_object *) - objfile_data (SYMTAB_OBJFILE (sal_obj->symtab->symtab), - salpy_objfile_data_key)); + = ((struct salpy_sal_object *) objfile_data (SYMTAB_OBJFILE (symtab), + salpy_objfile_data_key)); if (sal_obj->next) sal_obj->next->prev = sal_obj; - set_objfile_data (SYMTAB_OBJFILE (sal_obj->symtab->symtab), + set_objfile_data (SYMTAB_OBJFILE (symtab), salpy_objfile_data_key, sal_obj); } else @@ -491,8 +498,8 @@ del_objfile_sal (struct objfile *objfile, void *datum) { sal_object *next = obj->next; - Py_DECREF (obj->symtab); - obj->symtab = (symtab_object *) Py_None; + gdbpy_ref<> tmp (obj->symtab); + obj->symtab = Py_None; Py_INCREF (Py_None); obj->next = NULL; -- 2.7.4