From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2126) id 48920385842E; Mon, 9 Jan 2023 19:27:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 48920385842E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1673292439; bh=U4wHKQuKOIhTgHar78YKHJbr/4O7C7kxc4UCtmioOYY=; h=From:To:Subject:Date:From; b=i4XLAOlVpundVhW9B3df2BlvCQySn7HA3wfbqFT+IdFzoQgxZ1d6P1BPfEKiCXOly lPhIcOo/FcDBOCaGICbEq/mA7tz7NoIG02jLHuTKyZhwpPYyN+kbJMw2GCmmxGsO1W hmwpZVv7nW01L2HQS5afY1FbcUFYwYHYGruCWC9s= 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 crash with C++ qualified names X-Act-Checkin: binutils-gdb X-Git-Author: Tom Tromey X-Git-Refname: refs/heads/master X-Git-Oldrev: 000f9cbef95caeacdd5a02a9ca9eae7928e1e63e X-Git-Newrev: bf716a53bd8f725975979397b3c6b9d4bd4434ef Message-Id: <20230109192719.48920385842E@sourceware.org> Date: Mon, 9 Jan 2023 19:27:19 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3Dbf716a53bd8f= 725975979397b3c6b9d4bd4434ef commit bf716a53bd8f725975979397b3c6b9d4bd4434ef Author: Tom Tromey Date: Fri Dec 23 12:55:10 2022 -0700 Fix crash with C++ qualified names =20 PR c++/29503 points out that something like "b->Base::member" will crash when 'b' does not have pointer type. This seems to be a simple oversight in eval_op_member. =20 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=3D29503 Reviewed-By: Bruno Larsen Diff: --- gdb/eval.c | 2 ++ gdb/testsuite/gdb.cp/ambiguous.exp | 1 + 2 files changed, 3 insertions(+) diff --git a/gdb/eval.c b/gdb/eval.c index 05e35941101..bb42e693b17 100644 --- a/gdb/eval.c +++ b/gdb/eval.c @@ -1309,6 +1309,8 @@ eval_op_member (struct type *expect_type, struct expr= ession *exp, =20 case TYPE_CODE_MEMBERPTR: /* Now, convert these values to an address. */ + if (check_typedef (value_type (arg1))->code () !=3D TYPE_CODE_PTR) + arg1 =3D value_addr (arg1); arg1 =3D value_cast_pointers (lookup_pointer_type (TYPE_SELF_TYPE (t= ype)), arg1, 1); =20 diff --git a/gdb/testsuite/gdb.cp/ambiguous.exp b/gdb/testsuite/gdb.cp/ambi= guous.exp index b430b039887..966d99ae595 100644 --- a/gdb/testsuite/gdb.cp/ambiguous.exp +++ b/gdb/testsuite/gdb.cp/ambiguous.exp @@ -123,6 +123,7 @@ with_test_prefix "all fields" { gdb_test "print n.A1::y" " =3D 2" gdb_test "print n.A2::x" " =3D 3" gdb_test "print n.A2::y" " =3D 4" + gdb_test "print n->A2::y" " =3D 4" gdb_test "print n.w" " =3D 5" gdb_test "print n.r" " =3D 6" gdb_test "print n.z" " =3D 7"