Copyright (C) 2000-2012 |
GNU Info (g77-300.info)Context-Sensitive IntrinsicnessContext-Sensitive Intrinsicness ------------------------------- `g77' treats procedure references to _possible_ intrinsic names as always enabling their intrinsic nature, regardless of whether the _form_ of the reference is valid for that intrinsic. For example, `CALL SQRT' is interpreted by `g77' as an invalid reference to the `SQRT' intrinsic function, because the reference is a subroutine invocation. First, `g77' recognizes the statement `CALL SQRT' as a reference to a _procedure_ named `SQRT', not to a _variable_ with that name (as it would for a statement such as `V = SQRT'). Next, `g77' establishes that, in the program unit being compiled, `SQRT' is an intrinsic--not a subroutine that happens to have the same name as an intrinsic (as would be the case if, for example, `EXTERNAL SQRT' was present). Finally, `g77' recognizes that the _form_ of the reference is invalid for that particular intrinsic. That is, it recognizes that it is invalid for an intrinsic _function_, such as `SQRT', to be invoked as a _subroutine_. At that point, `g77' issues a diagnostic. Some users claim that it is "obvious" that `CALL SQRT' references an external subroutine of their own, not an intrinsic function. However, `g77' knows about intrinsic subroutines, not just functions, and is able to support both having the same names, for example. As a result of this, `g77' rejects calls to intrinsics that are not subroutines, and function invocations of intrinsics that are not functions, just as it (and most compilers) rejects invocations of intrinsics with the wrong number (or types) of arguments. So, use the `EXTERNAL SQRT' statement in a program unit that calls a user-written subroutine named `SQRT'. |