diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bc6c20375b7..433b239b58f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2019-09-26 Tom Tromey + + * python/py-type.c (type_to_type_object): Call check_typedef + for stub types. + 2019-09-26 Tom Tromey * utils.h (initialize_utils): Don't declare. diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c index e8af6f60e1e..134f76dafb0 100644 --- a/gdb/python/py-type.c +++ b/gdb/python/py-type.c @@ -1334,6 +1334,17 @@ type_to_type_object (struct type *type) { type_object *type_obj; + try + { + /* Try not to let stub types leak out to Python. */ + if (TYPE_STUB (type)) + type = check_typedef (type); + } + catch (...) + { + /* Just ignore failures in check_typedef. */ + } + type_obj = PyObject_New (type_object, &type_object_type); if (type_obj) set_type (type_obj, type); diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 706c5da420a..56ee785b1f1 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2019-09-26 Tom Tromey + + * gdb.ada/py_taft.exp: New file. + * gdb.ada/py_taft/main.adb: New file. + * gdb.ada/py_taft/pkg.adb: New file. + * gdb.ada/py_taft/pkg.ads: New file. + 2019-09-24 Tom de Vries PR gdb/24598 diff --git a/gdb/testsuite/gdb.ada/py_taft.exp b/gdb/testsuite/gdb.ada/py_taft.exp new file mode 100644 index 00000000000..71ac3327380 --- /dev/null +++ b/gdb/testsuite/gdb.ada/py_taft.exp @@ -0,0 +1,38 @@ +# Copyright 2019 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +load_lib "ada.exp" +load_lib gdb-python.exp + +standard_ada_testfile main + +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable debug] != ""} { + return -1 +} + +clean_restart ${testfile} + +# Skip this testcase if Python scripting is not enabled. +if { [skip_python_tests] } { continue } + +set bp_location [gdb_get_line_number "STOP" ${testdir}/main.adb] +runto "main.adb:$bp_location" + +gdb_test_no_output "python v = gdb.parse_and_eval('v')" + +gdb_test "python print(v.dereference().type.code is gdb.TYPE_CODE_VOID)" \ + "False" +gdb_test "python print(v.type.strip_typedefs().target().code is gdb.TYPE_CODE_VOID)" \ + "False" diff --git a/gdb/testsuite/gdb.ada/py_taft/main.adb b/gdb/testsuite/gdb.ada/py_taft/main.adb new file mode 100644 index 00000000000..b0ba8bdb90e --- /dev/null +++ b/gdb/testsuite/gdb.ada/py_taft/main.adb @@ -0,0 +1,22 @@ +-- Copyright 2019 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +with Pkg; + +procedure Main is + V : Pkg.Value := Pkg.Create (42); +begin + null; -- STOP +end Main; diff --git a/gdb/testsuite/gdb.ada/py_taft/pkg.adb b/gdb/testsuite/gdb.ada/py_taft/pkg.adb new file mode 100644 index 00000000000..94ce4b1e851 --- /dev/null +++ b/gdb/testsuite/gdb.ada/py_taft/pkg.adb @@ -0,0 +1,27 @@ +-- Copyright 2019 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +package body Pkg is + + type Value_Record is record + I : Integer; + end record; + + function Create (I : Integer) return Value is + begin + return new Value_Record'(I => I); + end Create; + +end Pkg; diff --git a/gdb/testsuite/gdb.ada/py_taft/pkg.ads b/gdb/testsuite/gdb.ada/py_taft/pkg.ads new file mode 100644 index 00000000000..daa4edbf1b1 --- /dev/null +++ b/gdb/testsuite/gdb.ada/py_taft/pkg.ads @@ -0,0 +1,22 @@ +-- Copyright 2019 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +package Pkg is + type Value is private; + function Create (I : Integer) return Value; +private + type Value_Record; + type Value is access all Value_Record; +end Pkg;