mirror of
https://github.com/github/codeql.git
synced 2025-12-24 04:36:35 +01:00
C++: Add example with missing destructor calls on parameters passed by value.
This commit is contained in:
@@ -20163,6 +20163,30 @@ ir.cpp:
|
||||
# 2430| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>
|
||||
# 2430| ValueCategory = lvalue
|
||||
# 2432| getStmt(6): [ReturnStmt] return ...
|
||||
# 2434| [TopLevelFunction] void param_with_destructor_by_value(ClassWithDestructor)
|
||||
# 2434| <params>:
|
||||
# 2434| getParameter(0): [Parameter] c
|
||||
# 2434| Type = [Class] ClassWithDestructor
|
||||
# 2434| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 2436| getStmt(0): [ReturnStmt] return ...
|
||||
# 2438| [TopLevelFunction] void param_with_destructor_by_pointer(ClassWithDestructor*)
|
||||
# 2438| <params>:
|
||||
# 2438| getParameter(0): [Parameter] c
|
||||
# 2438| Type = [PointerType] ClassWithDestructor *
|
||||
# 2438| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 2440| getStmt(0): [ReturnStmt] return ...
|
||||
# 2442| [TopLevelFunction] void param_with_destructor_by_ref(ClassWithDestructor&)
|
||||
# 2442| <params>:
|
||||
# 2442| getParameter(0): [Parameter] c
|
||||
# 2442| Type = [LValueReferenceType] ClassWithDestructor &
|
||||
# 2442| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 2444| getStmt(0): [ReturnStmt] return ...
|
||||
# 2446| [TopLevelFunction] void param_with_destructor_by_rref(ClassWithDestructor&&)
|
||||
# 2446| <params>:
|
||||
# 2446| getParameter(0): [Parameter] c
|
||||
# 2446| Type = [RValueReferenceType] ClassWithDestructor &&
|
||||
# 2446| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 2448| getStmt(0): [ReturnStmt] return ...
|
||||
perf-regression.cpp:
|
||||
# 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&)
|
||||
# 4| <params>:
|
||||
|
||||
@@ -15583,6 +15583,67 @@ ir.cpp:
|
||||
# 2410| Block 13
|
||||
# 2410| v2410_8(void) = Unreached :
|
||||
|
||||
# 2434| void param_with_destructor_by_value(ClassWithDestructor)
|
||||
# 2434| Block 0
|
||||
# 2434| v2434_1(void) = EnterFunction :
|
||||
# 2434| m2434_2(unknown) = AliasedDefinition :
|
||||
# 2434| m2434_3(unknown) = InitializeNonLocal :
|
||||
# 2434| m2434_4(unknown) = Chi : total:m2434_2, partial:m2434_3
|
||||
# 2434| r2434_5(glval<ClassWithDestructor>) = VariableAddress[c] :
|
||||
# 2434| m2434_6(ClassWithDestructor) = InitializeParameter[c] : &:r2434_5
|
||||
# 2436| v2436_1(void) = NoOp :
|
||||
# 2434| v2434_7(void) = ReturnVoid :
|
||||
# 2434| v2434_8(void) = AliasedUse : m2434_3
|
||||
# 2434| v2434_9(void) = ExitFunction :
|
||||
|
||||
# 2438| void param_with_destructor_by_pointer(ClassWithDestructor*)
|
||||
# 2438| Block 0
|
||||
# 2438| v2438_1(void) = EnterFunction :
|
||||
# 2438| m2438_2(unknown) = AliasedDefinition :
|
||||
# 2438| m2438_3(unknown) = InitializeNonLocal :
|
||||
# 2438| m2438_4(unknown) = Chi : total:m2438_2, partial:m2438_3
|
||||
# 2438| r2438_5(glval<ClassWithDestructor *>) = VariableAddress[c] :
|
||||
# 2438| m2438_6(ClassWithDestructor *) = InitializeParameter[c] : &:r2438_5
|
||||
# 2438| r2438_7(ClassWithDestructor *) = Load[c] : &:r2438_5, m2438_6
|
||||
# 2438| m2438_8(unknown) = InitializeIndirection[c] : &:r2438_7
|
||||
# 2440| v2440_1(void) = NoOp :
|
||||
# 2438| v2438_9(void) = ReturnIndirection[c] : &:r2438_7, m2438_8
|
||||
# 2438| v2438_10(void) = ReturnVoid :
|
||||
# 2438| v2438_11(void) = AliasedUse : m2438_3
|
||||
# 2438| v2438_12(void) = ExitFunction :
|
||||
|
||||
# 2442| void param_with_destructor_by_ref(ClassWithDestructor&)
|
||||
# 2442| Block 0
|
||||
# 2442| v2442_1(void) = EnterFunction :
|
||||
# 2442| m2442_2(unknown) = AliasedDefinition :
|
||||
# 2442| m2442_3(unknown) = InitializeNonLocal :
|
||||
# 2442| m2442_4(unknown) = Chi : total:m2442_2, partial:m2442_3
|
||||
# 2442| r2442_5(glval<ClassWithDestructor &>) = VariableAddress[c] :
|
||||
# 2442| m2442_6(ClassWithDestructor &) = InitializeParameter[c] : &:r2442_5
|
||||
# 2442| r2442_7(ClassWithDestructor &) = Load[c] : &:r2442_5, m2442_6
|
||||
# 2442| m2442_8(unknown) = InitializeIndirection[c] : &:r2442_7
|
||||
# 2444| v2444_1(void) = NoOp :
|
||||
# 2442| v2442_9(void) = ReturnIndirection[c] : &:r2442_7, m2442_8
|
||||
# 2442| v2442_10(void) = ReturnVoid :
|
||||
# 2442| v2442_11(void) = AliasedUse : m2442_3
|
||||
# 2442| v2442_12(void) = ExitFunction :
|
||||
|
||||
# 2446| void param_with_destructor_by_rref(ClassWithDestructor&&)
|
||||
# 2446| Block 0
|
||||
# 2446| v2446_1(void) = EnterFunction :
|
||||
# 2446| m2446_2(unknown) = AliasedDefinition :
|
||||
# 2446| m2446_3(unknown) = InitializeNonLocal :
|
||||
# 2446| m2446_4(unknown) = Chi : total:m2446_2, partial:m2446_3
|
||||
# 2446| r2446_5(glval<ClassWithDestructor &&>) = VariableAddress[c] :
|
||||
# 2446| m2446_6(ClassWithDestructor &&) = InitializeParameter[c] : &:r2446_5
|
||||
# 2446| r2446_7(ClassWithDestructor &&) = Load[c] : &:r2446_5, m2446_6
|
||||
# 2446| m2446_8(unknown) = InitializeIndirection[c] : &:r2446_7
|
||||
# 2448| v2448_1(void) = NoOp :
|
||||
# 2446| v2446_9(void) = ReturnIndirection[c] : &:r2446_7, m2446_8
|
||||
# 2446| v2446_10(void) = ReturnVoid :
|
||||
# 2446| v2446_11(void) = AliasedUse : m2446_3
|
||||
# 2446| v2446_12(void) = ExitFunction :
|
||||
|
||||
perf-regression.cpp:
|
||||
# 6| void Big::Big()
|
||||
# 6| Block 0
|
||||
|
||||
@@ -2431,4 +2431,20 @@ void initialization_with_temp_destructor() {
|
||||
y += x;
|
||||
}
|
||||
|
||||
void param_with_destructor_by_value(ClassWithDestructor c) {
|
||||
// The call to ~ClassWithDestructor::ClassWithDestructor() seems to be missing here.
|
||||
}
|
||||
|
||||
void param_with_destructor_by_pointer(ClassWithDestructor* c) {
|
||||
// No destructor call should be here
|
||||
}
|
||||
|
||||
void param_with_destructor_by_ref(ClassWithDestructor& c) {
|
||||
// No destructor call should be here
|
||||
}
|
||||
|
||||
void param_with_destructor_by_rref(ClassWithDestructor&& c) {
|
||||
// No destructor call should be here
|
||||
}
|
||||
|
||||
// semmle-extractor-options: -std=c++20 --clang
|
||||
|
||||
@@ -12968,6 +12968,37 @@
|
||||
| ir.cpp:2431:14:2431:14 | Load | m2430_17 |
|
||||
| ir.cpp:2431:14:2431:14 | Right | r2431_3 |
|
||||
| ir.cpp:2431:14:2431:14 | Unary | r2431_2 |
|
||||
| ir.cpp:2434:6:2434:35 | ChiPartial | partial:m2434_3 |
|
||||
| ir.cpp:2434:6:2434:35 | ChiTotal | total:m2434_2 |
|
||||
| ir.cpp:2434:6:2434:35 | SideEffect | m2434_3 |
|
||||
| ir.cpp:2434:57:2434:57 | Address | &:r2434_5 |
|
||||
| ir.cpp:2438:6:2438:37 | ChiPartial | partial:m2438_3 |
|
||||
| ir.cpp:2438:6:2438:37 | ChiTotal | total:m2438_2 |
|
||||
| ir.cpp:2438:6:2438:37 | SideEffect | m2438_3 |
|
||||
| ir.cpp:2438:60:2438:60 | Address | &:r2438_5 |
|
||||
| ir.cpp:2438:60:2438:60 | Address | &:r2438_5 |
|
||||
| ir.cpp:2438:60:2438:60 | Address | &:r2438_7 |
|
||||
| ir.cpp:2438:60:2438:60 | Address | &:r2438_7 |
|
||||
| ir.cpp:2438:60:2438:60 | Load | m2438_6 |
|
||||
| ir.cpp:2438:60:2438:60 | SideEffect | m2438_8 |
|
||||
| ir.cpp:2442:6:2442:33 | ChiPartial | partial:m2442_3 |
|
||||
| ir.cpp:2442:6:2442:33 | ChiTotal | total:m2442_2 |
|
||||
| ir.cpp:2442:6:2442:33 | SideEffect | m2442_3 |
|
||||
| ir.cpp:2442:56:2442:56 | Address | &:r2442_5 |
|
||||
| ir.cpp:2442:56:2442:56 | Address | &:r2442_5 |
|
||||
| ir.cpp:2442:56:2442:56 | Address | &:r2442_7 |
|
||||
| ir.cpp:2442:56:2442:56 | Address | &:r2442_7 |
|
||||
| ir.cpp:2442:56:2442:56 | Load | m2442_6 |
|
||||
| ir.cpp:2442:56:2442:56 | SideEffect | m2442_8 |
|
||||
| ir.cpp:2446:6:2446:34 | ChiPartial | partial:m2446_3 |
|
||||
| ir.cpp:2446:6:2446:34 | ChiTotal | total:m2446_2 |
|
||||
| ir.cpp:2446:6:2446:34 | SideEffect | m2446_3 |
|
||||
| ir.cpp:2446:58:2446:58 | Address | &:r2446_5 |
|
||||
| ir.cpp:2446:58:2446:58 | Address | &:r2446_5 |
|
||||
| ir.cpp:2446:58:2446:58 | Address | &:r2446_7 |
|
||||
| ir.cpp:2446:58:2446:58 | Address | &:r2446_7 |
|
||||
| ir.cpp:2446:58:2446:58 | Load | m2446_6 |
|
||||
| ir.cpp:2446:58:2446:58 | SideEffect | m2446_8 |
|
||||
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
|
||||
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
|
||||
| perf-regression.cpp:6:3:6:5 | Address | &:r6_7 |
|
||||
|
||||
@@ -14362,6 +14362,63 @@ ir.cpp:
|
||||
# 2410| v2410_5(void) = AliasedUse : ~m?
|
||||
# 2410| v2410_6(void) = ExitFunction :
|
||||
|
||||
# 2434| void param_with_destructor_by_value(ClassWithDestructor)
|
||||
# 2434| Block 0
|
||||
# 2434| v2434_1(void) = EnterFunction :
|
||||
# 2434| mu2434_2(unknown) = AliasedDefinition :
|
||||
# 2434| mu2434_3(unknown) = InitializeNonLocal :
|
||||
# 2434| r2434_4(glval<ClassWithDestructor>) = VariableAddress[c] :
|
||||
# 2434| mu2434_5(ClassWithDestructor) = InitializeParameter[c] : &:r2434_4
|
||||
# 2436| v2436_1(void) = NoOp :
|
||||
# 2434| v2434_6(void) = ReturnVoid :
|
||||
# 2434| v2434_7(void) = AliasedUse : ~m?
|
||||
# 2434| v2434_8(void) = ExitFunction :
|
||||
|
||||
# 2438| void param_with_destructor_by_pointer(ClassWithDestructor*)
|
||||
# 2438| Block 0
|
||||
# 2438| v2438_1(void) = EnterFunction :
|
||||
# 2438| mu2438_2(unknown) = AliasedDefinition :
|
||||
# 2438| mu2438_3(unknown) = InitializeNonLocal :
|
||||
# 2438| r2438_4(glval<ClassWithDestructor *>) = VariableAddress[c] :
|
||||
# 2438| mu2438_5(ClassWithDestructor *) = InitializeParameter[c] : &:r2438_4
|
||||
# 2438| r2438_6(ClassWithDestructor *) = Load[c] : &:r2438_4, ~m?
|
||||
# 2438| mu2438_7(unknown) = InitializeIndirection[c] : &:r2438_6
|
||||
# 2440| v2440_1(void) = NoOp :
|
||||
# 2438| v2438_8(void) = ReturnIndirection[c] : &:r2438_6, ~m?
|
||||
# 2438| v2438_9(void) = ReturnVoid :
|
||||
# 2438| v2438_10(void) = AliasedUse : ~m?
|
||||
# 2438| v2438_11(void) = ExitFunction :
|
||||
|
||||
# 2442| void param_with_destructor_by_ref(ClassWithDestructor&)
|
||||
# 2442| Block 0
|
||||
# 2442| v2442_1(void) = EnterFunction :
|
||||
# 2442| mu2442_2(unknown) = AliasedDefinition :
|
||||
# 2442| mu2442_3(unknown) = InitializeNonLocal :
|
||||
# 2442| r2442_4(glval<ClassWithDestructor &>) = VariableAddress[c] :
|
||||
# 2442| mu2442_5(ClassWithDestructor &) = InitializeParameter[c] : &:r2442_4
|
||||
# 2442| r2442_6(ClassWithDestructor &) = Load[c] : &:r2442_4, ~m?
|
||||
# 2442| mu2442_7(unknown) = InitializeIndirection[c] : &:r2442_6
|
||||
# 2444| v2444_1(void) = NoOp :
|
||||
# 2442| v2442_8(void) = ReturnIndirection[c] : &:r2442_6, ~m?
|
||||
# 2442| v2442_9(void) = ReturnVoid :
|
||||
# 2442| v2442_10(void) = AliasedUse : ~m?
|
||||
# 2442| v2442_11(void) = ExitFunction :
|
||||
|
||||
# 2446| void param_with_destructor_by_rref(ClassWithDestructor&&)
|
||||
# 2446| Block 0
|
||||
# 2446| v2446_1(void) = EnterFunction :
|
||||
# 2446| mu2446_2(unknown) = AliasedDefinition :
|
||||
# 2446| mu2446_3(unknown) = InitializeNonLocal :
|
||||
# 2446| r2446_4(glval<ClassWithDestructor &&>) = VariableAddress[c] :
|
||||
# 2446| mu2446_5(ClassWithDestructor &&) = InitializeParameter[c] : &:r2446_4
|
||||
# 2446| r2446_6(ClassWithDestructor &&) = Load[c] : &:r2446_4, ~m?
|
||||
# 2446| mu2446_7(unknown) = InitializeIndirection[c] : &:r2446_6
|
||||
# 2448| v2448_1(void) = NoOp :
|
||||
# 2446| v2446_8(void) = ReturnIndirection[c] : &:r2446_6, ~m?
|
||||
# 2446| v2446_9(void) = ReturnVoid :
|
||||
# 2446| v2446_10(void) = AliasedUse : ~m?
|
||||
# 2446| v2446_11(void) = ExitFunction :
|
||||
|
||||
perf-regression.cpp:
|
||||
# 6| void Big::Big()
|
||||
# 6| Block 0
|
||||
|
||||
Reference in New Issue
Block a user