Skip to content

Commit 64c79bf

Browse files
committed
C++: Deprecate UninitializedNode in IR data flow
It's not used outside of tests, and it's not useful. It will break the tests when we start allowing flow through chi nodes.
1 parent 7e84453 commit 64c79bf

File tree

3 files changed

+15
-9
lines changed

3 files changed

+15
-9
lines changed

cpp/ql/src/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,12 @@ class Node extends TIRDataFlowNode {
5959
Parameter asParameter() { result = instr.(InitializeParameterInstruction).getParameter() }
6060

6161
/**
62+
* DEPRECATED: See UninitializedNode.
63+
*
6264
* Gets the uninitialized local variable corresponding to this node, if
6365
* any.
6466
*/
65-
LocalVariable asUninitialized() { result = instr.(UninitializedInstruction).getLocalVariable() }
67+
LocalVariable asUninitialized() { none() }
6668

6769
/**
6870
* Gets an upper bound on the type of this node.
@@ -140,15 +142,19 @@ private class ThisParameterNode extends Node {
140142
}
141143

142144
/**
145+
* DEPRECATED: Data flow was never an accurate way to determine what
146+
* expressions might be uninitialized. It errs on the side of saying that
147+
* everything is uninitialized, and this is even worse in the IR because the IR
148+
* doesn't use syntactic hints to rule out variables that are definitely
149+
* initialized.
150+
*
143151
* The value of an uninitialized local variable, viewed as a node in a data
144152
* flow graph.
145153
*/
146-
class UninitializedNode extends Node {
147-
override UninitializedInstruction instr;
148-
149-
LocalVariable getLocalVariable() { result = instr.getLocalVariable() }
154+
deprecated class UninitializedNode extends Node {
155+
UninitializedNode() { none() }
150156

151-
override string toString() { result = this.getLocalVariable().toString() }
157+
LocalVariable getLocalVariable() { none() }
152158
}
153159

154160
/**

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
| ref.cpp:109:15:109:20 | ref.cpp:132:13:132:15 | AST only |
3030
| ref.cpp:122:23:122:28 | ref.cpp:123:13:123:15 | AST only |
3131
| ref.cpp:125:19:125:24 | ref.cpp:126:13:126:15 | AST only |
32+
| test.cpp:75:7:75:8 | test.cpp:76:8:76:9 | AST only |
33+
| test.cpp:83:7:83:8 | test.cpp:84:8:84:18 | AST only |
34+
| test.cpp:83:7:83:8 | test.cpp:86:8:86:9 | AST only |
3235
| test.cpp:89:28:89:34 | test.cpp:92:8:92:14 | IR only |
3336
| test.cpp:100:13:100:18 | test.cpp:103:10:103:12 | AST only |
3437
| test.cpp:109:9:109:14 | test.cpp:110:10:110:12 | IR only |

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@
3131
| test.cpp:31:8:31:8 | c | test.cpp:36:13:36:18 | call to source |
3232
| test.cpp:58:10:58:10 | t | test.cpp:50:14:50:19 | call to source |
3333
| test.cpp:71:8:71:9 | x4 | test.cpp:66:30:66:36 | source1 |
34-
| test.cpp:76:8:76:9 | u1 | test.cpp:75:7:75:8 | u1 |
35-
| test.cpp:84:8:84:18 | ... ? ... : ... | test.cpp:83:7:83:8 | u2 |
36-
| test.cpp:86:8:86:9 | i1 | test.cpp:83:7:83:8 | u2 |
3734
| test.cpp:90:8:90:14 | source1 | test.cpp:89:28:89:34 | source1 |
3835
| test.cpp:92:8:92:14 | source1 | test.cpp:89:28:89:34 | source1 |
3936
| test.cpp:110:10:110:12 | (reference dereference) | test.cpp:109:9:109:14 | call to source |

0 commit comments

Comments
 (0)