Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: REM Cost Reform

...

Although shifting a negative number of bits or shifting a number of bits greater than or equal to the width of the promoted left operand is undefined behavior in C, the risk is generally low because processors frequently reduce the shift amount modulo the width of the type.

Rule

Severity

Likelihood

Detectable

RepairableRemediation Cost

Priority

Level

INT34-C

Low

Unlikely

No

YesMedium

P2

L3

Automated Detection

Tool

Version

Checker

Description

Astrée
Include Page
Astrée_V
Astrée_V

precision-shift-width
precision-shift-width-constant

Fully checked
Axivion Bauhaus Suite

Include Page
Axivion Bauhaus Suite_V
Axivion Bauhaus Suite_V

CertC-INT34Can detect shifts by a negative or an excessive number of bits and right shifts on negative values.
CodeSonar
Include Page
CodeSonar_V
CodeSonar_V

LANG.ARITH.BIGSHIFT
LANG.ARITH.NEGSHIFT

Shift amount exceeds bit width
Negative shift amount

Compass/ROSE



Can detect violations of this rule. Unsigned operands are detected when checking for INT13-C. Use bitwise operators only on unsigned operands

Coverity
Include Page
Coverity_V
Coverity_V

BAD_SHIFT

Implemented
Cppcheck
Include Page
Cppcheck_V
Cppcheck_V
shiftNegative, shiftTooManyBits


Cppcheck Premium

Include Page
Cppcheck Premium_V
Cppcheck Premium_V

shiftNegative, shiftTooManyBits

premium-cert-int34-c


ECLAIR
Include Page
ECLAIR_V
ECLAIR_V
CC2.INT34Partially implemented
Helix QAC

Include Page
Helix QAC_V
Helix QAC_V

C0499, C2790, 

C++2790,  C++3003

DF2791, DF2792, DF2793


Klocwork

Include Page
Klocwork_V
Klocwork_V

MISRA.SHIFT.RANGE.2012


LDRA tool suite
Include Page
LDRA_V
LDRA_V

51 S, 403 S, 479 S

Partially implemented

Parasoft C/C++test
Include Page
Parasoft_V
Parasoft_V
CERT_C-INT34-a

Avoid incorrect shift operations

Polyspace Bug Finder

Include Page
Polyspace Bug Finder_V
Polyspace Bug Finder_V

CERT C: Rule INT34-C


Checks for:

  • Shift of a negative value
  • Shift operation overflow

Rule partially covered.

PVS-Studio

Include Page
PVS-Studio_V
PVS-Studio_V

V610
RuleChecker

Include Page
RuleChecker_V
RuleChecker_V

precision-shift-width-constant

Partially checked
TrustInSoft Analyzer

Include Page
TrustInSoft Analyzer_V
TrustInSoft Analyzer_V

shift

Exhaustively verified (see one compliant and one non-compliant example).

...