mirror of
https://github.com/github/codeql.git
synced 2025-12-18 01:33:15 +01:00
C++: Fix IR edge case where there are no function calls taking an argument
This commit is contained in:
@@ -67,8 +67,13 @@ class Class = Cpp::Class; // Used for inheritance conversions
|
|||||||
predicate hasCaseEdge(string minValue, string maxValue) { hasCaseEdge(_, minValue, maxValue) }
|
predicate hasCaseEdge(string minValue, string maxValue) { hasCaseEdge(_, minValue, maxValue) }
|
||||||
|
|
||||||
predicate hasPositionalArgIndex(int argIndex) {
|
predicate hasPositionalArgIndex(int argIndex) {
|
||||||
exists(Cpp::FunctionCall call | exists(call.getArgument(argIndex))) or
|
exists(Cpp::FunctionCall call | exists(call.getArgument(argIndex)))
|
||||||
|
or
|
||||||
exists(Cpp::BuiltInOperation op | exists(op.getChild(argIndex)))
|
exists(Cpp::BuiltInOperation op | exists(op.getChild(argIndex)))
|
||||||
|
or
|
||||||
|
// Ensure we are always able to output the argument of a call to the delete operator.
|
||||||
|
exists(Cpp::DeleteExpr d) and
|
||||||
|
argIndex = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate hasAsmOperandIndex(int operandIndex) {
|
predicate hasAsmOperandIndex(int operandIndex) {
|
||||||
|
|||||||
@@ -9,17 +9,18 @@ test.cpp:
|
|||||||
# 5| m5_6(int *) = InitializeParameter[x] : &:r5_5
|
# 5| m5_6(int *) = InitializeParameter[x] : &:r5_5
|
||||||
# 5| r5_7(int *) = Load[x] : &:r5_5, m5_6
|
# 5| r5_7(int *) = Load[x] : &:r5_5, m5_6
|
||||||
# 5| m5_8(unknown) = InitializeIndirection[x] : &:r5_7
|
# 5| m5_8(unknown) = InitializeIndirection[x] : &:r5_7
|
||||||
|
# 5| m5_9(unknown) = Chi : total:m5_4, partial:m5_8
|
||||||
# 6| r6_1(glval<unknown>) = FunctionAddress[operator delete] :
|
# 6| r6_1(glval<unknown>) = FunctionAddress[operator delete] :
|
||||||
# 6| r6_2(glval<int *>) = VariableAddress[x] :
|
# 6| r6_2(glval<int *>) = VariableAddress[x] :
|
||||||
# 6| r6_3(int *) = Load[x] : &:r6_2, m5_6
|
# 6| r6_3(int *) = Load[x] : &:r6_2, m5_6
|
||||||
# 6| v6_4(void) = Call[operator delete] : func:r6_1
|
# 6| v6_4(void) = Call[operator delete] : func:r6_1, 0:r6_3
|
||||||
# 6| m6_5(unknown) = ^CallSideEffect : ~m5_4
|
# 6| m6_5(unknown) = ^CallSideEffect : ~m5_9
|
||||||
# 6| m6_6(unknown) = Chi : total:m5_4, partial:m6_5
|
# 6| m6_6(unknown) = Chi : total:m5_9, partial:m6_5
|
||||||
# 7| v7_1(void) = NoOp :
|
# 7| v7_1(void) = NoOp :
|
||||||
# 5| v5_9(void) = ReturnIndirection[x] : &:r5_7, m5_8
|
# 5| v5_10(void) = ReturnIndirection[x] : &:r5_7, ~m6_6
|
||||||
# 5| v5_10(void) = ReturnVoid :
|
# 5| v5_11(void) = ReturnVoid :
|
||||||
# 5| v5_11(void) = AliasedUse : ~m6_6
|
# 5| v5_12(void) = AliasedUse : ~m6_6
|
||||||
# 5| v5_12(void) = ExitFunction :
|
# 5| v5_13(void) = ExitFunction :
|
||||||
|
|
||||||
# 11| void jazz()
|
# 11| void jazz()
|
||||||
# 11| Block 0
|
# 11| Block 0
|
||||||
|
|||||||
Reference in New Issue
Block a user