]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdb, testsuite, rust: fix for empty array
authorRudnicki, Piotr <piotr.rudnicki@intel.com>
Wed, 12 Feb 2025 09:50:37 +0000 (10:50 +0100)
committerTom Tromey <tromey@adacore.com>
Mon, 24 Feb 2025 14:12:04 +0000 (07:12 -0700)
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>
gdb/rust-lang.c
gdb/testsuite/gdb.rust/expr.exp

index d4cd8802fa58f3b8e1b2cc648916b60edc710293..8bec934983ec66cd348f6d32df01b9c40b845017 100644 (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
     {
index 97db748abf6db0bd1269c30c6adea158452f7fb6..ca01c5feb36cf64ba49d201310c24b9f1de9ffd9 100644 (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.