Sometimes, KAP transformations are disabled when KAP is not sure about their effect on the rest of the program. For example, one possible transformation would turn:
SUBROUTINE X(I,N) IF (I .LT. N) I = N END
Into:
SUBROUTINE X(I,N) I = MAX(I,N) END
But, if the actual parameter for I
were a constant,
CALL X(1,N)
, it would appear that the value of the
constant 1 was being reassigned. (In some older versions of Fortran,
the values of constants could be changed in this way.) Without
additional information, KAP is cautious and performs no argument-
changing transformations within the subroutine.
Most compilers automatically put constant actual arguments into
temporary variables to protect against this case. The assertion
C*$* assert temporaries for constant arguments
or the
command qualifier /assume=c
(the default) inform KAP
that constant parameters are protected. The assertion C*$*
assert no temporaries for constant arguments
directs KAP
to avoid transformations that might change the values of constant
parameters.