From patchwork Fri Aug 2 15:14:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 33922 Received: (qmail 20196 invoked by alias); 2 Aug 2019 15:14:57 -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 20183 invoked by uid 89); 2 Aug 2019 15:14:57 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.1 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, SPF_PASS autolearn=ham version=3.3.1 spammy=20020, 20190529, 2019-05-29 X-HELO: mx1.suse.de Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 02 Aug 2019 15:14:53 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 4511FAF38; Fri, 2 Aug 2019 15:14:51 +0000 (UTC) Subject: [8.3 backport] Fix crash in cp_print_value_fields To: Tom Tromey , gdb-patches@sourceware.org Cc: Tom Tromey References: <20190517201814.27951-1-tromey@adacore.com> From: Tom de Vries Openpgp: preference=signencrypt Message-ID: <8484cf89-f276-4bed-3fa6-00a21b81ca61@suse.de> Date: Fri, 2 Aug 2019 17:14:50 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <20190517201814.27951-1-tromey@adacore.com> X-IsSubscribed: yes On 17-05-19 22:18, Tom Tromey wrote: > From: Tom Tromey > > PR c++/20020 concerns a crash in cp_print_value_fields. The immediate > cause is that cp_print_value_fields does not handle the case where > value_static_field fails. This is fixed in this patch by calling > cp_print_static_field from the "try" block. > > Digging a bit deeper, the error occurs because GCC does not emit a > DW_AT_const_value for a static constexpr member appearing in a > template class. I've filed a GCC bug for this. > > Tested on x86-64 Fedora 29. > > gdb/ChangeLog > 2019-05-17 Tom Tromey > > PR c++/20020: > * cp-valprint.c (cp_print_value_fields): Call > cp_print_static_field inside "try". > > gdb/testsuite/ChangeLog > 2019-05-17 Tom Tromey > > PR c++/20020: > * gdb.cp/constexpr-field.exp: New file. > * gdb.cp/constexpr-field.cc: New file. OK to backport to 8.3, as well as the followup patch "Fix two buglets in cp_print_value_fields patch"? Neither of the patches apply cleanly, so I'm attaching them here. The difference in test results is: ... +Running gdb/testsuite/gdb.cp/constexpr-field.exp ... +XFAIL: gdb.cp/constexpr-field.exp: print x (PRMS gcc/90526) +PASS: gdb.cp/constexpr-field.exp: print y ... Thanks, - Tom Fix buglet in cp_print_value_fields patch [ Backport of master commit 3d507ff23b. ] Pedro pointed out an issue in the cp_print_value_fields patch, aka the fix for PR c++/20020. This patch addresses the issue. Tested on x86-64 Fedora 29. gdb/testsuite/ChangeLog 2019-06-27 Tom Tromey * gdb.cp/constexpr-field.exp: Use setup_xfail. --- gdb/testsuite/ChangeLog | 4 ++++ gdb/testsuite/gdb.cp/constexpr-field.exp | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 5f26daa67e..c51036165c 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-06-27 Tom Tromey + + * gdb.cp/constexpr-field.exp: Use setup_xfail. + 2019-05-29 Tom Tromey PR c++/20020: diff --git a/gdb/testsuite/gdb.cp/constexpr-field.exp b/gdb/testsuite/gdb.cp/constexpr-field.exp index e4849efeae..2f71cef952 100644 --- a/gdb/testsuite/gdb.cp/constexpr-field.exp +++ b/gdb/testsuite/gdb.cp/constexpr-field.exp @@ -31,6 +31,7 @@ if {![runto_main]} { # "x" sometimes isn't available due to # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90526 -gdb_test "print x" " = {static f = .*}" +setup_xfail *-*-* gcc/90526 +gdb_test "print x" " = {static f = true}" gdb_test "print y" " = {static f = true}"