diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/cli/cli-setshow.c | 23 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/settings.exp | 11 |
4 files changed, 43 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 029acd1..91f3b75 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,13 @@ 2019-06-13 Pedro Alves <palves@redhat.com> + * cli/cli-setshow.c (cli/cli-setshow.c): New parameter + 'expression'. When parsing an expression, error out if there's + junk after "unlimited". + (parse_cli_var_uinteger, parse_cli_var_zuinteger_unlimited) + (do_set_command): Adjust calls to is_unlimited_literal. + +2019-06-13 Pedro Alves <palves@redhat.com> + * compile/compile.c (make_compile_options_def_group): Add braces around array_view initializer. * thread.c (make_thread_apply_all_options_def_group) diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c index 14ea723..8199fa7 100644 --- a/gdb/cli/cli-setshow.c +++ b/gdb/cli/cli-setshow.c @@ -150,10 +150,12 @@ deprecated_show_value_hack (struct ui_file *ignore_file, /* Returns true if ARG is "unlimited". */ static bool -is_unlimited_literal (const char **arg) +is_unlimited_literal (const char **arg, bool expression) { *arg = skip_spaces (*arg); + const char *unl_start = *arg; + const char *p = skip_to_space (*arg); size_t len = p - *arg; @@ -161,6 +163,19 @@ is_unlimited_literal (const char **arg) if (len > 0 && strncmp ("unlimited", *arg, len) == 0) { *arg += len; + + /* If parsing an expression (i.e., parsing for a "set" command), + anything after "unlimited" is junk. For options, anything + after "unlimited" might be a command argument or another + option. */ + if (expression) + { + const char *after = skip_spaces (*arg); + if (*after != '\0') + error (_("Junk after \"%.*s\": %s"), + (int) len, unl_start, after); + } + return true; } @@ -183,7 +198,7 @@ parse_cli_var_uinteger (var_types var_type, const char **arg, error_no_arg (_("integer to set it to.")); } - if (var_type == var_uinteger && is_unlimited_literal (arg)) + if (var_type == var_uinteger && is_unlimited_literal (arg, expression)) val = 0; else if (expression) val = parse_and_eval_long (*arg); @@ -213,7 +228,7 @@ parse_cli_var_zuinteger_unlimited (const char **arg, bool expression) if (*arg == nullptr) error_no_arg (_("integer to set it to, or \"unlimited\".")); - if (is_unlimited_literal (arg)) + if (is_unlimited_literal (arg, expression)) val = -1; else if (expression) val = parse_and_eval_long (*arg); @@ -448,7 +463,7 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) error_no_arg (_("integer to set it to.")); } - if (c->var_type == var_integer && is_unlimited_literal (&arg)) + if (c->var_type == var_integer && is_unlimited_literal (&arg, true)) val = 0; else val = parse_and_eval_long (arg); diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 3a3a6e8..37e327d 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2019-06-13 Pedro Alves <palves@redhat.com> + * gdb.base/settings.exp (test-integer): Test junk after + "unlimited". + +2019-06-13 Pedro Alves <palves@redhat.com> + * gdb.base/options.exp (test-thread-apply): New. (top level): Call it. diff --git a/gdb/testsuite/gdb.base/settings.exp b/gdb/testsuite/gdb.base/settings.exp index 4a7319d..aeca67c 100644 --- a/gdb/testsuite/gdb.base/settings.exp +++ b/gdb/testsuite/gdb.base/settings.exp @@ -141,8 +141,19 @@ proc test-integer {variant} { "$set_cmd unlimited" } + # Check junk after "unlimited". gdb_test "$set_cmd unlimitedu" "No symbol table is loaded.*" + if {$variant == "zinteger" || $variant == "zuinteger"} { + gdb_test "$set_cmd unlimited u" "No symbol table is loaded.*" + gdb_test "$set_cmd unlimited 1" "No symbol table is loaded.*" + gdb_test "$set_cmd unlimited -1" "No symbol table is loaded.*" + } else { + gdb_test "$set_cmd unlimited u" "Junk after \"unlimited\": u" + gdb_test "$set_cmd unlimited 1" "Junk after \"unlimited\": 1" + gdb_test "$set_cmd unlimited -1" "Junk after \"unlimited\": -1" + } + test_gdb_complete_none "$set_cmd unlimited " test_gdb_complete_none "$set_cmd unlimitedu" test_gdb_complete_none "$set_cmd unlimited u" |