* 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:
Wu Zhou 2005-06-13 07:23:15 +00:00
parent 589e074d2e
commit df0ca54784
2 changed files with 25 additions and 0 deletions

View file

@ -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> 2005-06-12 Daniel Jacobowitz <dan@codesourcery.com>
Nick Roberts <nickrob@snap.net.nz> Nick Roberts <nickrob@snap.net.nz>

View file

@ -1246,6 +1246,24 @@ evaluate_subexp_standard (struct type *expect_type,
type = check_typedef (value_type (arg1)); type = check_typedef (value_type (arg1));
code = TYPE_CODE (type); 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) switch (code)
{ {
case TYPE_CODE_ARRAY: case TYPE_CODE_ARRAY: