* eval.c (evaluate_subexp_standard): Add code to check the target
type of a TYPE_CODE_PTR value when we encounter a f77 undetermined arglist. If it is array, string or function, work on the target value instead.
This commit is contained in:
parent
589e074d2e
commit
df0ca54784
2 changed files with 25 additions and 0 deletions
|
@ -1,3 +1,10 @@
|
|||
2005-06-13 Wu Zhou <woodzltc@cn.ibm.com>
|
||||
|
||||
* eval.c (evaluate_subexp_standard): Add code to check the target
|
||||
type of a TYPE_CODE_PTR value when we encounter a f77 undetermined
|
||||
arglist. If it is array, string or function, work on the target
|
||||
value instead.
|
||||
|
||||
2005-06-12 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
Nick Roberts <nickrob@snap.net.nz>
|
||||
|
||||
|
|
18
gdb/eval.c
18
gdb/eval.c
|
@ -1246,6 +1246,24 @@ evaluate_subexp_standard (struct type *expect_type,
|
|||
type = check_typedef (value_type (arg1));
|
||||
code = TYPE_CODE (type);
|
||||
|
||||
if (code == TYPE_CODE_PTR)
|
||||
{
|
||||
/* Fortran always passes variable to subroutines as pointer.
|
||||
So we need to look into its target type to see if it is
|
||||
array, string or function. If it is, we need to switch
|
||||
to the target value the original one points to. */
|
||||
struct type *target_type = check_typedef (TYPE_TARGET_TYPE (type));
|
||||
|
||||
if (TYPE_CODE (target_type) == TYPE_CODE_ARRAY
|
||||
|| TYPE_CODE (target_type) == TYPE_CODE_STRING
|
||||
|| TYPE_CODE (target_type) == TYPE_CODE_FUNC)
|
||||
{
|
||||
arg1 = value_ind (arg1);
|
||||
type = check_typedef (value_type (arg1));
|
||||
code = TYPE_CODE (type);
|
||||
}
|
||||
}
|
||||
|
||||
switch (code)
|
||||
{
|
||||
case TYPE_CODE_ARRAY:
|
||||
|
|
Loading…
Reference in a new issue