binutils-gdb/gdb/testsuite/gdb.fortran
Richard Bunt 23be8da739 Logical short circuiting with argument lists
When evaluating Fortran expressions such as the following:

	print truth_table(1,1) .OR. truth_table(2,1)

where truth_table(1,1) evaluates to true, the debugger would report that
it could not perform substring operations on this type. This patch
addresses this issue.

Investigation revealed that EVAL_SKIP was not being handled correctly
for all types serviced by the OP_F77_UNDETERMINED_ARGLIST case in
evaluate_subexp_standard. While skipping an undetermined argument list
the type is resolved to be an integer (as this is what evaluate_subexp
returns when skipping) and so it was not possible to delegate to the
appropriate case (e.g. array, function call).

The solution implemented here updates OP_VAR_VALUE to return correct
type information when skipping. This way OP_F77_UNDETERMINED_ARGLIST
can delegate the skipping to the appropriate case or routine, which
should know how to skip/evaluate the type in question.

koenig.exp was updated to include a testcase which exercises the
modified skip logic in OP_VAR_VALUE, as it falls through from
OP_ADL_FUNC.

This patch has been tested for regressions with GCC 7.3 on aarch64,
ppc64le and x86_64.

gdb/ChangeLog:

	* eval.c (skip_undetermined_arglist): Skip argument list helper.
	(evaluate_subexp_standard): Return a dummy type when
	honoring EVAL_SKIP in OP_VAR_VALUE and handle skipping in the
	OP_F77_UNDETERMINED_ARGLIST case.
	* expression.h (enum noside): Update comment.

gdb/testsuite/ChangeLog:

	* gdb.cp/koenig.exp: Extend to test logical short circuiting.
	* gdb.fortran/short-circuit-argument-list.exp: New file.
	* gdb.fortran/short-circuit-argument-list.f90: New test.
2018-09-19 10:43:56 +01:00
..
array-element.exp
array-element.f
charset.exp
charset.f90
common-block.exp
common-block.f90
complex.exp
complex.f
derived-type-function.exp
derived-type-function.f90
derived-type.exp
derived-type.f90
exprs.exp
library-module-lib.f90
library-module-main.f90
library-module.exp
logical.exp
logical.f90
module.exp
module.f90
multi-dim.exp
multi-dim.f90
nested-funcs.exp Fix gdb.fortran/nested-funcs.exp failure 2018-08-07 22:46:37 -04:00
nested-funcs.f90
print-formatted.exp
print-formatted.f90
printing-types.exp
printing-types.f90
ptr-indentation.exp
ptr-indentation.f90
short-circuit-argument-list.exp Logical short circuiting with argument lists 2018-09-19 10:43:56 +01:00
short-circuit-argument-list.f90 Logical short circuiting with argument lists 2018-09-19 10:43:56 +01:00
subarray.exp
subarray.f
type.f90
types.exp
vla-alloc-assoc.exp
vla-datatypes.exp
vla-datatypes.f90
vla-history.exp
vla-ptr-info.exp
vla-ptype-sub.exp
vla-ptype.exp
vla-sizeof.exp
vla-sub.f90
vla-type.exp
vla-type.f90
vla-value-sub-arbitrary.exp
vla-value-sub-finish.exp
vla-value-sub.exp
vla-value.exp
vla.f90
whatis_type.exp