Assignment of unexpected strong type argument

The STRONG.TYPE family of checkers detects situations in which programmer-enforced strong typing (type-defined abstract types) is broken or ignored, allowing the underlying ANSI type semantics to dominate.

The STRONG.TYPE.ASSIGN.ARG checker looks for argument passing in which strong types don't match.

Vulnerability and risk

A compiler following the ANSI standard won't report a warning for this sort of issue, as it checks only the underlying types, not the surface, or programmer-defined, types. As a result, it's possible that a logic error can occur.

Vulnerable code example

 typedef int Weight;
 typedef int Speed;

 void foo(Speed s) {}

 int main() {
   Weight w;
   return 0;

Klocwork flags line 8, indicating that an argument of strong type Weight was passed when an argument of strong type Speed was expected.