Skip to content

Commit cf6a3c2

Browse files
committed
C#: Only include top level tuples pattern match flow in the localExprStep relation.
1 parent b25c536 commit cf6a3c2

3 files changed

Lines changed: 11 additions & 8 deletions

File tree

‎csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll‎

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -560,10 +560,16 @@ module LocalFlow {
560560
or
561561
exists(AssignExpr ae | ae.getLeftOperand().(TupleExpr) = e2 and ae.getRightOperand() = e1)
562562
or
563-
exists(ControlFlowElement cfe | cfe = e2.(TuplePatternExpr).getPatternMatch() |
564-
cfe.(IsExpr).getExpr() = e1
565-
or
566-
exists(Switch sw | sw.getACase() = cfe and sw.getExpr() = e1)
563+
exists(IsExpr e |
564+
e1 = e.getExpr() and
565+
e2 = e.getPattern() and
566+
e2 instanceof TuplePatternExpr
567+
)
568+
or
569+
exists(Switch sw |
570+
e1 = sw.getExpr() and
571+
e2 = sw.getACase().getPattern() and
572+
e2 instanceof TuplePatternExpr
567573
)
568574
}
569575

‎csharp/ql/test/library-tests/dataflow/tuples/DataFlowStep.expected‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@
108108
| Tuples.cs:59:17:59:32 | (..., ...) | Tuples.cs:59:13:59:13 | access to local variable x |
109109
| Tuples.cs:60:17:60:17 | access to local variable x | Tuples.cs:62:18:62:57 | (String,(Int32,String),Int32) t |
110110
| Tuples.cs:60:17:60:17 | access to local variable x | Tuples.cs:67:18:67:35 | (..., ...) |
111-
| Tuples.cs:60:17:60:17 | access to local variable x | Tuples.cs:67:18:67:35 | (..., ...) |
112111
| Tuples.cs:60:17:60:17 | access to local variable x | Tuples.cs:87:13:87:13 | access to local variable x |
113112
| Tuples.cs:62:18:62:57 | (String,(Int32,String),Int32) t | Tuples.cs:62:18:62:57 | SSA def(t) |
114113
| Tuples.cs:62:18:62:57 | SSA def(t) | Tuples.cs:62:64:62:64 | access to local variable t |
@@ -144,7 +143,6 @@
144143
| Tuples.cs:75:13:75:30 | SSA qualifier def(y.Item2.Item2) | Tuples.cs:80:22:80:34 | access to field Item2 |
145144
| Tuples.cs:75:17:75:30 | (..., ...) | Tuples.cs:75:13:75:13 | access to local variable y |
146145
| Tuples.cs:75:18:75:18 | access to parameter s | Tuples.cs:75:25:75:25 | access to parameter s |
147-
| Tuples.cs:76:17:76:17 | access to local variable y | Tuples.cs:78:26:78:35 | (..., ...) |
148146
| Tuples.cs:76:17:76:17 | access to local variable y | Tuples.cs:79:22:79:22 | access to local variable y |
149147
| Tuples.cs:78:19:78:23 | SSA def(a) | Tuples.cs:78:46:78:46 | access to local variable a |
150148
| Tuples.cs:78:19:78:23 | String a | Tuples.cs:78:19:78:23 | SSA def(a) |
@@ -161,7 +159,6 @@
161159
| Tuples.cs:82:22:82:34 | access to field Item1 | Tuples.cs:82:22:82:34 | (...) ... |
162160
| Tuples.cs:83:22:83:22 | access to local variable b | Tuples.cs:83:22:83:22 | (...) ... |
163161
| Tuples.cs:87:13:87:13 | access to local variable x | Tuples.cs:87:18:87:35 | (..., ...) |
164-
| Tuples.cs:87:13:87:13 | access to local variable x | Tuples.cs:87:18:87:35 | (..., ...) |
165162
| Tuples.cs:87:23:87:23 | SSA def(p) | Tuples.cs:89:18:89:18 | access to local variable p |
166163
| Tuples.cs:87:23:87:23 | String p | Tuples.cs:87:23:87:23 | SSA def(p) |
167164
| Tuples.cs:87:27:87:27 | Int32 q | Tuples.cs:87:27:87:27 | SSA def(q) |

‎csharp/ql/test/library-tests/dataflow/tuples/Tuples.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,4 +142,4 @@ public static void Sink(object o) { }
142142
namespace System.Runtime.CompilerServices
143143
{
144144
public class IsExternalInit { }
145-
}
145+
}

0 commit comments

Comments
 (0)