When an assignment to a structure field or an array element is interpreted, the entire structure and array value is calculated and stored to the value set. Calculation of values of structure fields of array elements avoids this redundancy, but a ‘Nonconst’ value may appear, or some values may not be evaluated because of value set overflow.
Entire alias values are calculated and stored in variables during processing, with the result that more than one alias value may be stored in a variable even if the variable has only one proper value. Calculation of proper values of the variable avoids this redundancy, but a ‘Nonconst’ value may appear, or some values may not be evaluated because of value set overflow.
Maximum size of the value set of a variable is 32. This means that analysis will not be fully complete when the amount of possible values exceeds this number. A ‘NonConst’ value indicates that there are values that are not calculated. Warnings about overflow of value sets of variables are not generated.
For performance reasons, the maximum size of a memory block is limited to 32KB. Every access beyond this limit is ignored. (Memory blocks are used for structures, arrays, and variables accessed through a DEFINED attribute or pointers). This means that strings, structures and arrays that do not fit in 32KB are not processed correctly.
Read variables of a statement are enumerated independently from each other in the sense that the statement is interpreted for all combinations (no more than 16) of the values of the variables used in the statement. It may lead to superfluous write values when the statement is evaluated for some combinations that cannot occur during real program execution.
A ‘NonConst’ value is added to a value set if some values cannot be evaluated or the number of the values exceeds the value set limit.
During interpretation of an operator, a ‘NonConst’ value is added to write variables if the number of combinations of values of read variables exceeds the limit.