From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2126) id 1E8013856DFE; Mon, 10 Oct 2022 17:38:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1E8013856DFE DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1665423509; bh=ghrsPQeq7hZDLjPe2IT5dDm4MoI8ENa0rGAWP38mHvw=; h=From:To:Subject:Date:From; b=WHlxe0N3Rmv5v+ePWiK3u3LfALDgtBqD7MtA6fHxrL8kIt0YWh/HFV25SQ8YqdNgL Y6WvEka2RP3xpjNY2y/1QQGSpYTSW6Ihguq5Ix7K1eTDPI/N0JjuM2N8v8h/wTtiRW eLyzc02alS6I64K8gGIhXg1LHRM+R2RTpnps7/SE= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Tom Tromey To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Fix latent quote char bug in generic_printstr X-Act-Checkin: binutils-gdb X-Git-Author: Tom Tromey X-Git-Refname: refs/heads/master X-Git-Oldrev: 79aafec96b237165e66f14ba963214fb709af847 X-Git-Newrev: 1be8435c74de6738aec7ed623b59e381fa9bb644 Message-Id: <20221010173829.1E8013856DFE@sourceware.org> Date: Mon, 10 Oct 2022 17:38:29 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D1be8435c74de= 6738aec7ed623b59e381fa9bb644 commit 1be8435c74de6738aec7ed623b59e381fa9bb644 Author: Tom Tromey Date: Wed Jan 26 18:07:18 2022 -0700 Fix latent quote char bug in generic_printstr =20 generic_printstr prints an empty string like: =20 fputs_filtered ("\"\"", stream); =20 However, this seems wrong to me if the quote character is something other than double quote. This patch fixes this latent bug. Thanks to Andrew for the test case. =20 Co-authored-by: Andrew Burgess Diff: --- gdb/testsuite/gdb.fortran/empty-string.exp | 33 ++++++++++++++++++++++++++= ++++ gdb/testsuite/gdb.fortran/empty-string.f90 | 30 +++++++++++++++++++++++++++ gdb/valprint.c | 2 +- 3 files changed, 64 insertions(+), 1 deletion(-) diff --git a/gdb/testsuite/gdb.fortran/empty-string.exp b/gdb/testsuite/gdb= .fortran/empty-string.exp new file mode 100644 index 00000000000..892f189784a --- /dev/null +++ b/gdb/testsuite/gdb.fortran/empty-string.exp @@ -0,0 +1,33 @@ +# Copyright 2022 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 . + +# Test printing of an empty Fortran string. + +if {[skip_fortran_tests]} { return -1 } + +standard_testfile ".f90" +load_lib fortran.exp + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug f90= }]} { + return -1 +} + +if ![fortran_runto_main] { + return -1 +} + +gdb_breakpoint [gdb_get_line_number "Break here"] +gdb_continue_to_breakpoint "run to test location" +gdb_test "print string" " =3D ''" diff --git a/gdb/testsuite/gdb.fortran/empty-string.f90 b/gdb/testsuite/gdb= .fortran/empty-string.f90 new file mode 100644 index 00000000000..574ed7fb7aa --- /dev/null +++ b/gdb/testsuite/gdb.fortran/empty-string.f90 @@ -0,0 +1,30 @@ +! Copyright 2022 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 . + +program empty_string + implicit none + + integer :: ret + + ret =3D string_length('') + +contains + + integer(kind=3D4) function string_length(string) + character*(*) :: string + string_length =3D len(string) ! Break here. + end function string_length + +end program empty_string diff --git a/gdb/valprint.c b/gdb/valprint.c index 91a59419c4e..395c6e9dd29 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -2516,7 +2516,7 @@ generic_printstr (struct ui_file *stream, struct type= *type, =20 if (length =3D=3D 0) { - gdb_puts ("\"\"", stream); + gdb_printf (stream, "%c%c", quote_char, quote_char); return; }