-
Notifications
You must be signed in to change notification settings - Fork 76
Expand file tree
/
Copy pathStaticOrThreadLocalObjectsNonConstantInit.ql
More file actions
29 lines (27 loc) · 1.27 KB
/
StaticOrThreadLocalObjectsNonConstantInit.ql
File metadata and controls
29 lines (27 loc) · 1.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* @id cpp/autosar/static-or-thread-local-objects-non-constant-init
* @name A3-3-2: Static and thread-local objects shall be constant-initialized
* @description Non-const global and static variables are difficult to read and maintain.
* @kind problem
* @precision very-high
* @problem.severity warning
* @tags external/autosar/id/a3-3-2
* maintainability
* readability
* external/autosar/allocated-target/implementation
* external/autosar/enforcement/automated
* external/autosar/obligation/required
*/
import cpp
import codingstandards.cpp.autosar
import codingstandards.cpp.orderofevaluation.Initialization
from StaticStorageDurationVariable staticOrThreadLocalVar, string reason, Element reasonElement
where
not isExcluded(staticOrThreadLocalVar,
InitializationPackage::staticOrThreadLocalObjectsNonConstantInitQuery()) and
isNotConstantInitialized(staticOrThreadLocalVar, reason, reasonElement) and
// Uninstantiated templates may have initializers that are not semantically complete
not staticOrThreadLocalVar.isFromUninstantiatedTemplate(_)
select staticOrThreadLocalVar.getInitializer(),
"Static or thread-local object " + staticOrThreadLocalVar.getName() +
" is not constant initialized because it $@.", reasonElement, reason