From patchwork Tue Dec 10 15:59:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Simon Marchi (Code Review)" X-Patchwork-Id: 36678 Received: (qmail 41570 invoked by alias); 10 Dec 2019 15:59:14 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 41511 invoked by uid 89); 10 Dec 2019 15:59:13 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT autolearn=ham version=3.3.1 spammy=Large, Small, Alpha, pone X-HELO: mx1.osci.io Received: from polly.osci.io (HELO mx1.osci.io) (8.43.85.229) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 10 Dec 2019 15:59:11 +0000 Received: by mx1.osci.io (Postfix, from userid 994) id 894D42012A; Tue, 10 Dec 2019 10:59:09 -0500 (EST) Received: from gnutoolchain-gerrit.osci.io (gnutoolchain-gerrit.osci.io [IPv6:2620:52:3:1:5054:ff:fe06:16ca]) by mx1.osci.io (Postfix) with ESMTP id 5A33920300; Tue, 10 Dec 2019 10:59:07 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by gnutoolchain-gerrit.osci.io (Postfix) with ESMTP id 2AE8D25BB4; Tue, 10 Dec 2019 10:59:07 -0500 (EST) X-Gerrit-PatchSet: 2 Date: Tue, 10 Dec 2019 10:59:07 -0500 From: "Sourceware to Gerrit sync (Code Review)" To: Tom Tromey , gdb-patches@sourceware.org Cc: Joel Brobecker Auto-Submitted: auto-generated X-Gerrit-MessageType: merged Subject: [pushed] Normalize Ada ptype to use a single "?" X-Gerrit-Change-Id: I3403040780a155ffa2c44c8e6a04ba86bc810e29 X-Gerrit-Change-Number: 740 X-Gerrit-ChangeURL: X-Gerrit-Commit: 6c71eb7d70c3678f595cd8e66d78c9da5bd3ef4e In-Reply-To: References: Reply-To: noreply@gnutoolchain-gerrit.osci.io, tromey@sourceware.org, brobecker@adacore.com, gdb-patches@sourceware.org MIME-Version: 1.0 Content-Disposition: inline User-Agent: Gerrit/3.0.3-79-g83ff7f88f1 Message-Id: <20191210155907.2AE8D25BB4@gnutoolchain-gerrit.osci.io> Sourceware to Gerrit sync has submitted this change. Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/740 ...................................................................... Normalize Ada ptype to use a single "?" Sometimes -- notably with unchecked unions -- the Ada "ptype" code will print a "?" or "??" to indicate something unknown. The choice of what was printed was somewhat arbitrary, and in one case, Ada would print an empty string rather than "?". This patch normalizes the Ada code to use "?" rather than an empty string or "??". My reasoning here is that a single question mark is enough to convey unknown-ness. gdb/ChangeLog 2019-12-10 Tom Tromey * ada-typeprint.c (print_choices): Use a single "?". (print_variant_part): Print "?" if the discriminant name is not known. gdb/testsuite/ChangeLog 2019-12-10 Tom Tromey * gdb.ada/unchecked_union.exp: New file. * gdb.ada/unchecked_union/pck.adb: New file. * gdb.ada/unchecked_union/pck.ads: New file. * gdb.ada/unchecked_union/unchecked_union.adb: New file. * gdb-utils.exp (string_to_regexp): Also quote "?". Change-Id: I3403040780a155ffa2c44c8e6a04ba86bc810e29 --- M gdb/ChangeLog M gdb/ada-typeprint.c M gdb/testsuite/ChangeLog A gdb/testsuite/gdb.ada/unchecked_union.exp A gdb/testsuite/gdb.ada/unchecked_union/pck.adb A gdb/testsuite/gdb.ada/unchecked_union/pck.ads A gdb/testsuite/gdb.ada/unchecked_union/unchecked_union.adb M gdb/testsuite/lib/gdb-utils.exp 8 files changed, 171 insertions(+), 5 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 98a6285..ac58517 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2019-12-10 Tom Tromey + + * ada-typeprint.c (print_choices): Use a single "?". + (print_variant_part): Print "?" if the discriminant name + is not known. + 2019-12-10 George Barrett Fix scripted probe breakpoints. diff --git a/gdb/ada-typeprint.c b/gdb/ada-typeprint.c index f89dd23..70fad1c 100644 --- a/gdb/ada-typeprint.c +++ b/gdb/ada-typeprint.c @@ -526,7 +526,7 @@ } Huh: - fprintf_filtered (stream, "?? =>"); + fprintf_filtered (stream, "? =>"); return 0; } @@ -592,9 +592,12 @@ struct ui_file *stream, int show, int level, const struct type_print_options *flags) { - fprintf_filtered (stream, "\n%*scase %s is", level + 4, "", - ada_variant_discrim_name - (TYPE_FIELD_TYPE (type, field_num))); + const char *variant + = ada_variant_discrim_name (TYPE_FIELD_TYPE (type, field_num)); + if (*variant == '\0') + variant = "?"; + + fprintf_filtered (stream, "\n%*scase %s is", level + 4, "", variant); print_variant_clauses (type, field_num, outer_type, stream, show, level + 4, flags); fprintf_filtered (stream, "\n%*send case;", level + 4, ""); diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index c14c341..52edbc1 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2019-12-10 Tom Tromey + + * gdb.ada/unchecked_union.exp: New file. + * gdb.ada/unchecked_union/pck.adb: New file. + * gdb.ada/unchecked_union/pck.ads: New file. + * gdb.ada/unchecked_union/unchecked_union.adb: New file. + * gdb-utils.exp (string_to_regexp): Also quote "?". + 2019-12-10 George Barrett Test scripted probe breakpoints. diff --git a/gdb/testsuite/gdb.ada/unchecked_union.exp b/gdb/testsuite/gdb.ada/unchecked_union.exp new file mode 100644 index 0000000..e522238 --- /dev/null +++ b/gdb/testsuite/gdb.ada/unchecked_union.exp @@ -0,0 +1,58 @@ +# 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 . + +# Test ptype of an unchecked union. + +load_lib "ada.exp" + +standard_ada_testfile unchecked_union + +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug}] != ""} { + return -1 +} + +clean_restart ${testfile} + +set bp_location [gdb_get_line_number "BREAK" ${testdir}/unchecked_union.adb] +runto "unchecked_union.adb:$bp_location" + +proc multi_line_string {str} { + set result {} + foreach line [split $str \n] { + lappend result [string_to_regexp $line] + } + return [eval multi_line $result] +} + +set inner_string { case ? is + when ? => + small: range 0 .. 255; + when ? => + large: range 255 .. 510; + end case; +} +set inner_full "type = record (?) is\n${inner_string}end record" + +set pair_string { case ? is + when ? => + field_one: range 0 .. 255; + when ? => + field_two: range 255 .. 510; + end case; +} +set pair_full "type = record\n${inner_string}${pair_string}end record" + +gdb_test "ptype Pair" [multi_line_string $pair_full] +gdb_test "ptype Inner" [multi_line_string $inner_full] diff --git a/gdb/testsuite/gdb.ada/unchecked_union/pck.adb b/gdb/testsuite/gdb.ada/unchecked_union/pck.adb new file mode 100644 index 0000000..6535991 --- /dev/null +++ b/gdb/testsuite/gdb.ada/unchecked_union/pck.adb @@ -0,0 +1,21 @@ +-- 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 Pck is + procedure Do_Nothing (A : System.Address) is + begin + null; + end Do_Nothing; +end Pck; diff --git a/gdb/testsuite/gdb.ada/unchecked_union/pck.ads b/gdb/testsuite/gdb.ada/unchecked_union/pck.ads new file mode 100644 index 0000000..b8d0010 --- /dev/null +++ b/gdb/testsuite/gdb.ada/unchecked_union/pck.ads @@ -0,0 +1,19 @@ +-- 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 System; +package Pck is + procedure Do_Nothing (A : System.Address); +end Pck; diff --git a/gdb/testsuite/gdb.ada/unchecked_union/unchecked_union.adb b/gdb/testsuite/gdb.ada/unchecked_union/unchecked_union.adb new file mode 100644 index 0000000..d6de66d --- /dev/null +++ b/gdb/testsuite/gdb.ada/unchecked_union/unchecked_union.adb @@ -0,0 +1,51 @@ +-- 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 System; +with Pck; use Pck; + +procedure Foo is + type Key is (Alpha, Omega); + + type Inner(Disc : Key := Omega) is record + case Disc is + when Alpha => + Small : Integer range 0..255; + when others => + Large : Integer range 255..510; + end case; + end record; + pragma Unchecked_Union (Inner); + + type Outer(Disc : Key := Alpha) is record + case Disc is + when Alpha => + Field_One : Integer range 0..255; + when others => + Field_Two : Integer range 255..510; + end case; + end record; + pragma Unchecked_Union (Outer); + + type Pair is record + Pone : Inner; + Ptwo : Outer; + end record; + + Value : Pair; + +begin + Do_Nothing (Value'Address); -- BREAK +end Foo; diff --git a/gdb/testsuite/lib/gdb-utils.exp b/gdb/testsuite/lib/gdb-utils.exp index 95ca348..17c1adf 100644 --- a/gdb/testsuite/lib/gdb-utils.exp +++ b/gdb/testsuite/lib/gdb-utils.exp @@ -34,7 +34,7 @@ proc string_to_regexp {str} { set result $str - regsub -all {[]*+.|(){}^$\[\\]} $str {\\&} result + regsub -all {[]?*+.|(){}^$\[\\]} $str {\\&} result return $result }