# V650. Type casting is used 2 times in a row. The '+' operation is executed. Probably meant: (T1)((T2)a + b).

The analyzer has detected a potential error in an expression with address arithmetic. Addition/subtraction operations are performed over an expression which is a double type conversion. It may be a misprint: the programmer forgot to put the first type conversion and addition operation into brackets.

Consider an example of incorrect code:

    ptr = (int *)(char *)p + offset_in_bytes;

The programmer was most likely expecting the 'p' variable to be cast to the 'char *' type, the shift in bytes added to it after that. Then the new pointer was expected to be cast to the 'int *' type.

But the missing parentheses turn this expression into a double type conversion and addition of the shift to the 'int'-pointer. The result will be different from the expected one. Such an error might well cause an array overrun.

This is the fixed code:

    ptr = (int *)((char *)p + offset_in_bytes);

This diagnostic is classified as:

CWE-468 CERT-EXP08-C

You can look at examples of errors detected by the V650 diagnostic.