From c73556cb0e6da3c2a4484975ee51e052a9be8b36 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 28 Aug 2023 12:40:35 -0600 Subject: [PATCH] Use gdb::array_view for value_array This changes value_array to accept an array view. I also replaced an alloca with a std::vector in array_operation::evaluate. This function can work on any size of array, so it seems bad to use alloca. Reviewed-by: John Baldwin Approved-By: Simon Marchi --- gdb/eval.c | 2 +- gdb/rust-lang.c | 2 +- gdb/valops.c | 3 ++- gdb/value.h | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/gdb/eval.c b/gdb/eval.c index 457a6697923..00b9231a5b9 100644 --- a/gdb/eval.c +++ b/gdb/eval.c @@ -2515,7 +2515,7 @@ array_operation::evaluate (struct type *expect_type, return set; } - value **argvec = XALLOCAVEC (struct value *, nargs); + std::vector argvec (nargs); for (tem = 0; tem < nargs; tem++) { /* Ensure that array expressions are coerced into pointer diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index 5eb33d0d3b7..f6e7d25f587 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -1344,7 +1344,7 @@ eval_op_rust_array (struct type *expect_type, struct expression *exp, for (i = 0; i < copies; ++i) eltvec[i] = elt; - return value_array (0, copies - 1, eltvec.data ()); + return value_array (0, copies - 1, eltvec); } else { diff --git a/gdb/valops.c b/gdb/valops.c index ea9d9b38e74..1133049c54a 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -1692,7 +1692,8 @@ value_ind (struct value *arg1) don't currently enforce any restriction on their types). */ struct value * -value_array (int lowbound, int highbound, struct value **elemvec) +value_array (int lowbound, int highbound, + gdb::array_view elemvec) { int nelem; int idx; diff --git a/gdb/value.h b/gdb/value.h index e5c63dccbe2..ccf52199146 100644 --- a/gdb/value.h +++ b/gdb/value.h @@ -1226,7 +1226,7 @@ inline struct value *value_string (const char *ptr, ssize_t count, } extern struct value *value_array (int lowbound, int highbound, - struct value **elemvec); + gdb::array_view elemvec); extern struct value *value_concat (struct value *arg1, struct value *arg2); -- 2.30.2