Skip to content

Commit 0cf4b3f

Browse files
committed
C#: Added dataflow testcases for tuple mixed initialization and assignment.
1 parent bcf732a commit 0cf4b3f

File tree

4 files changed

+222
-13
lines changed

4 files changed

+222
-13
lines changed

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,3 +152,21 @@
152152
| Tuples.cs:109:23:109:23 | SSA def(x) | Tuples.cs:110:22:110:22 | access to local variable x |
153153
| Tuples.cs:109:26:109:26 | SSA def(y) | Tuples.cs:111:22:111:22 | access to local variable y |
154154
| Tuples.cs:111:22:111:22 | access to local variable y | Tuples.cs:111:22:111:22 | (...) ... |
155+
| Tuples.cs:118:13:118:33 | SSA def(o) | Tuples.cs:121:28:121:28 | access to local variable o |
156+
| Tuples.cs:118:17:118:33 | call to method Source<Object> | Tuples.cs:118:13:118:33 | SSA def(o) |
157+
| Tuples.cs:118:32:118:32 | 9 | Tuples.cs:118:32:118:32 | (...) ... |
158+
| Tuples.cs:121:9:121:32 | SSA def(x1) | Tuples.cs:122:14:122:15 | access to local variable x1 |
159+
| Tuples.cs:121:27:121:32 | (..., ...) | Tuples.cs:121:9:121:23 | (..., ...) |
160+
| Tuples.cs:121:28:121:28 | access to local variable o | Tuples.cs:121:9:121:32 | SSA def(x1) |
161+
| Tuples.cs:121:28:121:28 | access to local variable o | Tuples.cs:125:25:125:25 | access to local variable o |
162+
| Tuples.cs:125:9:125:29 | SSA def(x2) | Tuples.cs:126:14:126:15 | access to local variable x2 |
163+
| Tuples.cs:125:24:125:29 | (..., ...) | Tuples.cs:125:9:125:20 | (..., ...) |
164+
| Tuples.cs:125:25:125:25 | access to local variable o | Tuples.cs:125:9:125:29 | SSA def(x2) |
165+
| Tuples.cs:125:25:125:25 | access to local variable o | Tuples.cs:129:31:129:31 | access to local variable o |
166+
| Tuples.cs:129:9:129:32 | SSA def(y3) | Tuples.cs:130:14:130:15 | access to local variable y3 |
167+
| Tuples.cs:129:27:129:32 | (..., ...) | Tuples.cs:129:9:129:23 | (..., ...) |
168+
| Tuples.cs:129:31:129:31 | access to local variable o | Tuples.cs:129:9:129:32 | SSA def(y3) |
169+
| Tuples.cs:129:31:129:31 | access to local variable o | Tuples.cs:133:28:133:28 | access to local variable o |
170+
| Tuples.cs:133:9:133:29 | SSA def(y4) | Tuples.cs:134:14:134:15 | access to local variable y4 |
171+
| Tuples.cs:133:24:133:29 | (..., ...) | Tuples.cs:133:9:133:20 | (..., ...) |
172+
| Tuples.cs:133:28:133:28 | access to local variable o | Tuples.cs:133:9:133:29 | SSA def(y4) |

csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected

Lines changed: 89 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -428,20 +428,96 @@ Tuples.cs:
428428
# 111| 0: [CastExpr] (...) ...
429429
# 111| 1: [LocalVariableAccess] access to local variable y
430430
# 112| 3: [BreakStmt] break;
431-
# 116| 11: [Method] Sink
431+
# 116| 11: [Method] M6
432432
# 116| -1: [TypeMention] Void
433+
# 117| 4: [BlockStmt] {...}
434+
# 118| 0: [LocalVariableDeclStmt] ... ...;
435+
# 118| 0: [LocalVariableDeclAndInitExpr] Object o = ...
436+
# 118| -1: [TypeMention] object
437+
# 118| 0: [LocalVariableAccess] access to local variable o
438+
# 118| 1: [MethodCall] call to method Source<Object>
439+
# 118| 0: [CastExpr] (...) ...
440+
# 118| 1: [IntLiteral] 9
441+
# 120| 1: [LocalVariableDeclStmt] ... ...;
442+
# 120| 0: [LocalVariableDeclAndInitExpr] Int32 y1 = ...
443+
# 120| -1: [TypeMention] int
444+
# 120| 0: [LocalVariableAccess] access to local variable y1
445+
# 120| 1: [IntLiteral] 0
446+
# 121| 2: [ExprStmt] ...;
447+
# 121| 0: [AssignExpr] ... = ...
448+
# 121| 0: [TupleExpr] (..., ...)
449+
# 121| 0: [LocalVariableDeclExpr] Object x1
450+
# 121| 1: [LocalVariableAccess] access to local variable y1
451+
# 121| 1: [TupleExpr] (..., ...)
452+
# 121| 0: [LocalVariableAccess] access to local variable o
453+
# 121| 1: [IntLiteral] 1
454+
# 122| 3: [ExprStmt] ...;
455+
# 122| 0: [MethodCall] call to method Sink
456+
# 122| 0: [LocalVariableAccess] access to local variable x1
457+
# 124| 4: [LocalVariableDeclStmt] ... ...;
458+
# 124| 0: [LocalVariableDeclAndInitExpr] Object x2 = ...
459+
# 124| -1: [TypeMention] object
460+
# 124| 0: [LocalVariableAccess] access to local variable x2
461+
# 124| 1: [ObjectCreation] object creation of type Object
462+
# 124| 0: [TypeMention] object
463+
# 125| 5: [ExprStmt] ...;
464+
# 125| 0: [AssignExpr] ... = ...
465+
# 125| 0: [TupleExpr] (..., ...)
466+
# 125| 0: [LocalVariableAccess] access to local variable x2
467+
# 125| 1: [LocalVariableDeclExpr] Int32 y2
468+
# 125| 1: [TupleExpr] (..., ...)
469+
# 125| 0: [LocalVariableAccess] access to local variable o
470+
# 125| 1: [IntLiteral] 1
471+
# 126| 6: [ExprStmt] ...;
472+
# 126| 0: [MethodCall] call to method Sink
473+
# 126| 0: [LocalVariableAccess] access to local variable x2
474+
# 128| 7: [LocalVariableDeclStmt] ... ...;
475+
# 128| 0: [LocalVariableDeclAndInitExpr] Int32 x3 = ...
476+
# 128| -1: [TypeMention] int
477+
# 128| 0: [LocalVariableAccess] access to local variable x3
478+
# 128| 1: [IntLiteral] 0
479+
# 129| 8: [ExprStmt] ...;
480+
# 129| 0: [AssignExpr] ... = ...
481+
# 129| 0: [TupleExpr] (..., ...)
482+
# 129| 0: [LocalVariableAccess] access to local variable x3
483+
# 129| 1: [LocalVariableDeclExpr] Object y3
484+
# 129| 1: [TupleExpr] (..., ...)
485+
# 129| 0: [IntLiteral] 1
486+
# 129| 1: [LocalVariableAccess] access to local variable o
487+
# 130| 9: [ExprStmt] ...;
488+
# 130| 0: [MethodCall] call to method Sink
489+
# 130| 0: [LocalVariableAccess] access to local variable y3
490+
# 132| 10: [LocalVariableDeclStmt] ... ...;
491+
# 132| 0: [LocalVariableDeclAndInitExpr] Object y4 = ...
492+
# 132| -1: [TypeMention] object
493+
# 132| 0: [LocalVariableAccess] access to local variable y4
494+
# 132| 1: [ObjectCreation] object creation of type Object
495+
# 132| 0: [TypeMention] object
496+
# 133| 11: [ExprStmt] ...;
497+
# 133| 0: [AssignExpr] ... = ...
498+
# 133| 0: [TupleExpr] (..., ...)
499+
# 133| 0: [LocalVariableDeclExpr] Int32 x4
500+
# 133| 1: [LocalVariableAccess] access to local variable y4
501+
# 133| 1: [TupleExpr] (..., ...)
502+
# 133| 0: [IntLiteral] 1
503+
# 133| 1: [LocalVariableAccess] access to local variable o
504+
# 134| 12: [ExprStmt] ...;
505+
# 134| 0: [MethodCall] call to method Sink
506+
# 134| 0: [LocalVariableAccess] access to local variable y4
507+
# 137| 12: [Method] Sink
508+
# 137| -1: [TypeMention] Void
433509
#-----| 2: (Parameters)
434-
# 116| 0: [Parameter] o
435-
# 116| -1: [TypeMention] object
436-
# 116| 4: [BlockStmt] {...}
437-
# 118| 12: [Method] Source<>
438-
# 118| -1: [TypeMention] T
510+
# 137| 0: [Parameter] o
511+
# 137| -1: [TypeMention] object
512+
# 137| 4: [BlockStmt] {...}
513+
# 139| 13: [Method] Source<>
514+
# 139| -1: [TypeMention] T
439515
#-----| 1: (Type parameters)
440-
# 118| 0: [TypeParameter] T
516+
# 139| 0: [TypeParameter] T
441517
#-----| 2: (Parameters)
442-
# 118| 0: [Parameter] source
443-
# 118| -1: [TypeMention] object
444-
# 118| 4: [ThrowExpr] throw ...
445-
# 118| 0: [NullLiteral] null
446-
# 121| [NamespaceDeclaration] namespace ... { ... }
447-
# 123| 1: [Class] IsExternalInit
518+
# 139| 0: [Parameter] source
519+
# 139| -1: [TypeMention] object
520+
# 139| 4: [ThrowExpr] throw ...
521+
# 139| 0: [NullLiteral] null
522+
# 142| [NamespaceDeclaration] namespace ... { ... }
523+
# 144| 1: [Class] IsExternalInit

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,27 @@ static void M5()
113113
}
114114
}
115115

116+
static void M6()
117+
{
118+
var o = Source<object>(9);
119+
120+
int y1 = 0;
121+
(object x1, y1) = (o, 1);
122+
Sink(x1); // $ hasValueFlow=9
123+
124+
var x2 = new object();
125+
(x2, int y2) = (o, 1);
126+
Sink(x2); // $ hasValueFlow=9
127+
128+
var x3 = 0;
129+
(x3, object y3) = (1, o);
130+
Sink(y3); // $ hasValueFlow=9
131+
132+
var y4 = new object();
133+
(int x4, y4) = (1, o);
134+
Sink(y4); // $ hasValueFlow=9
135+
}
136+
116137
public static void Sink(object o) { }
117138

118139
static T Source<T>(object source) => throw null;

0 commit comments

Comments
 (0)