| I discovered that Intel Fortran uses module symbol names that conflict
| with allowed procedure names. Module symbols are lower case module-name
| plus procedure-name joined by "_mp_". They should have used an upper
| case _MP_ (or something else) to make it distinct from external
| procedure names. I reported this, and they replied that fixing this
| error would cause too many problems due to being an incompatible binary
| My feeling is that recompiling all modules for a project is not seen as
| a big problem by most Fortran developers, and that it is better to fix
| the mistake now rather than propagate it further. On the other hand, the
| odds of unintentionally having a conflicting name are quite small.
| So, what do other people think? Is it better to fix an obscure bug, or
| avoid binary compatibility changes?
| In case my explanation was not clear, the following code will not work
| in Intel Fortran:
Which version of Intel Fortran are we talking about? At least on Windows,
the default name translation is uppercase, so that in your example:
| subroutine x_mp_y()
| end subroutine x_mp_y
| module x
| subroutine y()
| end subroutine y
| end module x
the two routines will be mangled as _X_MP_Y and _X_mp_Y respectively,
causing no conflict. Now, if you switch the name representation to
lowercase by compiler option, I doubt they'll reverse the _mp_ into
_MP_. Which is an inconvenience indeed. If you switch name mangling
to case-sensitive (as-is), you will always be able to cheat the compiler.
(Well, they maybe could have used "?" or something as separator, but
the current method has the advantage that that the module procedures
are callable from C).
Please reply to the newsgroup.
You can find my real e-mail on my home page above.