gdb, testsuite, rust: fix for empty array

For the Rust language, to avoid segmentation fault in case of an empty
array, do not try to copy any elements, but allocate and return
the empty array immediately.

With the command before the change, gdb crashes with message:

(gdb) set lang rust
(gdb) p [1;0]
Fatal signal: Segmentation fault

After the fix in this commit, gdb shows following message:
(gdb) set lang rust
(gdb) p [1;0]
$1 = []

Update the existing test case gdb.rust/expr.exp to verify the change.

Approved-By: Tom Tromey <tom@tromey.com>
This commit is contained in:
Rudnicki, Piotr 2025-02-12 10:50:37 +01:00 committed by Tom Tromey
parent c619e92beb
commit a4f974e939
2 changed files with 5 additions and 1 deletions

View File

@ -1455,7 +1455,7 @@ eval_op_rust_array (struct type *expect_type, struct expression *exp,
if (copies < 0)
error (_("Array with negative number of elements"));
if (noside == EVAL_NORMAL)
if (noside == EVAL_NORMAL && copies > 0)
return value_array (0, std::vector<value *> (copies, elt));
else
{

View File

@ -115,6 +115,10 @@ gdb_test "print \[1,2 3" "',' or ']' expected"
gdb_test "print \[1 2" "',', ';', or ']' expected"
gdb_test "print \[23\]" " = \\\[23\\\]"
gdb_test "print \[0;0\]" " = \\\[\\\]"
gdb_test "print \[1;0\]" " = \\\[\\\]"
gdb_test "print \[0;1\]" " = \\\[0\\\]"
gdb_test "print b\"hi rust\"" " = b\"hi rust\""
# This isn't rusty syntax yet, but that's another bug -- this is just
# testing that byte escapes work properly.