C and C++


LANG.STRUCT.INIT.UNORDERED : Unordered Initialization

Summary

A non-local variable is initialized using another variable that is initialized in a different translation unit.

Order of initialization across compilation units is not determined.

Properties

Class Name Unordered Initialization
Significance reliability
Mnemonic LANG.STRUCT.INIT.UNORDERED
Categories
AUTOSARC++14 AUTOSARC++14:A3-3-2 Static and thread-local objects shall be constant-initialized.
CWE CWE:1419 Incorrect Initialization of Resource
CERT-CPP CERT-CPP:DCL56-CPP Avoid cycles during initialization of static objects
JSF++ JSF++:214 Assuming that non-local static objects, in separate translation units, are initialized in a special order shall not be done.
POW10 POW10:1 Restrict to simple control flow constructs.
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="Unordered Initialization"
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

// LANG.STRUCT.INIT.UNORDERED.a.cpp

extern int init_in_b_file;

int b = init_in_b_file; // 'Unordered Initialization' warning issued here
// LANG.STRUCT.INIT.UNORDERED.b.cpp

int init_in_b_file = 5;

int y = init_in_b_file;             // ok: int init_in_b_file is initialized earlier in the same file

Relevant Configuration File Parameters

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