Skip to content

Commit fffe3c2

Browse files
author
Robert Marsh
committed
C++: add sanity test for side effect primaries
1 parent dfed750 commit fffe3c2

File tree

11 files changed

+1609
-0
lines changed

11 files changed

+1609
-0
lines changed

cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,13 @@ module InstructionSanity {
120120
)
121121
}
122122

123+
query predicate sideEffectWithoutPrimary(SideEffectInstruction instr, string message, IRFunction func, string funcText) {
124+
not exists(instr.getPrimaryInstruction()) and
125+
message = "Side effect instruction missing primary instruction in function $@" and
126+
func = instr.getEnclosingIRFunction() and
127+
funcText = Language::getIdentityString(func.getFunction())
128+
}
129+
123130
/**
124131
* Holds if an instruction, other than `ExitFunction`, has no successors.
125132
*/

cpp/ql/src/semmle/code/cpp/ir/implementation/raw/Instruction.qll

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,13 @@ module InstructionSanity {
120120
)
121121
}
122122

123+
query predicate sideEffectWithoutPrimary(SideEffectInstruction instr, string message, IRFunction func, string funcText) {
124+
not exists(instr.getPrimaryInstruction()) and
125+
message = "Side effect instruction missing primary instruction in function $@" and
126+
func = instr.getEnclosingIRFunction() and
127+
funcText = Language::getIdentityString(func.getFunction())
128+
}
129+
123130
/**
124131
* Holds if an instruction, other than `ExitFunction`, has no successors.
125132
*/

cpp/ql/src/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,13 @@ module InstructionSanity {
120120
)
121121
}
122122

123+
query predicate sideEffectWithoutPrimary(SideEffectInstruction instr, string message, IRFunction func, string funcText) {
124+
not exists(instr.getPrimaryInstruction()) and
125+
message = "Side effect instruction missing primary instruction in function $@" and
126+
func = instr.getEnclosingIRFunction() and
127+
funcText = Language::getIdentityString(func.getFunction())
128+
}
129+
123130
/**
124131
* Holds if an instruction, other than `ExitFunction`, has no successors.
125132
*/

cpp/ql/test/library-tests/ir/ir/aliased_ssa_sanity.expected

Lines changed: 153 additions & 0 deletions
Large diffs are not rendered by default.

cpp/ql/test/library-tests/ir/ir/raw_sanity.expected

Lines changed: 157 additions & 0 deletions
Large diffs are not rendered by default.

cpp/ql/test/library-tests/ir/ir/unaliased_ssa_sanity.expected

Lines changed: 157 additions & 0 deletions
Large diffs are not rendered by default.

cpp/ql/test/library-tests/ir/ssa/aliased_ssa_sanity.expected

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@ unexpectedOperand
33
duplicateOperand
44
missingPhiOperand
55
missingOperandType
6+
sideEffectWithoutPrimary
7+
| ssa.cpp:97:10:97:11 | BufferMayWriteSideEffect: (void *)... | Side effect instruction missing primary instruction in function $@ | ssa.cpp:95:6:95:30 | IR: MustExactlyOverlapEscaped | void MustExactlyOverlapEscaped(Point) |
8+
| ssa.cpp:97:10:97:11 | IndirectReadSideEffect: (void *)... | Side effect instruction missing primary instruction in function $@ | ssa.cpp:95:6:95:30 | IR: MustExactlyOverlapEscaped | void MustExactlyOverlapEscaped(Point) |
9+
| ssa.cpp:108:10:108:11 | BufferMayWriteSideEffect: (void *)... | Side effect instruction missing primary instruction in function $@ | ssa.cpp:105:6:105:30 | IR: MustTotallyOverlapEscaped | void MustTotallyOverlapEscaped(Point) |
10+
| ssa.cpp:108:10:108:11 | IndirectReadSideEffect: (void *)... | Side effect instruction missing primary instruction in function $@ | ssa.cpp:105:6:105:30 | IR: MustTotallyOverlapEscaped | void MustTotallyOverlapEscaped(Point) |
11+
| ssa.cpp:119:10:119:11 | BufferMayWriteSideEffect: (void *)... | Side effect instruction missing primary instruction in function $@ | ssa.cpp:116:6:116:31 | IR: MayPartiallyOverlapEscaped | void MayPartiallyOverlapEscaped(int, int) |
12+
| ssa.cpp:119:10:119:11 | IndirectReadSideEffect: (void *)... | Side effect instruction missing primary instruction in function $@ | ssa.cpp:116:6:116:31 | IR: MayPartiallyOverlapEscaped | void MayPartiallyOverlapEscaped(int, int) |
13+
| ssa.cpp:209:10:209:11 | SizedBufferMustWriteSideEffect: (void *)... | Side effect instruction missing primary instruction in function $@ | ssa.cpp:207:5:207:21 | IR: ModeledCallTarget | int ModeledCallTarget(int) |
14+
| ssa.cpp:209:14:209:15 | SizedBufferReadSideEffect: (void *)... | Side effect instruction missing primary instruction in function $@ | ssa.cpp:207:5:207:21 | IR: ModeledCallTarget | int ModeledCallTarget(int) |
615
instructionWithoutSuccessor
716
ambiguousSuccessors
817
unexplainedLoop

cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_sanity.expected

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@ unexpectedOperand
33
duplicateOperand
44
missingPhiOperand
55
missingOperandType
6+
sideEffectWithoutPrimary
7+
| ssa.cpp:97:10:97:11 | BufferMayWriteSideEffect: (void *)... | Side effect instruction missing primary instruction in function $@ | ssa.cpp:95:6:95:30 | IR: MustExactlyOverlapEscaped | void MustExactlyOverlapEscaped(Point) |
8+
| ssa.cpp:97:10:97:11 | IndirectReadSideEffect: (void *)... | Side effect instruction missing primary instruction in function $@ | ssa.cpp:95:6:95:30 | IR: MustExactlyOverlapEscaped | void MustExactlyOverlapEscaped(Point) |
9+
| ssa.cpp:108:10:108:11 | BufferMayWriteSideEffect: (void *)... | Side effect instruction missing primary instruction in function $@ | ssa.cpp:105:6:105:30 | IR: MustTotallyOverlapEscaped | void MustTotallyOverlapEscaped(Point) |
10+
| ssa.cpp:108:10:108:11 | IndirectReadSideEffect: (void *)... | Side effect instruction missing primary instruction in function $@ | ssa.cpp:105:6:105:30 | IR: MustTotallyOverlapEscaped | void MustTotallyOverlapEscaped(Point) |
11+
| ssa.cpp:119:10:119:11 | BufferMayWriteSideEffect: (void *)... | Side effect instruction missing primary instruction in function $@ | ssa.cpp:116:6:116:31 | IR: MayPartiallyOverlapEscaped | void MayPartiallyOverlapEscaped(int, int) |
12+
| ssa.cpp:119:10:119:11 | IndirectReadSideEffect: (void *)... | Side effect instruction missing primary instruction in function $@ | ssa.cpp:116:6:116:31 | IR: MayPartiallyOverlapEscaped | void MayPartiallyOverlapEscaped(int, int) |
13+
| ssa.cpp:209:10:209:11 | SizedBufferMustWriteSideEffect: (void *)... | Side effect instruction missing primary instruction in function $@ | ssa.cpp:207:5:207:21 | IR: ModeledCallTarget | int ModeledCallTarget(int) |
14+
| ssa.cpp:209:14:209:15 | SizedBufferReadSideEffect: (void *)... | Side effect instruction missing primary instruction in function $@ | ssa.cpp:207:5:207:21 | IR: ModeledCallTarget | int ModeledCallTarget(int) |
615
instructionWithoutSuccessor
716
ambiguousSuccessors
817
unexplainedLoop

0 commit comments

Comments
 (0)