gdb: Check for not allocated/associated values during array slicing

When extracting an array slice we should give up if the array is
not-allocated or not-associated.  For Fortran, at least in gfortran
compiled code, the upper and lower bounds are undefined if the array
is not allocated or not associated, in which case performing checks
against these bounds will result in undefined behaviour.

Better then to throw an error if we try to slice such an array.  This
changes the error message that the user will receive in these
cases (if they got an error message before).  Previously they may have
gotten "slice out of range" now they'll get "array not allocated" or
"array not associated".

gdb/ChangeLog:

	* valops.c (value_slice): Check for not allocated or not
	associated values.

gdb/testsuite/ChangeLog:

	* gdb.fortran/vla-sizeof.exp: Update expected results.
This commit is contained in:
Andrew Burgess
2019-05-23 19:49:41 +01:00
parent 9ab084121f
commit a706786341
4 changed files with 16 additions and 2 deletions

View File

@@ -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"));