From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id gZ6bIi0W5mnfNSwAWB0awg (envelope-from ) for ; Mon, 20 Apr 2026 08:03:57 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=htecgroup.com header.i=@htecgroup.com header.a=rsa-sha256 header.s=selector1 header.b=vTLXcGse; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 81DBF1E0BA; Mon, 20 Apr 2026 08:03:57 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id A1A1A1E067 for ; Mon, 20 Apr 2026 08:03:56 -0400 (EDT) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 47C414BA23C4 for ; Mon, 20 Apr 2026 12:03:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 47C414BA23C4 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=htecgroup.com header.i=@htecgroup.com header.a=rsa-sha256 header.s=selector1 header.b=vTLXcGse Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazlp170100001.outbound.protection.outlook.com [IPv6:2a01:111:f403:c200::1]) by sourceware.org (Postfix) with ESMTPS id D778F4BA2E38 for ; Mon, 20 Apr 2026 12:03:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D778F4BA2E38 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=htecgroup.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=htecgroup.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D778F4BA2E38 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:c200::1 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1776686608; cv=pass; b=jYg5cWgB5rtVXJeWBfxzTTPgVWkO2zYpwqXg2WPLkJn4eadxhVBuIGGGnFgPHIz/Aa9Cp7CPLdv7yjoCXB7gA/tkIZLrU4I7FQOR+yWB53J8pnwC1YW5NAG9Hk8UzabSVNGWg4oeVsEsJEZ377uovUGljUp7dsssIUq69vRv3c4= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1776686608; c=relaxed/simple; bh=tbFbma7gIb52g7EqcNt4Lu/hNZHznGbNimb1EaLzsBY=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=wvywvOwcmafQxodA3ioMKoAhS1scxKY916+lVI1AYlo7mYPQswGxivo+ee/FSQbdUe9EifjRR4i9xSpCtFyje5/m4erdj0OrUX+yCYK9KT8K+4+5rArqKhZB2GRxSCOMuIGESDBHdj2Q4r7pbVtwBtUCXokAFDItbmz1a2btXt0= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D778F4BA2E38 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AKQZzz9DyzCLF64omVqvfXMGA4L6DWRcAEKhXrJdi8s8WGiQmlM6El3uh7ckrsx9x0DXm9y/Gk1UekEUoz+OzqtCuY0/z41MBFrM4MtyNd7QovtFylAW4KR0llSK2WG2L7W5V8zUM+tFcVFITT/ib4LstjtHWjAwOhKYAU+awOQxMhVdSXEoMaLMKK/NkPZSudwGQPq8wIIho3PuWTelTdl/GoPVvjJgLU4HFvsQrMtA4TYBwk9N2hJSK8DkHI3pptaZLR1OTqBWbQJWigg72pRtwM11+g6Dvguxk6Zerw9CIMTLiP+RTHo0uxcVLvycQhDFUwEIXlFhE5hIheCFgg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=q3X1NZiw3aa6jhrbAFDPkYpPc6cy3vrqFVRx/g6f/Cs=; b=iRRToH9J48qWUXDD4n5cm1dTEAby8p05qNrO7fqQ+tLWekNLnMuzM4lr261kAgADY3qx9SOG0QULvAXrkmnAExm3tsEvu0IlptyE5eJdP3hmIjGh9UpLLfstlylxqBeIBa6KNt767VGuTk9y9VbtT8q1EuCND+OyH8gvGV5LBhAtI/vKX6MiR/KWrWaD9QMxjnY4AOKsp2UZoXqsbDQUFpM/sWzwwgY153Um6+RMYmvHBdx6fLqeUR3rh1wJ/I2KUUUkkga680XNc9E6vnftwRVZwK6tmabCjjsYxghRigFwYcuYlP9UFklBe4AB13n1yDFdlvJ5D49g+Jy2CAFZMA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=htecgroup.com; dmarc=pass action=none header.from=htecgroup.com; dkim=pass header.d=htecgroup.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=htecgroup.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=q3X1NZiw3aa6jhrbAFDPkYpPc6cy3vrqFVRx/g6f/Cs=; b=vTLXcGsecaEU5XacBweGtGDC2iaIvyHQhcpnpnlkwO9bZpxjfiyItkaruuY6Pk0rSBNrcSjEDKkzu7YsZFQN1fwH3/485yS0RlFty1KnPbGltE2foyzSb4cA5WObv4H+WLZeDUGRRGeOEfzgtpNDD21MrOmQMClGf/aYQq2ao+5bdBiyyR0A/gu14CbB9TX+diNqays41AQWAd2oB1cfP4vxNvFVkPPT/KTf5GYFSf05YppXYVO91fOl5iSP8zgxAwo0t+xIyhR6Va89TEt7Di6amPHMXidxYz1H1IAiNM1r54Mj8WdmKwNtgRdbFjFppufeXV13Vz27xEBh7G1xpA== Received: from DBBPR09MB3477.eurprd09.prod.outlook.com (2603:10a6:10:d7::21) by GV2PR09MB6015.eurprd09.prod.outlook.com (2603:10a6:150:bb::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9818.32; Mon, 20 Apr 2026 12:03:19 +0000 Received: from DBBPR09MB3477.eurprd09.prod.outlook.com ([fe80::a339:e3f8:fe9b:112e]) by DBBPR09MB3477.eurprd09.prod.outlook.com ([fe80::a339:e3f8:fe9b:112e%6]) with mapi id 15.20.9818.032; Mon, 20 Apr 2026 12:03:19 +0000 From: Daniel Knezevic To: "gdb-patches@sourceware.org" CC: Tom Tromey , Simon Marchi , Keith Seitz , Daniel Knezevic Subject: [PATCH v3] gdb/symtab.c Fix completion of template class members Thread-Topic: [PATCH v3] gdb/symtab.c Fix completion of template class members Thread-Index: AQHcqvmdeGGeqSLC6kirSS6cvWj1YLWdHrOAgEsGqIA= Date: Mon, 20 Apr 2026 12:03:19 +0000 Message-ID: <20260420120310.64156-1-daniel.knezevic@htecgroup.com> References: <44171ae9-cd60-4c6d-950d-30276cd489eb@redhat.com> In-Reply-To: <44171ae9-cd60-4c6d-950d-30276cd489eb@redhat.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=htecgroup.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DBBPR09MB3477:EE_|GV2PR09MB6015:EE_ x-ms-office365-filtering-correlation-id: 4aae5577-f6bb-4563-031f-08de9ed4cfe9 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|366016|1800799024|376014|38070700021|16032099009|18096099003|56012099003|18002099003|22082099003; x-microsoft-antispam-message-info: OAxxIhj/e8pebHBbX3+qPT2HgePVkOj+kl6AGSLvfMvxs97eJ/7s7nrJgeo10NnpWx1qqonN4RddEnR5JeEOImT4cmdlABAmr/zKpxn05JFD1rFAWX1MrihxN8QnZ8SbJCmaDeJLw37MzcSwYUwBwpS3Mh8sRusqPdfrchNpGRGqVPyFynp+2yoqNsoegoFSQALynfOr1dyx2t3w2cbPlh7a5HapXcgy+o5oPeciSi7f+EPwJioHYwxfEfqscm2RXvgbWB6qDL0+gI7z7menaW+QH0VhZf+MZs+NFobLTIdfW3n6iU5SsKavB4ebjWQKn7OrADo0dPGa6RR+lt0gzPmY8QGEpoyKX4OE2XBEg33lf1sw8j3WLDeL0JKkPKFszyxcfdLqTXNTalSn2Cl0wIKz+ofqO3/RdVkL2HUqzglFR9aNUfPy3BLNR2jQJcP0/SHnsG1yf+qCTvxA3KZMVB8ZSU9juG9xfDStTdRKWBnFNEWkwKUEKaPn1rKim3/F8f9NvkcmLYVaK5O3VqJtAieW6oRpxMN03n3kZT6kck948CFMDGZ3O9Ytyk+QQaA2rt8NhW/oGS3rFd2j0+9/UeW94Bez3JMDRfY+V7LUGlF17mKZJVjZW6h20AqL9KZULE9OqQ9UlDsIayCUwbPhyD+pM0d2IwNJvvRCiaQpjAURs8OzkWBJDOfwQhaPryvB87M4noYWrYCggVBtXVEJ67xBKeCNhVhiKTmAuR4KMAgi1qK1vRHDe0q+Cttw+Kp3u8C1segUBR+22ch+MonhXRr5epQ4Io1qxtnTGpAzbGs= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DBBPR09MB3477.eurprd09.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(1800799024)(376014)(38070700021)(16032099009)(18096099003)(56012099003)(18002099003)(22082099003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?Zw5CWrWiD0A5LPDmH3mWjTQY+gzIO99itO3v9fjAYLVMG3pvOQ4Nyl/453?= =?iso-8859-1?Q?GYer860Sb4WCsVM0m2qgTevttC3t58GSkhXXPRHsCmxHc8HSyD+nWR9zNJ?= =?iso-8859-1?Q?xyidAUXGNRBxOcjeqPKtAuubQgTZ4cYgq2nQuX+XbSFoXLTZ3m2AAPBWeU?= =?iso-8859-1?Q?PNuQac4sYJwhW1rpVjbH5jHB3VGu3t/9kpZw9k1qNmZy75TDAoygv9FuuI?= =?iso-8859-1?Q?GzPaUE0gjdV3SFJ3MixH3XZB0krUCB0nCqL0bk6IsK/WRVB5YesXwyEqDe?= =?iso-8859-1?Q?kfSE9DI+BGEyttWx3Q3T94mSSvYPebhrKoh+mqCGckMx+2SJG0vBM0NMp7?= =?iso-8859-1?Q?KZ+v01VR2TRhPQccPsMtBF1AzzLQsk6GdOSKWmXltDF4iZVCOzEkGUVbZq?= =?iso-8859-1?Q?dEqcQaN7gUchmb44GIKtYmkDSI2X4t/RzWEumYqpLnzI5ikzMz0OYKLrho?= =?iso-8859-1?Q?RO0IViPN5KpVMKQEX/dgTp3E1SOGSV1opSph4usnFM14+mZhl/ARQ698MO?= =?iso-8859-1?Q?NABJXOZeXjYjmR9rIJhtK4dfhO+KJksRuNhqgP/+A3roDcpgDJSmNJ/g1x?= =?iso-8859-1?Q?9UbF+KyPbeASuRT4kUPFr28D828+d+XzI8StKXtnspPJ5w739T929ddJDD?= =?iso-8859-1?Q?BP6eqmQWhhlGwNK5c604ObkMwpgMLuVxdDcdftHwC4IoSuQdy554s3fnqn?= =?iso-8859-1?Q?XY4p3hIN/YpnpH9onFrwZH+59P2z64w5CwleKNvl0gTldSocn49QGX0pGK?= =?iso-8859-1?Q?VWNSdKf8YweUvicYzVEXHaW69lCminBkVn84NGNMgAL5O1LA4vd5f50Eyr?= =?iso-8859-1?Q?x3VRfEWFkGAwubBsNL26YFc6YQtsKDJmRh6nRDAn9d59bXaZ86Ex8v5fEb?= =?iso-8859-1?Q?kP42DVX2h0mijyw22yxSM4D4Yy8qmqm8Eo1vCOh9Yu4uQvYvRpDeUez/LK?= =?iso-8859-1?Q?p9yoR3sRdtfYy8NpEa1Tl5ZTVKogBTtA5MWBkzb1O54SISrY1YopApxcQA?= =?iso-8859-1?Q?sQQMjIoS6RejreH0JMf6ZqEwFmAQXTxgcuNx9hPt8188aESqar2Ty7nGam?= =?iso-8859-1?Q?luJ9suZMYIEkjo02bTHDLwkmneBLLG9MNWWgnOOCegr7AFLdJQx7ZOz2t0?= =?iso-8859-1?Q?o/hxtznpWtow+2nPQjyY2X+6ZQ6INspJdiQQ15n7Bht44LOvH77bi+JF8j?= =?iso-8859-1?Q?gD3o+D5fj4cSd1868MaAxW2xv4Ysmr1QquNEVPu0QEHIK3lz6a94h2h4X3?= =?iso-8859-1?Q?SgN0H0+kzKm8mAY4o+Fe2mIA/sVtyBnKZFHzryqLAYs9tTyCd+fsN02nGt?= =?iso-8859-1?Q?+StNhg8HL46MbnOqY7fL5alcCwkOUiuXWZqo1pJef6tiBTssCRBdnzxMRB?= =?iso-8859-1?Q?TpQ81E8cUg14ns6PSAXwAyca0q9PwFk20vTKX/+GRoFymibWc9HYxOiWTy?= =?iso-8859-1?Q?GdX+aSyVCynceXcFI7mJdSFYKHmg6vLNjHXCXA2aJOM/JJgTRj0nV575aH?= =?iso-8859-1?Q?Otx0sZeV2TmZy1ephncSBpBtQ8esQ4W0t8XuwU+oGrL/+14SEzENp7GdNi?= =?iso-8859-1?Q?94X9HeWfikAT886pHhbiAbfUKH8gQVovXS8k6f/+ASxARfUQ7pRPIOTqnG?= =?iso-8859-1?Q?DUOUKB5OHBKcSztSUmINi0YTZ4MUn9IYFAkJh2pDOJvVxUfUiSWGHvihRE?= =?iso-8859-1?Q?VbBJNOn2DgUy0387LkN9FCk3RUgeLhTWuVCmtUbJAQ74YAfYalUKLTrMxg?= =?iso-8859-1?Q?L1IlV5s6XzQ9mqY0fbZO97ZIhjog6VHYHEBebOGH11qdbphvQvjVBfSd/C?= =?iso-8859-1?Q?lB/w8WzelzbJEOS0P2j7oPxqLLV4xaa6yTkpajq3vgDmEWvy1KLa?= Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: htecgroup.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DBBPR09MB3477.eurprd09.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4aae5577-f6bb-4563-031f-08de9ed4cfe9 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Apr 2026 12:03:19.1389 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9f85665b-7efd-4776-9dfe-b6bfda2565ee X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: uRvFD50VIFQ9VEjCnhi0qMGSZW9dyZJk5hz4ZlaxBm5L/rsez4EvQDp/0whuz4nQ35ooMnsL132EBOId3hkRfIUhq59KREjvazf0hM2zPs0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR09MB6015 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~public-inbox=simark.ca@sourceware.org Hi, Is there anything I need to change for this patch? I have updated the patch based on Keith's comments that you can find bellow= : --- gdb/symtab.c | 3 ++- gdb/testsuite/gdb.cp/cpcompletion.cc | 26 +++++++++++++++++++ gdb/testsuite/gdb.cp/cpcompletion.exp | 37 +++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) diff --git a/gdb/symtab.c b/gdb/symtab.c index cd3bf876551..0d349a0f5ad 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -5937,7 +5937,8 @@ default_collect_symbol_completion_matches_break_on while (p > text) { if (c_isalnum (p[-1]) || p[-1] =3D=3D '_' || p[-1] =3D=3D '\0' - || p[-1] =3D=3D ':' || strchr (break_on, p[-1]) !=3D NULL) + || p[-1] =3D=3D ':' || p[-1] =3D=3D '<' || p[-1] =3D=3D '>' + || strchr (break_on, p[-1]) !=3D NULL) --p; else break; diff --git a/gdb/testsuite/gdb.cp/cpcompletion.cc b/gdb/testsuite/gdb.cp/cp= completion.cc index b85f168928c..92561d25405 100644 --- a/gdb/testsuite/gdb.cp/cpcompletion.cc +++ b/gdb/testsuite/gdb.cp/cpcompletion.cc @@ -74,6 +74,28 @@ struct baz S s; }; =20 +/* The Outer class is used to test completion of nested template classes. = */ +template +struct Outer +{ + T value; + + template + struct Inner + { + U inner_value; + T outer_ref; + }; + + Inner get_int_inner () const + { + Inner i; + i.inner_value =3D 0; + i.outer_ref =3D value; + return i; + } +}; + int main () { baz obj (2.3, 0.1); @@ -84,5 +106,9 @@ int main () Foo foo1; foo1.set_foo (42); // Set breakpoint here. a.get(); // Prevent compiler from throwing 'a' away. + Outer outer; + outer.value =3D 4.2; + auto inner =3D outer.get_int_inner (); + Outer::Inner long_inner; return 0; } diff --git a/gdb/testsuite/gdb.cp/cpcompletion.exp b/gdb/testsuite/gdb.cp/c= pcompletion.exp index 555392b470a..679fb160182 100644 --- a/gdb/testsuite/gdb.cp/cpcompletion.exp +++ b/gdb/testsuite/gdb.cp/cpcompletion.exp @@ -137,3 +137,40 @@ with_test_prefix "expression with namespace" { } =20 test_gdb_complete_unique "break baz(int" "break baz(int, double)" + +# Test completion with a template class. +test_gdb_complete_unique "p baz::" "p baz::baz(int, doub= le)" + +# Test completion of nested template classes +with_test_prefix "nested template classes" { + # Unlike in linespecs, tab- and complete-command completion work a + # bit differently when completing around the scope operator. The + # matches in the tab-completion case only show the part of the + # symbol after the scope, since ':' is a word break character. + + set tab_completion_list { + "Inner" + "Inner" + "get_int_inner() const" + } + test_gdb_complete_tab_multiple "ptype Outer:" ":" $tab_complet= ion_list + test_gdb_complete_tab_multiple "ptype Outer::" "" $tab_complet= ion_list + + # OTOH, the complete command must show the whole command, with + # qualified symbol displayed as entered by the user. + set cmd_completion_list { + "Outer::Inner" + "Outer::Inner" + "Outer::get_int_inner() const" + } + test_gdb_complete_cmd_multiple "ptype " "Outer:" $cmd_completi= on_list + test_gdb_complete_cmd_multiple "ptype " "Outer::" $cmd_complet= ion_list + test_gdb_complete_cmd_multiple "ptype " "Outer::Inn" { + "Outer::Inner" + "Outer::Inner" + } + + # Add a disambiguating character and we get a unique completion. + test_gdb_complete_unique "ptype Outer::g" \ + "ptype Outer::get_int_inner() const" +} --=20 2.43.0 Best regards, Daniel=