SA0018: Unusual bit accessPermalink

Detects bit access to signed variables. However, the IEC 61131-3 standard permits only bit access and bit shift operations on bitfields. See also the strict rules SA0147 and SA0148.

Justification: Signed data types should not be used as bitfields and the other way around. The IEC 61131-3 standard does not provide for this kind of access, and therefore you should comply with this rule when you write portable code.

Importance: Medium

Exception for flag enumerations: When an enumeration is declared as a flag by means of the ‎{attribute 'flags'}‎ pragma attribute, the ‎SA0018‎ error is not issued for bit access with the ‎OR‎, ‎AND‎ or ‎NOT‎ operators.

Example

PROGRAM PLC_PRG
VAR
	iTemp1 : INT;
	diTemp3 : DINT;
	uliTemp4 : ULINT;
	siTemp5 : SINT;
	usiTemp6 : USINT;
	byTemp2 : BYTE;
END_VAR
iTemp1.3 := TRUE;     // SA0018
diTemp3.4 := TRUE;    // SA0018
uliTemp4.18 := FALSE; // no error because this is an unsigned data type
siTemp5.2 := FALSE;   // SA0018
usiTemp6.3 := TRUE;   // no error because this is an unsigned data type
byTemp2.5 := FALSE;   // no error because the byte is a bitfield

--> SA0018: Unusual bit access