From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 67060 invoked by alias); 27 Dec 2019 17:23:32 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 67049 invoked by uid 89); 27 Dec 2019 17:23:31 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-8.2 required=5.0 tests=AWL,BAYES_00,SPF_PASS autolearn=ham version=3.3.1 spammy=Board, Germany, germany, Commercial X-HELO: mga18.intel.com Received: from mga18.intel.com (HELO mga18.intel.com) (134.134.136.126) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 27 Dec 2019 17:23:29 +0000 Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Dec 2019 09:23:27 -0800 Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by orsmga001.jf.intel.com with ESMTP; 27 Dec 2019 09:23:27 -0800 Received: from fmsmsx121.amr.corp.intel.com (10.18.125.36) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.439.0; Fri, 27 Dec 2019 09:23:26 -0800 Received: from FMSEDG002.ED.cps.intel.com (10.1.192.134) by fmsmsx121.amr.corp.intel.com (10.18.125.36) with Microsoft SMTP Server (TLS) id 14.3.439.0; Fri, 27 Dec 2019 09:23:27 -0800 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.174) by edgegateway.intel.com (192.55.55.69) with Microsoft SMTP Server (TLS) id 14.3.439.0; Fri, 27 Dec 2019 09:23:26 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=g/+HISJvVKrRtqPhy5XbGj1paGGFI2BiDDfLQw0Fkou9HV92QbQzkAvur1hdizEt44IgwB31EMNXtlsETXxVoqzGNDVi4QbUhRX/eL2R2BqwHsKFrgpxQLF4hk3PsltMKzk6lwDAuPVwN4lkmtvbuXLwLXsfrHjFeu/lS29P8IXxS50xvlBpKu9/4gpb9fQCa1SmhMAnpO73LMNiwMoCiJsBrqDdYcPVVG0kbtHGCQvHM2sTP+N6m5UoIjoZI/Wo6oWyf5wi7F2V4OS+mW/43f9tt1R7O4HvnuPqwmU1a4pFCL4l4AjpxDUPkNM+hD5s98MYo7kQppCv12ZJeKfhSw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bN868Y0e4F5AMzGYwlCTT7VTV+ba6hpFBr0kXl7o0dI=; b=X5A4xsl1K4bXpntyBcAKx4kpxZmGuDeyMu1gaMfqYiMd+g32h1KU+q3MG8UOckeDUh/7ZU9uNWbpX36hfOEqeGR4X0XI07IK2DZ6n/rYBOA8SvnON323wloRuEX8yNODNgZOps2wRD4alCiFYyTuz3mCyCysdWaEpVmSgzzIBRsxVreMdtNvzy2nxSLkhmBRVyf+HP0YBPdG7aYVzpNhtBIM1UcO0mtSfDWqGsAjt/gP0ZrMrU+vQlPpBdRcuFnSWjrDvi8dmC5pQAhZ5g0mRCw6QbtMWcFC7ZM19NDjgG90qfC9+6OBQW+zw3p0w9GVXmT8Jc5MM5TkOyDPAAG5WA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bN868Y0e4F5AMzGYwlCTT7VTV+ba6hpFBr0kXl7o0dI=; b=OC0icGB8mIsYKQ8n6u4DNU6v8s+yK1gFz6EN3/mOPTuE5DcLQgDSj5Y325Pem/muHqSVZj3Apy/L27pG5CgXRiBBgkMKwcMDLfsocLebTfv2wjZ0Qlu/uz7Nm5APXmj2f2HBEmNOvi2oVgLiKUr/+wn65Jstdx6XC93etdeqZwM= Received: from BYAPR11MB3030.namprd11.prod.outlook.com (20.177.225.91) by BYAPR11MB2726.namprd11.prod.outlook.com (52.135.223.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2581.12; Fri, 27 Dec 2019 17:23:10 +0000 Received: from BYAPR11MB3030.namprd11.prod.outlook.com ([fe80::b95c:c90c:816a:4a0d]) by BYAPR11MB3030.namprd11.prod.outlook.com ([fe80::b95c:c90c:816a:4a0d%5]) with mapi id 15.20.2581.007; Fri, 27 Dec 2019 17:23:10 +0000 From: "Aktemur, Tankut Baris" To: Ruslan Kabatsayev , Simon Marchi CC: GDB Patches Subject: RE: Current master fails to build on i686-pc-linux-gnu Date: Fri, 27 Dec 2019 17:23:00 -0000 Message-ID: References: <63b57288-985e-e09f-0449-e312b5cc6b62@simark.ca> In-Reply-To: authentication-results: spf=none (sender IP is ) smtp.mailfrom=tankut.baris.aktemur@intel.com; x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: udv5j4cQ42HAhES472R3lz4mIxDNRCOuJpn3fXh0l6X6fgyuFVPLidAqcgfaaLjR7xJJyomr15dKdhnKR5OBBAlGNIW0iq1tdD89Y693KA8= Return-Path: tankut.baris.aktemur@intel.com Content-Transfer-Encoding: base64 X-IsSubscribed: yes X-SW-Source: 2019-12/txt/msg01041.txt.bz2 KiBPbiBXZWRuZXNkYXksIERlY2VtYmVyIDI1LCAyMDE5IDEwOjE1IFBNLCBS dXNsYW4gS2FiYXRzYXlldiB3cm90ZToNCj4gT24gV2VkLCAyNSBEZWMgMjAx OSBhdCAwMDo1MSwgU2ltb24gTWFyY2hpIDxzaW1hcmtAc2ltYXJrLmNhPiB3 cm90ZToNCj4gPg0KPiA+IE9uIDIwMTktMTItMjQgMzo0NCBwLm0uLCBSdXNs YW4gS2FiYXRzYXlldiB3cm90ZToNCj4gPiA+IEhlbGxvLA0KPiA+ID4NCj4g PiA+IEJ1aWxkaW5nIGN1cnJlbnQgbWFzdGVyIG9mIGJpbnV0aWxzLWdkYiAo Y29tbWl0IGViZDFjNmQxZDMwOyBnaXQtYmxhbWUNCj4gPiA+IHBvaW50cyB0 byBjb21taXRzIGUzNTAwMGE3ZjhiZSBhbmQgZDA5MjJmY2YwMmM2KSByZXN1 bHRzIGluIHNvbWUNCj4gPiA+IC1XZXJyb3I9Zm9ybWF0PSBlcnJvcnMgb24g aTY4Ni1wYy1saW51eC1nbnU6DQo+ID4gPg0KPiA+ID4gSW4gZmlsZSBpbmNs dWRlZCBmcm9tIGR3YXJmMnJlYWQuYzo0NzowOg0KPiA+ID4gZHdhcmYycmVh ZC5jOiBJbiBmdW5jdGlvbiDigJhib29sIGlzX3ZhbGlkX0RXX0FUX2RlZmF1 bHRlZChVTE9OR0VTVCnigJk6DQo+ID4gPiBjb21wbGFpbnRzLmg6Mzg6NDA6 IGVycm9yOiBmb3JtYXQg4oCYJWx14oCZIGV4cGVjdHMgYXJndW1lbnQgb2Yg dHlwZSDigJhsb25nDQo+ID4gPiB1bnNpZ25lZCBpbnTigJksIGJ1dCBhcmd1 bWVudCAyIGhhcyB0eXBlIOKAmFVMT05HRVNUIHtha2EgbG9uZyBsb25nDQo+ ID4gPiB1bnNpZ25lZCBpbnR94oCZIFstV2Vycm9yPWZvcm1hdD1dDQo+ID4g PiAgIGNvbXBsYWludF9pbnRlcm5hbCAoRk1ULCAjI19fVkFfQVJHU19fKTsg IFwNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBeDQo+ID4gPiBkd2FyZjJyZWFkLmM6MTU0OTA6Mzogbm90ZTogaW4g ZXhwYW5zaW9uIG9mIG1hY3JvIOKAmGNvbXBsYWludOKAmQ0KPiA+ID4gICAg Y29tcGxhaW50IChfKCJ1bnJlY29nbml6ZWQgRFdfQVRfZGVmYXVsdGVkIHZh bHVlICglbHUpIiksIHZhbHVlKTsNCj4gPiA+ICAgIF5+fn5+fn5+fg0KPiA+ ID4gZHdhcmYycmVhZC5jOiBJbiBmdW5jdGlvbiDigJhib29sDQo+ID4gPiBp c192YWxpZF9EV19BVF9jYWxsaW5nX2NvbnZlbnRpb25fZm9yX3R5cGUoVUxP TkdFU1Qp4oCZOg0KPiA+ID4gY29tcGxhaW50cy5oOjM4OjQwOiBlcnJvcjog Zm9ybWF0IOKAmCVsdeKAmSBleHBlY3RzIGFyZ3VtZW50IG9mIHR5cGUg4oCY bG9uZw0KPiA+ID4gdW5zaWduZWQgaW504oCZLCBidXQgYXJndW1lbnQgMiBo YXMgdHlwZSDigJhVTE9OR0VTVCB7YWthIGxvbmcgbG9uZw0KPiA+ID4gdW5z aWduZWQgaW50feKAmSBbLVdlcnJvcj1mb3JtYXQ9XQ0KPiA+ID4gICBjb21w bGFpbnRfaW50ZXJuYWwgKEZNVCwgIyNfX1ZBX0FSR1NfXyk7ICBcDQo+ID4g PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXg0K PiA+ID4gZHdhcmYycmVhZC5jOjE1ODY5Ojc6IG5vdGU6IGluIGV4cGFuc2lv biBvZiBtYWNybyDigJhjb21wbGFpbnTigJkNCj4gPiA+ICAgICAgICBjb21w bGFpbnQgKF8oInVucmVjb2duaXplZCBEV19BVF9jYWxsaW5nX2NvbnZlbnRp b24gdmFsdWUgIg0KPiA+ID4gICAgICAgIF5+fn5+fn5+fg0KPiA+ID4gZHdh cmYycmVhZC5jOiBJbiBmdW5jdGlvbiDigJhib29sDQo+ID4gPiBpc192YWxp ZF9EV19BVF9jYWxsaW5nX2NvbnZlbnRpb25fZm9yX3N1YnJvdXRpbmUoVUxP TkdFU1Qp4oCZOg0KPiA+ID4gY29tcGxhaW50cy5oOjM4OjQwOiBlcnJvcjog Zm9ybWF0IOKAmCVsdeKAmSBleHBlY3RzIGFyZ3VtZW50IG9mIHR5cGUg4oCY bG9uZw0KPiA+ID4gdW5zaWduZWQgaW504oCZLCBidXQgYXJndW1lbnQgMiBo YXMgdHlwZSDigJhVTE9OR0VTVCB7YWthIGxvbmcgbG9uZw0KPiA+ID4gdW5z aWduZWQgaW50feKAmSBbLVdlcnJvcj1mb3JtYXQ9XQ0KPiA+ID4gICBjb21w bGFpbnRfaW50ZXJuYWwgKEZNVCwgIyNfX1ZBX0FSR1NfXyk7ICBcDQo+ID4g PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXg0K PiA+ID4gZHdhcmYycmVhZC5jOjE1ODk1Ojc6IG5vdGU6IGluIGV4cGFuc2lv biBvZiBtYWNybyDigJhjb21wbGFpbnTigJkNCj4gPiA+ICAgICAgICBjb21w bGFpbnQgKF8oInVucmVjb2duaXplZCBEV19BVF9jYWxsaW5nX2NvbnZlbnRp b24gdmFsdWUgIg0KPiA+ID4gICAgICAgIF5+fn5+fn5+fg0KPiA+ID4NCj4g PiA+IFJlZ2FyZHMsDQo+ID4gPiBSdXNsYW4NCj4gPg0KPiA+IFNvcnJ5IGFi b3V0IHRoYXQsIEkgZmFpbGVkIHRvIGNhdGNoIGl0IGR1cmluZyByZXZpZXcu ICBUaGUgZml4IGlzIHNpbXBsZSwNCj4gPiB0aGVzZSBzaG91bGQgdXNlIHB1 bG9uZ2VzdCAodmFsdWUpIHdpdGggdGhlIGZvcm1hdCBzcGVjaWZpZXIgIiVz Ii4gIEkgZG9uJ3QNCj4gPiByZWFsbHkgaGF2ZSB0aW1lIHJpZ2h0IG5vdyB0 byBmaXggaXQuICBJZiB5b3UnZCBsaWtlIHRvIG1ha2UgYSBwYXRjaCwgcGxl YXNlDQo+ID4gZ28gYWhlYWQgYW5kIHB1c2ggaXQuDQo+IA0KPiBPSywgcHVz aGVkIDMxNDJlOTA4ZDAxLg0KDQpUaGFua3MgZm9yIHRoZSBmaXgsIGFuZCBz b3JyeSBmb3IgdGhlIHByb2JsZW0uDQoNCi1CYXJpcw0KDQo+IA0KPiA+DQo+ ID4gU2ltb24NCj4gPg0KPiANCj4gUmVnYXJkcywNCj4gUnVzbGFuDQoNCklu dGVsIERldXRzY2hsYW5kIEdtYkgKUmVnaXN0ZXJlZCBBZGRyZXNzOiBBbSBD YW1wZW9uIDEwLTEyLCA4NTU3OSBOZXViaWJlcmcsIEdlcm1hbnkKVGVsOiAr NDkgODkgOTkgODg1My0wLCB3d3cuaW50ZWwuZGUKTWFuYWdpbmcgRGlyZWN0 b3JzOiBDaHJpc3RpbiBFaXNlbnNjaG1pZCwgR2FyeSBLZXJzaGF3CkNoYWly cGVyc29uIG9mIHRoZSBTdXBlcnZpc29yeSBCb2FyZDogTmljb2xlIExhdQpS ZWdpc3RlcmVkIE9mZmljZTogTXVuaWNoCkNvbW1lcmNpYWwgUmVnaXN0ZXI6 IEFtdHNnZXJpY2h0IE11ZW5jaGVuIEhSQiAxODY5MjgK >From gdb-patches-return-162636-listarch-gdb-patches=sources.redhat.com@sourceware.org Fri Dec 27 21:32:42 2019 Return-Path: Delivered-To: listarch-gdb-patches@sources.redhat.com Received: (qmail 125890 invoked by alias); 27 Dec 2019 21:32:41 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 125774 invoked by uid 89); 27 Dec 2019 21:32:40 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-23.3 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,KAM_STOCKGEN,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy=abc, mx, presents X-HELO: mail-wr1-f53.google.com Received: from mail-wr1-f53.google.com (HELO mail-wr1-f53.google.com) (209.85.221.53) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 27 Dec 2019 21:32:38 +0000 Received: by mail-wr1-f53.google.com with SMTP id g17so27258197wro.2 for ; Fri, 27 Dec 2019 13:32:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=m0W3TikLv0c6w+bSf7L9s0ywuLm8YGwc4n1PilEev9I=; b=fxkJHB/6yG1195qLteEFq0NFavRYUQQG0d4JMgS8qmQNWTTHQf9dYhjhN4QkI67mC5 dHE78TWWmLWO6Npoi5vy2vaUDNdEpKzEhFRWBMDf/pghAHqormpfCqUMOxZ2XlGHFN43 Z+Lyfg78zb48NI5k4Mioet5X1tdKECT1e99SWyVePHUiPcatXohngEwYaQYWy/99vbHW X6usys/2juJo4efMbwD0FHx9EuedNkWtloq7ypx+OsSNXEU/J2T1BiYvawlJ9hsUEbEl UwDx6ZILhWt++iy4PHORQ+K4UBKeokLODWANpfChdJtATUHFVH4Fu211aZ4CAg5xsiHx qpbA== Return-Path: Received: from localhost (host86-186-80-236.range86-186.btcentralplus.com. [86.186.80.236]) by smtp.gmail.com with ESMTPSA id h66sm13038581wme.41.2019.12.27.13.32.34 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 27 Dec 2019 13:32:35 -0800 (PST) From: Andrew Burgess To: gdb-patches@sourceware.org Cc: Andrew Burgess Subject: [PATCH 2/2] gdb: Remove C++ symbol aliases from completion list Date: Fri, 27 Dec 2019 21:32:00 -0000 Message-Id: In-Reply-To: References: In-Reply-To: References: X-IsSubscribed: yes X-SW-Source: 2019-12/txt/msg01043.txt.bz2 Content-length: 9329 Consider debugging the following C++ program: struct object { int a; }; typedef object *object_p; static int get_value (object_p obj) { return obj->a; } int main () { object obj; obj.a = 0; return get_value (&obj); } Now in a GDB session: (gdb) complete break get_value break get_value(object*) break get_value(object_p) Or: (gdb) break get_va (gdb) break get_value(object Function "get_value(object" not defined. Make breakpoint pending on future shared library load? (y or [n]) n The reason this happens is that we add completions based on the msymbol names and on the symbol names. For C++ both of these names include the parameter list, however, the msymbol names have some differences from the symbol names, for example: + typedefs are resolved, + whitespace rules are different around pointers, + the 'const' keyword is placed differently. What this means is that the msymbol names and symbol names appear to be completely different to GDB's completion tracker, and therefore to readline when it offers the completions. This commit builds on the previous commit which reworked the completion_tracker class. It is now trivial to add a remove_completion member function, this is then used along with cp_canonicalize_string_no_typedefs to remove the msymbol aliases from the completion tracker as we add the symbol names. Now, for the above program GDB only presents a single completion for 'get_value', which is 'get_value(object_p)'. It is still possible to reference the symbol using the msymbol name, so a user can manually type out 'break get_value (object *)' if they wish and will get the expected behaviour. I did consider adding an option to make this alias exclusion optional, in the end I didn't bother as I didn't think it would be very useful, but I can easily add such an option if people think it would be useful. gdb/ChangeLog: * completer.c (completion_tracker::remove_completion): Define new function. * completer.h (completion_tracker::remove_completion): Declare new function. * symtab.c (completion_list_add_symbol): Remove aliasing msymbols when adding a C++ function symbol. gdb/testsuite/ChangeLog: * gdb.linespec/cp-completion-aliases.cc: New file. * gdb.linespec/cp-completion-aliases.exp: New file. Change-Id: Ie5c7c9fc8ecf973072cfb4a9650867104bf7f50c --- gdb/ChangeLog | 9 +++ gdb/completer.c | 9 +++ gdb/completer.h | 4 ++ gdb/symtab.c | 18 ++++++ gdb/testsuite/ChangeLog | 5 ++ .../gdb.linespec/cp-completion-aliases.cc | 73 ++++++++++++++++++++++ .../gdb.linespec/cp-completion-aliases.exp | 57 +++++++++++++++++ 7 files changed, 175 insertions(+) create mode 100644 gdb/testsuite/gdb.linespec/cp-completion-aliases.cc create mode 100644 gdb/testsuite/gdb.linespec/cp-completion-aliases.exp diff --git a/gdb/completer.c b/gdb/completer.c index 93df1018f66..7b66fbf33e1 100644 --- a/gdb/completer.c +++ b/gdb/completer.c @@ -1600,6 +1600,15 @@ completion_tracker::add_completions (completion_list &&list) add_completion (std::move (candidate)); } +/* See completer.h. */ + +void +completion_tracker::remove_completion (const char *name) +{ + m_entries_hash.erase (name); + m_lowest_common_denominator_valid = false; +} + /* Helper for the make_completion_match_str overloads. Returns NULL as an indication that we want MATCH_NAME exactly. It is up to the caller to xstrdup that string if desired. */ diff --git a/gdb/completer.h b/gdb/completer.h index fd4aba79746..6d80c50aa12 100644 --- a/gdb/completer.h +++ b/gdb/completer.h @@ -328,6 +328,10 @@ public: LIST. */ void add_completions (completion_list &&list); + /* Remove completion matching NAME from the completion list, does nothing + if NAME is not already in the completion list. */ + void remove_completion (const char *name); + /* Set the quote char to be appended after a unique completion is added to the input line. Set to '\0' to clear. See m_quote_char's description. */ diff --git a/gdb/symtab.c b/gdb/symtab.c index 26551372cbb..88ed27c1ca9 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -5261,6 +5261,24 @@ completion_list_add_symbol (completion_tracker &tracker, completion_list_add_name (tracker, sym->language (), sym->natural_name (), lookup_name, text, word); + + /* C++ function symbols include the parameters within both the msymbol + name and the symbol name. The problem is that the msymbol name will + describe the parameters in the most basic way, with typedefs stripped + out, while the symbol name will represent the types as they appear in + the program. This means we will see duplicate entries in the + completion tracker. The following converts the symbol name back to + the msymbol name and removes the msymbol name from the completion + tracker. */ + if (sym->language () == language_cplus + && SYMBOL_DOMAIN (sym) == VAR_DOMAIN + && SYMBOL_CLASS (sym) == LOC_BLOCK) + { + std::string str + = cp_canonicalize_string_no_typedefs (sym->natural_name ()); + if (!str.empty ()) + tracker.remove_completion (str.c_str ()); + } } /* completion_list_add_name wrapper for struct minimal_symbol. */ diff --git a/gdb/testsuite/gdb.linespec/cp-completion-aliases.cc b/gdb/testsuite/gdb.linespec/cp-completion-aliases.cc new file mode 100644 index 00000000000..5ef85b401eb --- /dev/null +++ b/gdb/testsuite/gdb.linespec/cp-completion-aliases.cc @@ -0,0 +1,73 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +template +struct magic +{ + T x; +}; + +struct object +{ + int a; +}; + +typedef magic int_magic_t; + +typedef object *object_p; + +typedef const char *my_string_t; + +static int +get_value (object_p obj) +{ + return obj->a; +} + +static int +get_something (object_p obj) +{ + return obj->a; +} + +static int +get_something (my_string_t msg) +{ + return strlen (msg); +} + +static int +grab_it (int_magic_t *var) +{ + return var->x; +} + +int +main () +{ + magic m; + m.x = 4; + + object obj; + obj.a = 0; + + int val = (get_value (&obj) + get_something (&obj) + + get_something ("abc") + grab_it (&m)); + return val; +} diff --git a/gdb/testsuite/gdb.linespec/cp-completion-aliases.exp b/gdb/testsuite/gdb.linespec/cp-completion-aliases.exp new file mode 100644 index 00000000000..9fb497da7a9 --- /dev/null +++ b/gdb/testsuite/gdb.linespec/cp-completion-aliases.exp @@ -0,0 +1,57 @@ +# Copyright 2019 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# This file tests GDB's ability to remove symbol aliases from the +# completion list in C++. + +load_lib completion-support.exp + +standard_testfile .cc + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug}]} { + return -1 +} + +# Tests below are about tab-completion, which doesn't work if readline +# library isn't used. Check it first. + +if { ![readline_is_used] } { + untested "no tab completion support without readline" + return -1 +} + +# Disable the completion limit for the whole testcase. +gdb_test_no_output "set max-completions unlimited" + +test_gdb_complete_tab_unique "break get_v" \ + "break get_value\\(object_p\\)" " " + +test_gdb_complete_cmd_unique "break get_v" \ + "break get_value\\(object_p\\)" + +test_gdb_complete_tab_unique "break gr" \ + "break grab_it\\(int_magic_t\\*\\)" " " + +test_gdb_complete_cmd_unique "break gr" \ + "break grab_it\\(int_magic_t\\*\\)" + +test_gdb_complete_tab_multiple "break get_som" "ething(" \ + { "get_something(my_string_t)" "get_something(object_p)" } + +test_gdb_complete_cmd_multiple "break " "get_som" \ + { "get_something(my_string_t)" "get_something(object_p)" } + + + -- 2.14.5