28 lines
1.1 KiB
ReStructuredText
28 lines
1.1 KiB
ReStructuredText
|
.. title:: clang-tidy - bugprone-dynamic-static-initializers
|
||
|
|
||
|
bugprone-dynamic-static-initializers
|
||
|
====================================
|
||
|
|
||
|
Finds instances of static variables that are dynamically initialized
|
||
|
in header files.
|
||
|
|
||
|
This can pose problems in certain multithreaded contexts. For example,
|
||
|
when disabling compiler generated synchronization instructions for
|
||
|
static variables initialized at runtime (e.g. by ``-fno-threadsafe-statics``), even if a particular project
|
||
|
takes the necessary precautions to prevent race conditions during
|
||
|
initialization by providing their own synchronization, header files included from other projects may
|
||
|
not. Therefore, such a check is helpful for ensuring that disabling
|
||
|
compiler generated synchronization for static variable initialization will not cause
|
||
|
problems.
|
||
|
|
||
|
Consider the following code:
|
||
|
|
||
|
.. code-block:: c
|
||
|
|
||
|
int foo() {
|
||
|
static int k = bar();
|
||
|
return k;
|
||
|
}
|
||
|
|
||
|
When synchronization of static initialization is disabled, if two threads both call `foo` for the first time, there is the possibility that `k` will be double initialized, creating a race condition.
|