Skip to content

Commit 5b2d5ee

Browse files
authored
Merge pull request github#4940 from hvitved/csharp/base-ssa-phi-input
C#: Take phi nodes into account in `Steps::getARead()`
2 parents 1ecee2d + 88b7ad0 commit 5b2d5ee

File tree

3 files changed

+19
-9
lines changed

3 files changed

+19
-9
lines changed

csharp/ql/src/semmle/code/csharp/dataflow/internal/Steps.qll

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,17 @@ import csharp
66
* Provides functionality for performing simple data flow analysis.
77
* This library is used by the dispatch library, which in turn is used by the
88
* SSA library, so we cannot make use of the SSA library in this library.
9-
* Instead, this library relies on a self-contained, minimalistic SSA-like
10-
* implementation.
9+
* Instead, this library relies on the `BaseSsa` library.
1110
*/
1211
module Steps {
1312
private import semmle.code.csharp.dataflow.internal.BaseSSA
1413

1514
/**
16-
* Gets a read that is guaranteed to read the value assigned at definition `def`.
15+
* Gets a read that may read the value assigned at definition `def`.
1716
*/
1817
private AssignableRead getARead(AssignableDefinition def) {
1918
exists(BaseSsa::Definition ssaDef |
20-
ssaDef.getDefinition() = def and
19+
ssaDef.getAnUltimateDefinition().getDefinition() = def and
2120
result = ssaDef.getARead()
2221
)
2322
or

csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,17 @@ void M9()
275275
{
276276
A();
277277
}
278+
279+
void M10(bool b)
280+
{
281+
var x = ""; // GOOD
282+
Action action;
283+
if (b)
284+
action = () => System.Console.WriteLine(x);
285+
else
286+
action = () => { };
287+
action();
288+
}
278289
}
279290

280291
class Patterns

csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
| DeadStoreOfLocal.cs:142:26:142:27 | Exception ex | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:142:26:142:27 | ex | ex |
1010
| DeadStoreOfLocal.cs:246:17:246:24 | Int32 y = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:246:17:246:17 | y | y |
1111
| DeadStoreOfLocal.cs:261:17:261:21 | Int32 x = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:261:17:261:17 | x | x |
12-
| DeadStoreOfLocal.cs:289:23:289:28 | Object v1 | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:289:27:289:28 | v1 | v1 |
13-
| DeadStoreOfLocal.cs:303:18:303:23 | Object v2 | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:303:22:303:23 | v2 | v2 |
14-
| DeadStoreOfLocal.cs:320:9:320:32 | ... = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:316:23:316:23 | b | b |
15-
| DeadStoreOfLocal.cs:361:13:361:20 | String s = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:361:13:361:13 | s | s |
16-
| DeadStoreOfLocal.cs:387:13:387:21 | ... = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:385:13:385:13 | s | s |
12+
| DeadStoreOfLocal.cs:300:23:300:28 | Object v1 | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:300:27:300:28 | v1 | v1 |
13+
| DeadStoreOfLocal.cs:314:18:314:23 | Object v2 | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:314:22:314:23 | v2 | v2 |
14+
| DeadStoreOfLocal.cs:331:9:331:32 | ... = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:327:23:327:23 | b | b |
15+
| DeadStoreOfLocal.cs:372:13:372:20 | String s = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:372:13:372:13 | s | s |
16+
| DeadStoreOfLocal.cs:398:13:398:21 | ... = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:396:13:396:13 | s | s |
1717
| DeadStoreOfLocalBad.cs:7:13:7:48 | Boolean success = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocalBad.cs:7:13:7:19 | success | success |
1818
| DeadStoreOfLocalBad.cs:23:32:23:32 | FormatException e | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocalBad.cs:23:32:23:32 | e | e |
1919
| DeadStoreOfLocalBad.cs:32:22:32:22 | String s | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocalBad.cs:32:22:32:22 | s | s |

0 commit comments

Comments
 (0)