Skip to content

Commit f662cce

Browse files
committed
C++: Use value numbering to better detect whether a write is certain.
1 parent fec9626 commit f662cce

File tree

3 files changed

+4
-3
lines changed

3 files changed

+4
-3
lines changed

cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternalsCommon.qll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ private import DataFlowImplCommon as DataFlowImplCommon
66
private import DataFlowUtil
77
private import semmle.code.cpp.models.interfaces.PointerWrapper
88
private import DataFlowPrivate
9+
private import semmle.code.cpp.ir.ValueNumbering
910

1011
/**
1112
* Holds if `operand` is an operand that is not used by the dataflow library.
@@ -864,7 +865,7 @@ private module Cached {
864865
* to a specific address.
865866
*/
866867
private predicate isCertainAddress(Operand operand) {
867-
operand.getDef() instanceof VariableAddressInstruction
868+
valueNumberOfOperand(operand).getAnInstruction() instanceof VariableAddressInstruction
868869
or
869870
operand.getType() instanceof Cpp::ReferenceType
870871
}

cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -732,7 +732,7 @@ void test_does_not_write_source_to_dereference()
732732
{
733733
int x;
734734
does_not_write_source_to_dereference(&x);
735-
sink(x); // $ ast,ir=733:7 SPURIOUS: ast,ir=726:11
735+
sink(x); // $ ast=733:7 ir SPURIOUS: ast=726:11
736736
}
737737

738738
void sometimes_calls_sink_eq(int x, int n) {

cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ void pointer_test() {
134134
sink(*p3); // $ ast,ir
135135

136136
*p3 = 0;
137-
sink(*p3); // $ SPURIOUS: ast,ir
137+
sink(*p3); // $ SPURIOUS: ast
138138
}
139139

140140
// --- return values ---

0 commit comments

Comments
 (0)