Node: Multiple Definitions of External Names, Next: , Previous: Mangling of Names, Up: Disappointments

Multiple Definitions of External Names

g77 doesn't allow a common block and an external procedure or BLOCK DATA to have the same name. Some systems allow this, but g77 does not, to be compatible with f2c.

g77 could special-case the way it handles BLOCK DATA, since it is not compatible with f2c in this particular area (necessarily, since g77 offers an important feature here), but it is likely that such special-casing would be very annoying to people with programs that use EXTERNAL FOO, with no other mention of FOO in the same program unit, to refer to external procedures, since the result would be that g77 would treat these references as requests to force-load BLOCK DATA program units.

In that case, if g77 modified names of BLOCK DATA so they could have the same names as COMMON, users would find that their programs wouldn't link because the FOO procedure didn't have its name translated the same way.

(Strictly speaking, g77 could emit a null-but-externally-satisfying definition of FOO with its name transformed as if it had been a BLOCK DATA, but that probably invites more trouble than it's worth.)