Interface mismatch on function argument

The type of an actual argument does not match the corresponding formal parameter at a FORTRAN subroutine call.

When a call is compiled, an interface may be available that indicates that the called routine expects optional parameters. If the number of actual arguments is less than the number of dummy arguments, then the compiler will pass null opposite the dummy arguments. If it turns out that the actual definition of the called procedure doesn't match the interface, then this convention could cause a null value to be passed opposite a non-optional dummy argument. This often leads to a null pointer dereference error.

In this case, the call is through a subroutine that is referenced through a dummy argument and the interface in question is the one at the dummy argument declaration.

ID

Observation

Description

1

Definition

The place the function was defined

2

Call site

The place the function was called

Example

          
subroutine mysub(j)
integer :: j ! note: dummy argument is not optional
print *,j
end

subroutine icallyou(f)
interface
subroutine f(j)
integer, optional :: j
end subroutine f
end interface
integer :: m
read *, m
call f(m)
call f() ! error here when f refers to mysub
end

program test
interface
subroutine mysub(j)
integer, optional :: j
end subroutine mysub
end interface
call icallyou(mysub)
end
        

Copyright © 2010, Intel Corporation. All rights reserved.