Copyright (C) 2000-2012 |
GNU Info (g77-295.info)Challenges PosedChallenges Posed ================ Consider the following Fortran code, which uses various extensions (including some to Fortran 90): SUBROUTINE X(A) CHARACTER*(*) A COMPLEX CFUNC INTEGER*2 CLOCKS(200) INTEGER IFUNC CALL SYSTEM_CLOCK (CLOCKS (IFUNC (CFUNC ('('//A//')')))) The above poses the following challenges to any Fortran compiler that uses run-time interfaces, and a run-time library, roughly similar to those used by `g77': * Assuming the library routine that supports `SYSTEM_CLOCK' expects to set an `INTEGER*4' variable via its `COUNT' argument, the compiler must make available to it a temporary variable of that type. * Further, after the `SYSTEM_CLOCK' library routine returns, the compiler must ensure that the temporary variable it wrote is copied into the appropriate element of the `CLOCKS' array. (This assumes the compiler doesn't just reject the code, which it should if it is compiling under some kind of a "strict" option.) * To determine the correct index into the `CLOCKS' array, (putting aside the fact that the index, in this particular case, need not be computed until after the `SYSTEM_CLOCK' library routine returns), the compiler must ensure that the `IFUNC' function is called. That requires evaluating its argument, which requires, for `g77' (assuming `-ff2c' is in force), reserving a temporary variable of type `COMPLEX' for use as a repository for the return value being computed by `CFUNC'. * Before invoking `CFUNC', is argument must be evaluated, which requires allocating, at run time, a temporary large enough to hold the result of the concatenation, as well as actually performing the concatenation. * The large temporary needed during invocation of `CFUNC' should, ideally, be deallocated (or, at least, left to the GBE to dispose of, as it sees fit) as soon as `CFUNC' returns, which means before `IFUNC' is called (as it might need a lot of dynamically allocated memory). `g77' currently doesn't support all of the above, but, so that it might someday, it has evolved to handle at least some of the above requirements. Meeting the above requirements is made more challenging by conforming to the requirements of the GBEL/GBE combination. automatically generated by info2www version 1.2.2.9 |