In addition to Les's comments if your subroutine happened to use a REAL for dummy argument passed as INTEGER .and. if that if that real dummy argument were not use or if the real dummy argument were tested against 0 (.eq., .lt, .ge, .ne.) then the subroutine would have run as intended (excepting if the REAL were REAL(8) and INTEGER were INTEGER(4)). The argument mis-match is an error in programming regardles if the subroutine happened to work as intended.
For the above to work, the variables would have to be internally passed by reference and not passed in a register. Therefore, the program that may have worked on IA32 might not work on EM64T (x64) depending on which argument was in error in the subroutine argument list.
Jim Dempsey