diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6f6e6baee6013ad985e726e9e0096d90ae3b3577..022ce04d000c3be73a0aae72b27d7f9da5c8e2e6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2019-06-10 Andrew Burgess <andrew.burgess@embecosm.com> + + * valops.c (value_slice): Check for not allocated or not + associated values. + 2019-06-10 Tom de Vries <tdevries@suse.de> PR gdb/24618 diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 7cc712ba560d54bc8ad9d1d9a01ae44d12272d27..33ae2f4925f677758ffbb848bfdf85606d2126ce 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-06-10 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.fortran/vla-sizeof.exp: Update expected results. + 2019-06-06 Amos Bird <amosbird@gmail.com> * gdb.base/annota1.exp (thread_switch): Add test for diff --git a/gdb/testsuite/gdb.fortran/vla-sizeof.exp b/gdb/testsuite/gdb.fortran/vla-sizeof.exp index b6fdaebbf5156373c3d331713649a1262fdfd9c0..4fe6938445cb34669602393ea6e861ff6b40b5e9 100644 --- a/gdb/testsuite/gdb.fortran/vla-sizeof.exp +++ b/gdb/testsuite/gdb.fortran/vla-sizeof.exp @@ -32,7 +32,7 @@ gdb_test "print sizeof(vla1)" " = 0" "print sizeof non-allocated vla1" gdb_test "print sizeof(vla1(3,2,1))" \ "no such vector element \\(vector not allocated\\)" \ "print sizeof non-allocated indexed vla1" -gdb_test "print sizeof(vla1(3:4,2,1))" "slice out of range" \ +gdb_test "print sizeof(vla1(3:4,2,1))" "array not allocated" \ "print sizeof non-allocated sliced vla1" # Try to access value in allocated VLA @@ -49,7 +49,7 @@ gdb_test "print sizeof(pvla)" " = 0" "print sizeof non-associated pvla" gdb_test "print sizeof(pvla(3,2,1))" \ "no such vector element \\(vector not associated\\)" \ "print sizeof non-associated indexed pvla" -gdb_test "print sizeof(pvla(3:4,2,1))" "slice out of range" \ +gdb_test "print sizeof(pvla(3:4,2,1))" "array not associated" \ "print sizeof non-associated sliced pvla" # Try to access values in pointer to VLA and compare them diff --git a/gdb/valops.c b/gdb/valops.c index fd92a4d165575086d9f00e4c5fa8787c427c3691..cbf2eccde3e46d65ee70ecb06e6fb4ae9f2bc8d8 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -3801,6 +3801,11 @@ value_slice (struct value *array, int lowbound, int length) && TYPE_CODE (array_type) != TYPE_CODE_STRING) error (_("cannot take slice of non-array")); + if (type_not_allocated (array_type)) + error (_("array not allocated")); + if (type_not_associated (array_type)) + error (_("array not associated")); + range_type = TYPE_INDEX_TYPE (array_type); if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0) error (_("slice from bad array or bitstring"));