Skip to content

Commit 69765a6

Browse files
committed
Checkpoint
1 parent 907f40b commit 69765a6

File tree

2 files changed

+104
-3
lines changed

2 files changed

+104
-3
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/**
2+
* Provides models of functions in <memory> that deals with uninitialized memory.
3+
*/
4+
5+
import cpp
6+
7+
abstract class UninitializedMemoryManagementFunction extends Function {
8+
UninitializedMemoryManagementFunction() {
9+
this.getADeclarationLocation().getFile().getShortName() = "memory"
10+
}
11+
}
12+
13+
class UninitializedCopyFunction extends UninitializedMemoryManagementFunction {
14+
UninitializedCopyFunction() { this.hasQualifiedName("std", "uninitialized_copy") }
15+
}
16+
17+
class UninitializedCopyNFunction extends UninitializedMemoryManagementFunction {
18+
UninitializedCopyNFunction() { this.hasQualifiedName("std", "uninitialized_copy_n") }
19+
}
20+
21+
class UninitializedDefaultConstructFunction extends UninitializedMemoryManagementFunction {
22+
UninitializedDefaultConstructFunction() {
23+
this.hasQualifiedName("std", "uninitialized_default_construct")
24+
}
25+
}
26+
27+
class UninitializedDefaultConstructNFunction extends UninitializedMemoryManagementFunction {
28+
UninitializedDefaultConstructNFunction() {
29+
this.hasQualifiedName("std", "uninitialized_default_construct_n")
30+
}
31+
}
32+
33+
class UninitializedValueConstructFunction extends UninitializedMemoryManagementFunction {
34+
UninitializedValueConstructFunction() {
35+
this.hasQualifiedName("std", "uninitialized_value_construct")
36+
}
37+
}
38+
39+
class UninitializedValueConstructNFunction extends UninitializedMemoryManagementFunction {
40+
UninitializedValueConstructNFunction() {
41+
this.hasQualifiedName("std", "uninitialized_value_construct_n")
42+
}
43+
}
44+
45+
class UninitializedMoveFunction extends UninitializedMemoryManagementFunction {
46+
UninitializedMoveFunction() { this.hasQualifiedName("std", "uninitialized_move") }
47+
}
48+
49+
class UninitializedMoveNFunction extends UninitializedMemoryManagementFunction {
50+
UninitializedMoveNFunction() { this.hasQualifiedName("std", "uninitialized_move_n") }
51+
}
52+
53+
class UninitializedFillFunction extends UninitializedMemoryManagementFunction {
54+
UninitializedFillFunction() { this.hasQualifiedName("std", "uninitialized_fill") }
55+
}
56+
57+
class UninitializedFillNFunction extends UninitializedMemoryManagementFunction {
58+
UninitializedFillNFunction() { this.hasQualifiedName("std", "uninitialized_fill_n") }
59+
}
60+
61+
class DestroyFunction extends UninitializedMemoryManagementFunction {
62+
DestroyFunction() { this.hasQualifiedName("std", "destroy") }
63+
}
64+
65+
class DestroyNFunction extends UninitializedMemoryManagementFunction {
66+
DestroyNFunction() { this.hasQualifiedName("std", "destroy_n") }
67+
}
68+
69+
class DestroyAtFunction extends UninitializedMemoryManagementFunction {
70+
DestroyAtFunction() { this.hasQualifiedName("std", "destroy_at") }
71+
}
72+
73+
class LaunderFunction extends UninitializedMemoryManagementFunction {
74+
LaunderFunction() { this.hasQualifiedName("std", "launder") }
75+
}

cpp/misra/src/rules/RULE-21-6-3/AdvancedMemoryManagementUsed.ql

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,34 @@
1515

1616
import cpp
1717
import codingstandards.cpp.misra
18+
import codingstandards.cpp.UnintializedMemoryAllocation
19+
import codingstandards.cpp.allocations.CustomOperatorNewDelete
1820

19-
from
21+
class NonStandardNewOrNewArrayOperator extends CustomOperatorNewOrDelete {
22+
NonStandardNewOrNewArrayOperator() {
23+
this.getName() in ["operator new", "operator new[]"] and
24+
not this instanceof CustomOperatorNew // `CustomOperatorNew` only detects replaceable allocation functions.
25+
}
26+
}
27+
28+
class NonStandardDeleteOrDeleteArrayOperator extends CustomOperatorNewOrDelete {
29+
NonStandardDeleteOrDeleteArrayOperator() {
30+
this.getName() in ["operator delete", "operator delete[]"] and
31+
not this instanceof CustomOperatorDelete // `CustomOperatorDelete` only detects replaceable deallocation functions.
32+
}
33+
}
34+
35+
from Element element
2036
where
21-
not isExcluded(x, Memory6Package::advancedMemoryManagementUsedQuery()) and
22-
select
37+
not isExcluded(element, Memory6Package::advancedMemoryManagementUsedQuery()) and
38+
(
39+
/* The element is a call to one of the function at <memory> that manages uninitialized memory. */
40+
element.(FunctionCall).getTarget() instanceof UninitializedMemoryManagementFunction or
41+
/* The element is an explicit call to a destructor. */
42+
element instanceof VacuousDestructorCall or
43+
element instanceof DestructorCall or
44+
/* The element is a declaration or a definition of operator `new` / `new[]` / `delete` / `delete[]`. */
45+
element instanceof NonStandardNewOrNewArrayOperator or
46+
element instanceof NonStandardDeleteOrDeleteArrayOperator
47+
)
48+
select element, "TODO"

0 commit comments

Comments
 (0)