C and C++


CONCURRENCY.MAA : Multiple Accesses of Atomic

Summary

A given atomic variable is accessed two or more times in the same expression.

Properties

Class Name Multiple Accesses of Atomic
Significance reliability
Mnemonic CONCURRENCY.MAA
Categories
CERT-C CERT-C:CON32-C Prevent data races when accessing bit-fields from multiple threads
  CERT-C:CON40-C Do not refer to an atomic variable twice in an expression
  CERT-C:CON43-C Do not allow data races in multithreaded code
  CERT-C:POS49-C When data must be accessed by multiple threads, provide a mutex and guarantee no adjacent data is also accessed
Availability Available for C and C++.
Enabling Checks for this warning class are disabled by default, and require the unnormalized C ASTs for the project. To enable them, add the following WARNING_FILTER rule and RETAIN_UNNORMALIZED_C_AST specification to the project configuration file.
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Multiple Accesses of Atomic"
Note that retaining the unnormalized ASTs will increase the disk space used to store the project representation, and may make the analysis take longer.

Example

#include <stdatomic.h>

atomic_int atomic_var = ATOMIC_VAR_INIT(0);
atomic_int other_atomic_var = ATOMIC_VAR_INIT(1);
int not_atomic_var = 0;

int compute_sums(void){
    int i = 0;
    atomic_var += 1;                              /* ok: += is guaranteed atomic by standard */
    atomic_var = atomic_var + 1;  /* 'Multiple Accesses of Atomic' warning issued here */
    i += atomic_var + atomic_var; /* 'Multiple Accesses of Atomic' warning issued here */
    atomic_var + other_atomic_var;                /* ok: each atomic variable is only accessed once */
    i += not_atomic_var + not_atomic_var;         /* ok: not an atomic variable */
    return i;
}

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.