From patchwork Wed Mar 20 16:08:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 87421 Return-Path: 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 0894D3857C61 for ; Wed, 20 Mar 2024 16:09:55 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic312-26.consmr.mail.ir2.yahoo.com (sonic312-26.consmr.mail.ir2.yahoo.com [77.238.178.97]) by sourceware.org (Postfix) with ESMTPS id 768243857C4E for ; Wed, 20 Mar 2024 16:09:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 768243857C4E Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=yahoo.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yahoo.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 768243857C4E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=77.238.178.97 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710950966; cv=none; b=hAs5FExXLcxT0zxy0zwc5Rs3cUW5m0DemagrSIkgjO+jZE3vHd7bTZ7r+JyFt6MOQuVjKTEvuTnyrLYr4z+W+NRm/nafYj8S835vTD++XBMbpDgnsF/ciwwlt5g8fg0VzqwJK7Ll42PfM3F7u4V1OkrsXyHWvBKgmgYPY4k+slY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710950966; c=relaxed/simple; bh=yr50a4oKTtxtJdNYgBT9kJzC5Dat0V4fkA3+M1VrD30=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=O50JSgqUlasaxUpOzv/cvM8WM1tM1XjetbydVFtWyJVvNRy1d55cxJiuR4iBbPYLW4MPwVOjFQF8lV5n4tctUCZ2PRJD0yHqvI4q6s4LtEK3EmDXwcs104aAADoP00ST9yURQ2308CflsgJ7FYFqWTep+eM+J3xixTdFwUts/4I= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1710950962; bh=LEZfUysTsDfCFkPdHT4CPe6HQ3XUqHVuuGnYZJbT1pI=; h=From:To:Subject:Date:References:From:Subject:Reply-To; b=QNZyRXVG7lU1EEybXnAYYABuhzkJcep2c0+BAWUrxjFZS35trIbmoWQG6q+TbGQwAKbbM8wx8e+rc64UU53rx/ldeYE7D6vW8e9uBoVaTJXXky1LK3ZYvTuJ1/loMq5jmQe8h5RrjeINV0ST16KdP8cI4vJ1UikdU9X1uYDe+Yp2hLUGT+XaXPcLJyTnQEDqw/ToooXVRe1E66TrAplF2XnhV/ElaY1Mm5djoUawWVWgA2viPJuybGM+2vkVQefjSxDVGPKlrP8TTk02/NX3s8T4heVsYYYD6j6QqguOXaHKKsVawe2krYCWjzIQV3ElQVslAbaoV2oJ3Mr4B5moAw== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1710950962; bh=lzj9A6v/lKwQl+XSejbWxE4f0YktXhXN8nvPgfr59Dc=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=IJIWLW3Kbsuqhz53anfHUyjLXYJYv6PlXOukVG+ibXmVp68cWObdkeubbqAqQR5usqOQ5B+t2ictZPbMs9PZLnzZLZ8pN9zWsyBsk8b1lfHF7rltFQIbUyLO4suXjCc3YUiBzQoCiRKzZvWOluDG4JN8y+cOFUC8T6O6B8NRfq8L6GlitjaWZ2SSAHYZ6Embcn5V9ELCjJdTePE0KTEpklBm9LdTd0sxT5IRsBwBmGs8fR9EHIFm3GDs+reOEaghZMoEFY+nGuphLn4XMhqiCaM2YPSvXggTDvoSYLp+1x6AHGPOKQ6s7uH0DZGtbeq8msuZEABcZNuLZD2sLGyjlw== X-YMail-OSG: i.F1E5cVM1nwc6vZGF8OK3EfUu55_qcs5epkzOzhKkiN.JhwcMBtrDSXGixi8Oy FAEdKFXMDvOOMqgvJxBt9KSkolCog0dm5tcz6T7R9QMaq8N0E.fBRIQCQJPUGrFEIjGSOX49.Kxj zvBFom_X6unEUlGxwCoSFQEQ9pp3iB0IzpDl04LbuhoJyADY8eW0LZFqPv13TaRzIdWgZ.hchGbb hZzP8azseLkASvP31y4xX3mJPAXVPp6W.ovlL9N_0P_A95umenC5STuFggyARf6pX6TQhuPDskKw bPugT8LvTxt63syIzAgyslk0YnFwZ6PummqbhKJ_MT3p0UtIxXZKGq1P1rQjStnN1Tg7gU1Xvvxa rcAocHJFvFUKstL7s.AYfFE3krosoNk6rNzdf9tl9nZluho7mNdsfYZwQE2ovaoq.StP_4PEQOkS uwkJ0iiDLmclQSG_OL5hVIs3yAEkymmHhBvl5KbscnUzUr.b_VngZQQq5T1EOYIDU5c4z0N8AjUz LMK1Y6faPRrh8RgWJuMIWH6jCh8MK33QO4yiA3Y3465lWK7rJxn_OEqTzK1U0cAOLz9aLefOczRf odqOulaz.5KwlP4dXIuT_5w5WTdWI.69GPxT4KKAo3wMWEusxccDuLtyIMTgHfE9jWNcOEdpyaua rXPpODOhemQ6uyyd9bgL4dIWZM_dfP89t8Ioc5uhrYGi.NW6Z89xqv_XzH_5lWyRE6egbHe9_6_K BU_PmpHtNjKumrStit.ZbPUfFMcuXa1f16qzmJQzXLnscM_OS.O5BxkUywzZGKC7FhOdfIVbB9Be gshL_oj3_fTVuqiSK2uGyxOW_v4dMnRLHcRK06rK11Oql.IE7byJQSTAEjHMnChyWH64qtS8XHyH cVm2tVA32iO05i1dDLzqRdohKrsoqLG6Itu1RpczivTsiNNbsEmXSG3HbHkAvVzb.QGEb9BMaVcM DrVN932OTGdIC7PUPjfVBmLBTvppdUpghhcaEEfC9OsHYD3koX39DrtbRTfGiO2y8.aNhg8lddC1 MU2DvQVeuSMwpZLfq0vweBW0lI68vtGp.Ft_9hYg6Jvk6UlSaHKuepmD1wdeLefh5EB.6n.ktcLq EsrJCEGaixc8SYAnmceR6kHuaoc4X47vwyTmDHak5V6hGF4YErrYnfEi_duTIA.Wuk85pf_vU6p9 Z7BbIyCNeOZ_vg8HWkoHNv4U7WiA0fRGzXmZomuhS2qQisBvbz1Q.VPTPkmMnB91Jr1jveaBdB9z jjfiQiHIL.RVxBzTLr9BwO3ff.myMonHl4znhJgNo5XzL2K9vzAtJc9aXqZupM9DAq4xGIoUVpIv L4Qb7Wtoax9jPRGXDqCuJepPcbQD39J_spbY_yDFyCim_tuBIMvTaWS5I59sYoOe0LCatJ9tQ_MM tGa29NUIL9x0XnL4Mrkj90O6vnCoU7SB5xELCQBdvm7y0pn1kXO8PkxjwBy5.pNj_saBfVdm_e8l dML6C8CB1rcbHKsaXHd_z4_7rZURPmsx.XBMVhuUbjFJ9ARZATnOSt0653uW973JVt.7SIfRpvUE qFh_Otme7vCwc_OIL2VLRegu2D_o5bhdJNlNJ1v8siAfaHWv6tiS5kc3cHFgM6ePVNFPVzQhxyla OiPL0ocSnwW0IHDE6ZYrgENS1J7hTaBqPV5LL3DjJgXZouIrylpcCjQ.FsT8edsNr.FlvMkgx.a4 xqtEdUJOjNdx9fpiLehcmVqIwO6MUgPnyyc3_5e6SHy.FjPnvWVqjA4aDpyUmBbEjU_mGTCXr4T3 GXjDQlZZtuxB3G7SFCNdgPuaB8mHncJSOEw2vFx5C35vVyAxhxT_KeRr1fhFNvk_z2CpZIofLUeH HLPa9srgB6fe.qgPILa08auxdvAyBH.Lh06_ax2ZoUJD_Juk24ajx5WUjwfJ_Mw8ReInuUakE3CH vZi9aj659V7195w3hVTXggEEPPiBbNY.qAwXkEoXU2Gd2K7QnaqrpS3BwYJ3yBDM0yy..B4AHMXz rSup8DTz0E1OEFOl.4IOuQJt.8tlbkT7iJBDwtVRsOeK9gxsCzpfgvSl0GDiVqbwP7YA.BpnL6eV UsdoT9cuZ_q4C8Sbh4kUsb0_vao.IhryghQAyeCN3fCzzJoeCQWkH1uGjpJyTVr2E9AoTYOXv60. TRgbEEk8X_3hd66tH6KnJGuKQuKL3_ZIIvJEbFBS5CAD5K8ZkgwbikGsbUNpxCC9ww7liNyL2gqq PsYGVIYyu1apRafQ6sMM22qIlARv4h9k- X-Sonic-MF: X-Sonic-ID: 743312aa-b398-4758-a506-8bfb73ecbfd1 Received: from sonic.gate.mail.ne1.yahoo.com by sonic312.consmr.mail.ir2.yahoo.com with HTTP; Wed, 20 Mar 2024 16:09:22 +0000 Received: by hermes--production-ir2-7bc88bfc75-6cqn4 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 4d8f4f4f510e5387bb79fdc657568f94; Wed, 20 Mar 2024 16:09:19 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH] Fix casting in-memory values of primitive types to const reference Date: Wed, 20 Mar 2024 17:08:44 +0100 Message-Id: <20240320160844.106-1-ssbssa@yahoo.de> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 X-Antivirus: Avast (VPS 240320-2, 03/20/2024), Outbound message X-Antivirus-Status: Clean References: <20240320160844.106-1-ssbssa.ref@yahoo.de> X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org It's currently not possible to cast an in-memory value of a primitive type to const reference: ``` (gdb) p Q.id $1 = 42 (gdb) p (int&)Q.id $2 = (int &) @0x22fd0c: 42 (gdb) p (const int&)Q.id Attempt to take address of value not located in memory. ``` And if in a function call an argument needs the same kind of casting, it also doesn't work: ``` (gdb) l f3 39 int f3(const int &i) 40 { 41 return i; 42 } (gdb) p f3(Q.id) Attempt to take address of value not located in memory. ``` It's because when the constness of the type changes in a call to value_cast, a new not_lval value is allocated, which doesn't exist in the target memory. Fixed by ignoring const/volatile/restrict qualifications in value_cast when comparing cast type to original type, so the new value will point to the same location as the original value: ``` (gdb) p (int&)i $2 = (int &) @0x39f72c: 1 (gdb) p (const int&)i $3 = (const int &) @0x39f72c: 1 (gdb) p f3(Q.id) $4 = 42 ``` Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=19423 --- gdb/testsuite/gdb.cp/casts.exp | 3 +++ gdb/testsuite/gdb.cp/ref-params.cc | 6 ++++++ gdb/testsuite/gdb.cp/ref-params.exp | 1 + gdb/valops.c | 3 ++- 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gdb/testsuite/gdb.cp/casts.exp b/gdb/testsuite/gdb.cp/casts.exp index ca82ab084b9..9f7638c8aee 100644 --- a/gdb/testsuite/gdb.cp/casts.exp +++ b/gdb/testsuite/gdb.cp/casts.exp @@ -180,6 +180,9 @@ gdb_test "print (unsigned long long) (LeftRight *) (Right *) &gd == gd_value" \ gdb_test "print (unsigned long long) (LeftRight *) (Right *) r_value == gd_value" \ " = true" +gdb_test "print (const int &) gd.left" \ + " = \\(const int \\&\\) @$nonzero_hex: 23" + gdb_test "print reinterpret_cast(l) == lr_l" " = true" gdb_test "print reinterpret_cast(r) == lr_r" " = true" gdb_test "print reinterpret_cast(lr) == l_lr" " = true" diff --git a/gdb/testsuite/gdb.cp/ref-params.cc b/gdb/testsuite/gdb.cp/ref-params.cc index f038d71fe10..3ef28688607 100644 --- a/gdb/testsuite/gdb.cp/ref-params.cc +++ b/gdb/testsuite/gdb.cp/ref-params.cc @@ -36,6 +36,11 @@ int f2(Child& C) return f1(C); /* Set breakpoint marker2 here. */ } +int f3(const int &i) +{ + return i; +} + struct OtherParent { OtherParent (int other_id0) : other_id(other_id0) { } int other_id; @@ -64,6 +69,7 @@ int main(void) f2(Q); f2(QR); + f3(Q.id); MultiChild MQ(53); MultiChild& MQR = MQ; diff --git a/gdb/testsuite/gdb.cp/ref-params.exp b/gdb/testsuite/gdb.cp/ref-params.exp index 03bb8e62496..e5c28e6e2ad 100644 --- a/gdb/testsuite/gdb.cp/ref-params.exp +++ b/gdb/testsuite/gdb.cp/ref-params.exp @@ -62,3 +62,4 @@ gdb_test "print mf2(MQ)" ".* = 106" gdb_test "print f1(MQR)" ".* = 53" gdb_test "print mf1(MQR)" ".* = 106" gdb_test "print mf2(MQR)" ".* = 106" +gdb_test "print f3(Q.id)" ".* = 42" diff --git a/gdb/valops.c b/gdb/valops.c index 0a4e57672ce..14c12142112 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -411,7 +411,8 @@ value_cast (struct type *type, struct value *arg2) In this case we want to preserve the LVAL of ARG2 as this allows the resulting value to be used in more places. We do this by calling VALUE_COPY if appropriate. */ - if (types_deeply_equal (arg2->type (), type)) + if (types_deeply_equal (make_unqualified_type (arg2->type ()), + make_unqualified_type (type))) { /* If the types are exactly equal then we can avoid creating a new value completely. */