aboutsummaryrefslogtreecommitdiff
path: root/gdb/rust-exp.y
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2017-07-13 15:03:27 -0600
committerTom Tromey <tom@tromey.com>2017-07-14 10:16:39 -0600
commit65547233e04b32e087f74f8f5e9d3ffb6fe2c198 (patch)
treeeab7e58cd431d01c48bce4ac30e00b1a98c62e4e /gdb/rust-exp.y
parent8f14146e1317b7b416ce298fad1a4f3d1ccbeb2b (diff)
downloadgdb-65547233e04b32e087f74f8f5e9d3ffb6fe2c198.zip
gdb-65547233e04b32e087f74f8f5e9d3ffb6fe2c198.tar.gz
gdb-65547233e04b32e087f74f8f5e9d3ffb6fe2c198.tar.bz2
Make gdb.lookup_typename work for Rust types
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 <tom@tromey.com> PR rust/21763: * symtab.c (symbol_matches_domain): Add language_rust to special case. * rust-exp.y (convert_ast_to_expression) <OP_VAR_VALUE>: Don't treat LOC_TYPEDEF symbols as variables. 2017-07-14 Tom Tromey <tom@tromey.com> * gdb.rust/simple.exp: Add regression test for PR rust/21763.
Diffstat (limited to 'gdb/rust-exp.y')
-rw-r--r--gdb/rust-exp.y12
1 files changed, 9 insertions, 3 deletions
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);