diff options
author | Tom Tromey <tom@tromey.com> | 2021-04-22 07:16:36 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2021-04-22 07:16:36 -0600 |
commit | 22f80c0f77be6304b9632827d8161e28cb4a195a (patch) | |
tree | 15a04368f45009943a10d976eb442c761c257dc6 /gdb/rust-parse.c | |
parent | b11b2969a9a507d9e42c8029cfeb06b9bc41fceb (diff) | |
download | binutils-22f80c0f77be6304b9632827d8161e28cb4a195a.zip binutils-22f80c0f77be6304b9632827d8161e28cb4a195a.tar.gz binutils-22f80c0f77be6304b9632827d8161e28cb4a195a.tar.bz2 |
Improve code coverage of Rust testing
I enabled code coverage and ran the gdb test suite, and noticed that
the new Rust parser was missing testing on a few lines that were easy
to cover. This patch mostly adds tests for certain syntax errors; but
this process also uncovered a couple of real bugs: I must have
cut-and-pasted the 'sizeof' parsing code from some other code, because
it is checking for KW_MUT (the old bison parser did not do this), and
the array length check is actually impossible because a negative
number like '-1' is parsed as two tokens.
gdb/ChangeLog
2021-04-22 Tom Tromey <tom@tromey.com>
* rust-parse.c (rust_parser::parse_sizeof): Remove KW_MUT code.
(struct typed_val_int) <val>: Now ULONGEST.
(rust_parser::parse_array_type): Remove negative check.
(rust_lex_int_test): Change 'value' to ULONGEST.
gdb/testsuite/ChangeLog
2021-04-22 Tom Tromey <tom@tromey.com>
* gdb.rust/modules.exp: Add checks for syntax errors.
* gdb.rust/expr.exp: Add checks for syntax errors.
* gdb.rust/simple.exp: Add checks for syntax errors.
Diffstat (limited to 'gdb/rust-parse.c')
-rw-r--r-- | gdb/rust-parse.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/gdb/rust-parse.c b/gdb/rust-parse.c index bb31782..2f2afcf 100644 --- a/gdb/rust-parse.c +++ b/gdb/rust-parse.c @@ -126,7 +126,7 @@ enum token_type : int struct typed_val_int { - LONGEST val; + ULONGEST val; struct type *type; }; @@ -1447,9 +1447,6 @@ rust_parser::parse_sizeof () { assume (KW_SIZEOF); - if (current_token == KW_MUT) - lex (); - require ('('); operation_up result = make_operation<unop_sizeof_operation> (parse_expr ()); require (')'); @@ -1600,9 +1597,7 @@ rust_parser::parse_array_type () if (current_token != INTEGER && current_token != DECIMAL_INTEGER) error (_("integer expected")); - LONGEST val = current_int_val.val; - if (val < 0) - error (_("Negative array length")); + ULONGEST val = current_int_val.val; lex (); require (']'); @@ -2117,7 +2112,7 @@ rust_lex_test_one (rust_parser *parser, const char *input, int expected) static void rust_lex_int_test (rust_parser *parser, const char *input, - LONGEST value, int kind) + ULONGEST value, int kind) { rust_lex_test_one (parser, input, kind); SELF_CHECK (parser->current_int_val.val == value); |