From patchwork Fri Jul 14 14:57:03 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 21618 Received: (qmail 35435 invoked by alias); 14 Jul 2017 14:57:17 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 35420 invoked by uid 89); 14 Jul 2017 14:57:17 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.9 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: outbound-ss-1812.hostmonster.com Received: from gproxy1-pub.mail.unifiedlayer.com (HELO outbound-ss-1812.hostmonster.com) (69.89.25.95) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 14 Jul 2017 14:57:15 +0000 Received: from cmgw4 (cmgw5 [10.0.90.85]) by gproxy1.mail.unifiedlayer.com (Postfix) with ESMTP id 274E0175AEC for ; Fri, 14 Jul 2017 08:57:14 -0600 (MDT) Received: from box522.bluehost.com ([74.220.219.122]) by cmgw4 with id kexA1v00y2f2jeq01exDCe; Fri, 14 Jul 2017 08:57:14 -0600 X-Authority-Analysis: v=2.2 cv=eYdNR/MH c=1 sm=1 tr=0 a=GsOEXm/OWkKvwdLVJsfwcA==:117 a=GsOEXm/OWkKvwdLVJsfwcA==:17 a=G3gG6ho9WtcA:10 a=zstS-IiYAAAA:8 a=0FD05c-RAAAA:8 a=13KGAo4DAAAA:8 a=v5VlQfAXFaox9j0gXWkA:9 a=4G6NA9xxw8l3yy4pmD5M:22 a=l1rpMCqCXRGZwUSuRcM3:22 a=DdAeqqNASC6T8jxox_Jq:22 Received: from 174-29-39-24.hlrn.qwest.net ([174.29.39.24]:54040 helo=pokyo.Home) by box522.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.87) (envelope-from ) id 1dW21m-002hrN-Oe; Fri, 14 Jul 2017 08:57:10 -0600 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [RFA] Make gdb.lookup_typename work for Rust types Date: Fri, 14 Jul 2017 08:57:03 -0600 Message-Id: <20170714145703.12318-1-tom@tromey.com> X-BWhitelist: no X-Exim-ID: 1dW21m-002hrN-Oe X-Source-Sender: 174-29-39-24.hlrn.qwest.net (pokyo.Home) [174.29.39.24]:54040 X-Source-Auth: tom+tromey.com X-Email-Count: 1 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTIyLmJsdWVob3N0LmNvbQ== PR rust/21763 points out that gdb.lookup_typename does not work properly for (some) Rust types. I tracked this down to a missing case in symbol_matches_domain. Tested by the buildbot. 2017-07-14 Tom Tromey PR rust/21763: * symtab.c (symbol_matches_domain): Add language_rust to special case. * rust-exp.y (convert_ast_to_expression) : Don't treat LOC_TYPEDEF symbols as variables. 2017-07-14 Tom Tromey * gdb.rust/simple.exp: Add regression test for PR rust/21763. --- gdb/ChangeLog | 8 ++++++++ gdb/rust-exp.y | 12 +++++++++--- gdb/symtab.c | 3 ++- gdb/testsuite/ChangeLog | 4 ++++ gdb/testsuite/gdb.rust/simple.exp | 8 ++++++++ 5 files changed, 31 insertions(+), 4 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 550a7a8..5c36fb1 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2017-07-14 Tom Tromey + + PR rust/21763: + * symtab.c (symbol_matches_domain): Add language_rust to special + case. + * rust-exp.y (convert_ast_to_expression) : Don't + treat LOC_TYPEDEF symbols as variables. + 2017-07-14 Simon Marchi * ax-gdb.c (gen_aggregate_elt_ref): Remove operand_name and diff --git a/gdb/rust-exp.y b/gdb/rust-exp.y index c7361bc..821abcd 100644 --- a/gdb/rust-exp.y +++ b/gdb/rust-exp.y @@ -2316,7 +2316,7 @@ convert_ast_to_expression (struct parser_state *state, varname = convert_name (state, operation); sym = rust_lookup_symbol (varname, expression_context_block, VAR_DOMAIN); - if (sym.symbol != NULL) + if (sym.symbol != NULL && SYMBOL_CLASS (sym.symbol) != LOC_TYPEDEF) { write_exp_elt_opcode (state, OP_VAR_VALUE); write_exp_elt_block (state, sym.block); @@ -2325,9 +2325,15 @@ convert_ast_to_expression (struct parser_state *state, } else { - struct type *type; + struct type *type = NULL; - type = rust_lookup_type (varname, expression_context_block); + if (sym.symbol != NULL) + { + gdb_assert (SYMBOL_CLASS (sym.symbol) == LOC_TYPEDEF); + type = SYMBOL_TYPE (sym.symbol); + } + if (type == NULL) + type = rust_lookup_type (varname, expression_context_block); if (type == NULL) error (_("No symbol '%s' in current context"), varname); diff --git a/gdb/symtab.c b/gdb/symtab.c index 497d520..89cc338 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -2625,7 +2625,8 @@ symbol_matches_domain (enum language symbol_language, Similarly, any Ada type declaration implicitly defines a typedef. */ if (symbol_language == language_cplus || symbol_language == language_d - || symbol_language == language_ada) + || symbol_language == language_ada + || symbol_language == language_rust) { if ((domain == VAR_DOMAIN || domain == STRUCT_DOMAIN) && symbol_domain == STRUCT_DOMAIN) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index c29f6e5..1807fb6 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2017-07-14 Tom Tromey + + * gdb.rust/simple.exp: Add regression test for PR rust/21763. + 2017-07-13 Andrew Burgess * gdb.mi/mi-vla-fortran.exp: Correct even more parameter passing diff --git a/gdb/testsuite/gdb.rust/simple.exp b/gdb/testsuite/gdb.rust/simple.exp index 872b22c..db23162 100644 --- a/gdb/testsuite/gdb.rust/simple.exp +++ b/gdb/testsuite/gdb.rust/simple.exp @@ -246,3 +246,11 @@ gdb_test "print parametrized.next.val" \ " = \\(simple::ParametrizedStruct \\*\\) $hex" gdb_test "print parametrized" \ " = simple::ParametrizedStruct \\{next: simple::ParametrizedEnum<\[a-z:\]*Box>>::Val\\{val: $hex\\}, value: 0\\}" + + +load_lib gdb-python.exp +if {[skip_python_tests]} { + continue +} + +gdb_test "python print(gdb.lookup_type('simple::HiBob'))" "simple::HiBob"