Detects address assignments of temporary variables (on the stack) to non-temporary variables
Justification: Local variables of a function or method are created on the stack and they exist only while the function or method is being processed. If a pointer points to this kind of variable after processing the method or function, then you can use this pointer to access undefined memory, or to access an incorrect variable in another function. This situation should be avoided at all costs.
Importance: High
Example
FUNCTION TempVarInFUNC : DWORD VAR uiTemp : UINT; END_VAR TempVarInFUNC := ADR(uiTemp); // SA0021 PROGRAM PLC_PRG VAR dwTest : DWORD; END_VAR dwTest := TempVarInFUNC(); --> SA0021: Transporting address of temporary variable to outer scope symbol