Skip to content

Commit 9762ce7

Browse files
authored
Merge pull request #6799 from hvitved/csharp/dead-store-using-discard
C#: Filter using `var _ = ... results` from `DeadStoreOfLocal.ql`
2 parents 041aff6 + a315640 commit 9762ce7

File tree

4 files changed

+18
-1
lines changed

4 files changed

+18
-1
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
lgtm,codescanning
2+
* `using` declarations are no longer flagged by the query "Useless assignment to local variable".

csharp/ql/src/Dead Code/DeadStoreOfLocal.ql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ predicate mayEscape(LocalVariable v) {
7272

7373
class RelevantDefinition extends AssignableDefinition {
7474
RelevantDefinition() {
75-
this instanceof AssignableDefinitions::AssignmentDefinition
75+
this.(AssignableDefinitions::AssignmentDefinition).getAssignment() =
76+
any(Assignment a | not a = any(UsingDeclStmt uds).getAVariableDeclExpr())
7677
or
7778
this instanceof AssignableDefinitions::MutationDefinition
7879
or

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,3 +461,16 @@ public static int Count<T>(this IEnumerable<T> items)
461461
return count;
462462
}
463463
}
464+
465+
public static class Using
466+
{
467+
public static void M()
468+
{
469+
using var x = new System.IO.FileStream("", System.IO.FileMode.Open); // GOOD
470+
using var _ = new System.IO.FileStream("", System.IO.FileMode.Open); // GOOD
471+
472+
using (var y = new System.IO.FileStream("", System.IO.FileMode.Open)) // BAD
473+
{
474+
}
475+
}
476+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
| 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 |
1515
| 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 |
1616
| 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 |
17+
| DeadStoreOfLocal.cs:472:20:472:76 | FileStream y = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:472:20:472:20 | y | y |
1718
| 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 |
1819
| 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 |
1920
| 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)