#165: Intel compiler complains wrongly about incompatible argument lists in Fortran ----------------------+----------------------------------------------------- Reporter: eschnett | Owner: Type: defect | Status: new Priority: minor | Milestone: Component: Cactus | Version: Keywords: | ----------------------+----------------------------------------------------- On the CCT numrel workstations, the Intel compiler (with version and options as defined in SimFactory) sometimes complains that argument lists for calls in Fortran don't match. This usually happens to me in GRHydro.
The reason seems to be that the Intel compiler silently remembers the prototype of every Fortran subroutine it encounters, and then compares against this prototype (if it exists) when the subroutine is called. If a subroutine's argument list changes, and if the caller is then recompiled before the subroutine itself, then the compiler detects a mismatch (because it compares to the old argument list) and aborts with an error.
The Intel compiler stores the argument lists together with module information in the scratch directory. To solve this problem, one either has to clean the configuration (make *-clean), or one has to manually delete all outdated *.mod files belonging to this thorn (and possibly also delete all *.o files of this thorn). A make *-clean is expensive, and the manual solution requires in-depth knowledge of the problem.
Cactus should detect this problem and offer a solution, although I don't know which. Maybe the solution could involve compiling files in a different order by detecting the dependency between the caller and the callee, and treating this in the same way as module definitions.