This is the assertion form of the /addressresolution
command qualifier. You can use it to specify, on a function-
by-function basis, the degree of data aliasing in a program.
Aliasing is the use of multiple names including pointers to refer
to the same memory location. This is often a useful technique,
but it complicates data dependence analysis and can reduce the
opportunities for optimization. You can use this pragma to tell KAP
how cautious to be about multiple names affecting the same object.
The levels are cumulative - the assumptions made at one level include the assumptions made at earlier levels. The permitted values are as follows:
0
- KAP makes no assumptions about aliasing.
1
- (Default) Assume there is no pointer
self-referencing.
2
- Assume function arguments are distinct
from each other.
3
- Assume local pointers and arrays are
distinct from global pointers and arrays.
4
- No aliasing is used - all variables,
pointers, and arrays refer to different objects.
See Chapter 4, the description of the
/addressresolution
qualifier, for a detailed
description of the meaning of each level.
When this pragma appears within a function between the outer { and }
of the function definition, it applies only to that function. When
this pragma appears elsewhere, it applies to all functions following
it in the source file. Placing a pragma within a function overrides
(for that function) the global pragma or command qualifier, so
different values can be used in different parts of a program. The
/addressresolution
command qualifier acts like an
assertion at the beginning of the source file, and can be overridden
by #pragma _KAP arl
assertions later in the file.
See also the #pragma _KAP distinct
assertion (Section 5.1.2) that can be used to specify
specific pairs of variables that are not aliased.