Message ID | 20221004170747.154307-9-blarsen@redhat.com |
---|---|
State | Committed |
Headers |
Return-Path: <gdb-patches-bounces+patchwork=sourceware.org@sourceware.org> X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9F95B3851C3A for <patchwork@sourceware.org>; Tue, 4 Oct 2022 17:09:40 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9F95B3851C3A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1664903380; bh=PZNhgooDnJltInvJQJA1UVZGYGpyva1A2vw2ZRUJJ04=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=wnUcpU6p631MT+Acl8YhYgVDIVDut+Z1do8+BuCedhk0GPIYa/mSJwvqa5ocjvY32 r5xuJYmL8QrUKQJUamWTxhJebATCEQ04pphCFgP+HgVQNNhCBwsRLiapf0gANdd7uF Hb148E3ZfLTNTO20LqVu1275oZZlonj5boSsNiqE= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 70C053857C4D for <gdb-patches@sourceware.org>; Tue, 4 Oct 2022 17:08:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 70C053857C4D Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-313-vAwl5RmtNqqM8taHkq-oag-1; Tue, 04 Oct 2022 13:08:15 -0400 X-MC-Unique: vAwl5RmtNqqM8taHkq-oag-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id C22AA3826240 for <gdb-patches@sourceware.org>; Tue, 4 Oct 2022 17:08:14 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.40.192.57]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E1D2D492B04; Tue, 4 Oct 2022 17:08:13 +0000 (UTC) To: gdb-patches@sourceware.org Subject: [PATCH 07/11] gdb/testsuite: skip gdb.cp/anon-struct.exp when using clang Date: Tue, 4 Oct 2022 19:07:43 +0200 Message-Id: <20221004170747.154307-9-blarsen@redhat.com> In-Reply-To: <20221004170747.154307-1-blarsen@redhat.com> References: <20221004170747.154307-1-blarsen@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-Spam-Status: No, score=-12.9 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list <gdb-patches.sourceware.org> List-Unsubscribe: <https://sourceware.org/mailman/options/gdb-patches>, <mailto:gdb-patches-request@sourceware.org?subject=unsubscribe> List-Archive: <https://sourceware.org/pipermail/gdb-patches/> List-Post: <mailto:gdb-patches@sourceware.org> List-Help: <mailto:gdb-patches-request@sourceware.org?subject=help> List-Subscribe: <https://sourceware.org/mailman/listinfo/gdb-patches>, <mailto:gdb-patches-request@sourceware.org?subject=subscribe> From: Bruno Larsen via Gdb-patches <gdb-patches@sourceware.org> Reply-To: Bruno Larsen <blarsen@redhat.com> Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" <gdb-patches-bounces+patchwork=sourceware.org@sourceware.org> |
Series |
Cleanup gdb.cp tests when running with clang
|
|
Commit Message
Guinevere Larsen
Oct. 4, 2022, 5:07 p.m. UTC
When clang compiles anonymous structures, it does not add linkage names in their dwarf representations. This is compounded by clang not adding linkage names to subprograms of those anonymous structs (for instance, the constructor). Since this isn't a bug on clang or GDB, but there is no way to make anon-struct.exp work when using clang, just mark that test as untested. Since I was already touching the file, I also added a comment at the top of the file explaining what it is testing for. --- gdb/testsuite/gdb.cp/anon-struct.exp | 8 ++++++++ 1 file changed, 8 insertions(+)
Comments
Bruno Larsen via Gdb-patches <gdb-patches@sourceware.org> writes: > When clang compiles anonymous structures, it does not add linkage names in > their dwarf representations. This is compounded by clang not adding linkage > names to subprograms of those anonymous structs (for instance, the > constructor). > > Since this isn't a bug on clang or GDB, but there is no way to make > anon-struct.exp work when using clang, just mark that test as untested. > > Since I was already touching the file, I also added a comment at the top > of the file explaining what it is testing for. > --- > gdb/testsuite/gdb.cp/anon-struct.exp | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/gdb/testsuite/gdb.cp/anon-struct.exp b/gdb/testsuite/gdb.cp/anon-struct.exp > index 2c709ab9ecc..774ec882a07 100644 > --- a/gdb/testsuite/gdb.cp/anon-struct.exp > +++ b/gdb/testsuite/gdb.cp/anon-struct.exp > @@ -14,12 +14,20 @@ > # 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 test is used to verify GDB's abiility to refer to linkage names > +# for types and functions. Type: 'ability'. Also, I wonder if this comment should explicitly say something like: "...for types and functions within anonymous structs." maybe? > + > standard_testfile .cc > > if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug c++}] } { > return -1 > } > > +if {[test_compiler_info clang-*-*]} { Missing the language argument to test_compiler_info. > + untested "clang does not use linkage name in this case" > + return You specifically call out the missing linkage name here, but both the DW_AT_name and DW_AT_linkage name are filled in by GCC, and not with Clang. Is it the linkage name in particular that is critical here? Either way, I wonder if a more extended comment within this if block might be useful, just touching on the differences in behaviour between GCC and Clang, and why than means this test will not work with Clang. Thanks, Andrew > +} > + > if { [is_aarch32_target] } { > gdb_test "ptype t::t" "type = struct t {\r\n C m;\r\n} \\*\\(t \\* const\\)" \ > "print type of t::t" > -- > 2.37.3
On 26/10/2022 16:49, Andrew Burgess wrote: > Bruno Larsen via Gdb-patches <gdb-patches@sourceware.org> writes: > >> When clang compiles anonymous structures, it does not add linkage names in >> their dwarf representations. This is compounded by clang not adding linkage >> names to subprograms of those anonymous structs (for instance, the >> constructor). >> >> Since this isn't a bug on clang or GDB, but there is no way to make >> anon-struct.exp work when using clang, just mark that test as untested. >> >> Since I was already touching the file, I also added a comment at the top >> of the file explaining what it is testing for. >> --- >> gdb/testsuite/gdb.cp/anon-struct.exp | 8 ++++++++ >> 1 file changed, 8 insertions(+) >> >> diff --git a/gdb/testsuite/gdb.cp/anon-struct.exp b/gdb/testsuite/gdb.cp/anon-struct.exp >> index 2c709ab9ecc..774ec882a07 100644 >> --- a/gdb/testsuite/gdb.cp/anon-struct.exp >> +++ b/gdb/testsuite/gdb.cp/anon-struct.exp >> @@ -14,12 +14,20 @@ >> # 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 test is used to verify GDB's abiility to refer to linkage names >> +# for types and functions. > Type: 'ability'. > > Also, I wonder if this comment should explicitly say something like: > > "...for types and functions within anonymous structs." > > maybe? Yeah, good call. > >> + >> standard_testfile .cc >> >> if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug c++}] } { >> return -1 >> } >> >> +if {[test_compiler_info clang-*-*]} { > Missing the language argument to test_compiler_info. > >> + untested "clang does not use linkage name in this case" >> + return > You specifically call out the missing linkage name here, but both the > DW_AT_name and DW_AT_linkage name are filled in by GCC, and not with > Clang. Is it the linkage name in particular that is critical here? Well, I guess I need to workshop my explanation. The problem is that GCC generates a linkage name (t in this case), and uses this name for the constructor, so we can use t::t() to refer to the anonymous structure's constructor. Clang doesn't use the linkage name to generate the name of the constructor (or give it any name at all) so it ends with the constructor t::(), which isn't a valid expression for GDB. I decided not to fix this because I'm not convinced calling the constructor of an anonymous structure makes much sense, but I'm open to being convinced. Cheers, Bruno > > Either way, I wonder if a more extended comment within this if block > might be useful, just touching on the differences in behaviour between > GCC and Clang, and why than means this test will not work with Clang. > > Thanks, > Andrew > > >> +} >> + >> if { [is_aarch32_target] } { >> gdb_test "ptype t::t" "type = struct t {\r\n C m;\r\n} \\*\\(t \\* const\\)" \ >> "print type of t::t" >> -- >> 2.37.3
diff --git a/gdb/testsuite/gdb.cp/anon-struct.exp b/gdb/testsuite/gdb.cp/anon-struct.exp index 2c709ab9ecc..774ec882a07 100644 --- a/gdb/testsuite/gdb.cp/anon-struct.exp +++ b/gdb/testsuite/gdb.cp/anon-struct.exp @@ -14,12 +14,20 @@ # 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 test is used to verify GDB's abiility to refer to linkage names +# for types and functions. + standard_testfile .cc if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug c++}] } { return -1 } +if {[test_compiler_info clang-*-*]} { + untested "clang does not use linkage name in this case" + return +} + if { [is_aarch32_target] } { gdb_test "ptype t::t" "type = struct t {\r\n C m;\r\n} \\*\\(t \\* const\\)" \ "print type of t::t"