clang-tidy - darwin-dispatch-once-nonstatic — Extra Clang Tools 12 documentation

# Extra Clang Tools 12 documentation

## clang-tidy - darwin-dispatch-once-nonstatic

# darwin-dispatch-once-nonstatic

Finds declarations of `dispatch_once_t` variables without static or global storage. The behavior of using `dispatch_once_t` predicates with automatic or dynamic storage is undefined by libdispatch, and should be avoided.

It is a common pattern to have functions initialize internal static or global data once when the function runs, but programmers have been known to miss the static on the `dispatch_once_t` predicate, leading to an uninitialized flag value at the mercy of the stack.

Programmers have also been known to make `dispatch_once_t` variables be members of structs or classes, with the intent to lazily perform some expensive struct or class member initialization only once; however, this violates the libdispatch requirements.

See the discussion section of Apple’s dispatch_once documentation for more information.