Fix printing of global variable stubs if no inferior is running

Since 3c45e9f915 gdb crashes when trying
to print a global variable stub without a running inferior, because of
a missing nullptr-check (the block_scope function took care of that
check before it was converted to a method).

With this check it works again:
```
(gdb) print s
$1 = <incomplete type>
```

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31128
Approved-By: Tom Tromey <tom@tromey.com>
This commit is contained in:
Hannes Domani 2023-12-08 19:06:14 +01:00
parent cff7135813
commit 576745e26c
3 changed files with 68 additions and 1 deletions

View file

@ -1027,7 +1027,11 @@ cp_lookup_transparent_type (const char *name)
/* If that doesn't work and we're within a namespace, look there
instead. */
scope = get_selected_block (0)->scope ();
const block *block = get_selected_block (0);
if (block == nullptr)
return nullptr;
scope = block->scope ();
if (scope[0] == '\0')
return NULL;

View file

@ -0,0 +1,31 @@
/* This testcase is part of GDB, the GNU debugger.
Copyright 2023 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 <http://www.gnu.org/licenses/>. */
struct S
{
S (int);
virtual ~S ();
int m_i;
};
S s (5);
int main ()
{
return 0;
}

View file

@ -0,0 +1,32 @@
# Copyright (C) 2023 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 <http://www.gnu.org/licenses/>.
# This file is part of the GDB testsuite.
# It tests printing of a global stub without inferior.
require allow_cplus_tests
standard_testfile .cc
set objfile [standard_output_file ${testfile}.o]
if { [gdb_compile $srcdir/$subdir/$srcfile $objfile object \
{c++ debug}] != "" } {
untested "failed to compile"
return -1
}
clean_restart $objfile
gdb_test "print s" " = <incomplete type>"