Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

This noncompliant code example using atomic integers can result in unsigned integer overflow wrapping:

Code Block
bgColor#FFcccc
langc
atomic_int i;
int ui_a;

/* Initialize i, ui_a */

atomic_fetch_add(&i, ui_a);

...

 

 

Compliant Solution

This compliant solution performs a postcondition test to ensure that the result of the unsigned addition operation to i is not less than the operand ui_a:

 

Code Block
bgColor#ccccff
langc
atomic_int i;
int ui_a;
 
/* Initialize ui_a, i */
 
atomic_fetch_add(&i, ui_a);
if (atomic_load(&i) < ui_a) {
  /* handle error condition */
}

Exceptions

...