.

Release Notes: CODESYS Static Analysis 5.2.0.0

Key Issue Type Summary Resolution Note
SAN-1687 Bug

SAN summary message is only reported on second code generation

Duplicate [[GENERAL]]
Static Analysis will no longer prevent a download if analysis messages are reported, therefore no summary message will be produced anymore.
Duplicate of SAN-1206
SAN-1686 Bug

SAN 5.1.0.0, Bug, Minor: Build success or fail depends on the rules of the reported SAN errors

Duplicate [[GENERAL]]
Static Analysis will no longer prevent a download if analysis messages are reported, therefore no summary message will be produced anymore.
Duplicate of SAN-1206
SAN-1679 Bug

SA0055: Internal error

Fixed
SAN-1678 Bug

SA0031: False positive for FB method called via interface

Duplicate [[GENERAL]]
Duplicates SAN-1668
SAN-1670 Improvement

SA0178: Add option to "Ignore error/warning globally for POU"

Fixed
SAN-1668 Bug

SAN: SA0031 "Unused Method" should not be reported for interface methods

Fixed
SAN-1664 Bug

Operator __NEW() causes false positive compile error C0265 while running SAN in a library

Fixed
SAN-1661 Bug

Static Analysis creates no analysis tag by "possible divison by zero"

Fixed
SAN-1659 Bug

FalsePositive: SA0014 Assigment of instances is reported for VAR_IN_OUT assignments

Fixed
SAN-1656 Bug

SA0040: False positives for expressions with MODULO where the divisor is not zero

Won't Fix [[GENERAL]]
The static analysis will only perform local checks, that means it cannot know if there are any accesses to the variables in other methods or from other parts of the program. It cannot proof that the value will still have the initialisation value when the marked line is executed.
SAN-1655 Bug

SFC SA0162, SA0168: False positives for missing comments and unused values

Fixed
SAN-1654 Bug

SA0040: False positive about denominator with granted value of 1

Won't Fix [[GENERAL]]
The static analysis will only perform local checks, that means it cannot know what values the instance variables of the function block have, when it is invoked. If another method sets the value to -1, the program could still crash.
SAN-1651 Bug

The information Aborted check .... because code is to complex is reported after each change

Fixed
SAN-1649 Bug

SAN: Dialog to configure limits/parameters cannot be confirmed with Enter key

Fixed
SAN-1647 Improvement

Refactoring: Fix all critical code smells

Fixed
SAN-1645 Improvement

SAN: Settings/Rules search should allow querying with "SA" Prefix

Fixed [[GENERAL]]
No additional filtering mechanismn was implemented.
The display of the rules in the configuration editor was changed instead: The rule prefix (e.g. SA0123) is displayed similar to the display of the compiler warnings in the project settings dialog.
SAN-1643 Improvement

Ignore SA009 for FB_Init

Fixed
SAN-1642 Bug

SA0040: Possible division by zero, not recognizing simple logic nor tolerance

Fixed [[GENERAL]]
Static Analysis will no longer report a warning for a potential division by zero when the divisor is guarded by an ABS > epsilon check, for example:
IF ABS(divisor) > LREAL#1E-9 THEN
test := test/divisor
END_IF

[[KNOWN_LIMITATIONS]]
The project attached to this issue contains multiple cases of false positives for error SA0040. Under this issue ID, only the case described below was fixed. For the remaining fixes, see the linked issue (SAN-1685).
SAN-1640 Improvement

Generate all variables in a program as temp variables instead of static ones

Fixed
SAN-1639 Bug

SA0061: False positive in case of call of __DELETE operator

Fixed
SAN-1638 Bug

False Positives SA35/SA36 when executed from command line with --noUI

Fixed
SAN-1637 Bug

SAN: False positives reported for FOR/REPEAT loops

Cannot Reproduce [[GENERAL]]
Static Analysis 5.2.0.0 no longer generates message SA0180 for the reported cases where it was previously unjustified.

[[KNOWN_LIMITATIONS]]
Certain POU constructs like multiple nested loops may result in a "Code of POU is too complex" warning, meaning that certain checks cannot be performed.
SAN-1636 Bug

SA0062: False positive for special WHILE usage within FOR loop

Fixed
SAN-1635 Bug

SAN: False positives when assigning function return values within CASE statement

Fixed
SAN-1634 Bug

SAN: False positives reported for enum members which are respected in CASE statement within value area

Fixed
SAN-1633 Bug

SA0019: False Positive Implicit conversion from 'POINTER TO VisuStructClientData' to 'POINTER TO VisuStructClientData'

Fixed [[GENERAL]]
In the reported project there actually is no false positive, because the input pointer refers to a VisuStructClientData defined in a different Library than the parameter. But even if the correct declaration is used, the compiler will also report an error.
The static analysis uses information produced by the essentials Compiler. This information is wrong in this case. In some cases a type used in a library refers to the wrong signature.
We can't fix the problem in the static analysis, but we introduced a plausibility check. If a type refers to a declaration with a different name than the type, we ignore the declaration and don't produce any error.
SAN-1631 Bug

SA0062 False Positive if the compare value has only access by pointer

Fixed [[GENERAL]]
The check will not report a SA0062 message if the condition contains a local variable of the currently checked POU and anyone within the currently checked POU uses the address of this variable.
SAN-1629 Bug

SA0095AssignmentInConditions shows false positive for Array of Structure Initialization

Fixed
SAN-1627 Bug

SAN: False positive for different struct instances whose output variable is only written once

Fixed [[GENERAL]]
Detection for SA0004: "Multiple write on output" has been fully reworked.
It now resolves incomplete addresses (e.g., %QB*) to their concrete locations using instance paths from VAR_CONFIG.
As before, multiple writes inside IF or CASE statements are allowed when they occur in different branches. Nesting depth is ignored because internal optimizations (such as converting ELSEIF chains into nested IF statements) can change the structure without user involvement.
SAN-1626 Bug

SAN: Different report results for VAR and VAR_TEMP variables

Duplicate [[GENERAL]]
Duplicates SAN-1640.
The data flow analysis now executes Programs and Function blocks implicitly in an endless loop. Temporary variables are initialized in each loop cycle. Local Variables are initialized once outside the loop. In all other respect, VAR_TEMP and VAR (also VAR_OUTPUT) are treated in the same way. This way, the same messages should be produced, as long as the local variables are not written.
SAN-1625 Bug

SAN: Generates some false-positive results

Fixed
SAN-1623 Bug

SA0145: Rule should not be reported for reference access within SEL operator if having checked the reference with __ISVALIDREF

Fixed
SAN-1561 Bug

Static analysis checks not executed automatically anymore after check all pool objects

Duplicate [[GENERAL]]
Duplicate of SAN-1560 SAN
SAN-1560 Bug

SAN: In library projects, static analysis is no longer performed automatically when "Check all pool objects" is selected

Fixed [[KNOWN_LIMITATIONS]]
In contrast to the command "Run Static Analysis" those rules, that evaluate generated code (e.g. rule SA0100 "Variables greater than XX bytes"), are not reported if Static Analysis is run automatically after "Check all Pool Objects"
SAN-1238 Bug

Metric: direct address accesses in the declaration part are not counted

Duplicate [[GENERAL]]
Duplicate of SAN-1237
SAN-1237 Bug

Metric: Globals used in the declaration of a POU are not counted

Fixed
SAN-1206 Bug

Violations of precompile rules don't prevent from going online if rules are checked automatically when generating code

Fixed [[GENERAL]]
In Static Analysis Professional it is now possible to login in even in case of Static Analysis errors (if Static Analysis is run automatically after "Generate Code")
For Static Analysis Light (the unlicensed variant of Static Analysis) the behaviour remains unchanged.
SAN-1122 Improvement

SA0032: Implement Quickfix, Remove unused enumeration constant

Fixed
SAN-1085 Improvement

SA0164, Multiline comments: Implement Quickfix to convert into single line comments

Fixed
SAN-1084 Improvement

SA0163, Nested comments: Implement Quickfix to remove nesting

Fixed
SAN-1077 Improvement

SA0078, Missing CASE branches: Implement Quickfix to remove unused parts of CASE statement

Fixed [[GENERAL]]
This Quickfix can only be used with essentials versions 3.5.22.0 and later.
SAN-786 Bug

Static Analysis: Create a new dummy device description for SAN checks

Cannot Reproduce [[GENERAL]]
Starting with CODESYS V3.5 SP18 or Static Analysis V5 this problem is no longer reproducible
SAN-762 Improvement

SAN should not check implemented method members

Fixed
SAN-620 Bug

Metrics: LCOM metric does not consider properties/transitions

Fixed
SAN-600 Bug

Static Analysis Full\View standard metrics: Objects defined with attribute 'global_init_slot' are not contained in metrics table

Fixed