Skip to content

Commit f589033

Browse files
author
AndreiDiaconu1
committed
PR fixes
1 parent 5e0addc commit f589033

File tree

4 files changed

+123
-165
lines changed

4 files changed

+123
-165
lines changed

csharp/ql/src/semmle/code/csharp/ir/implementation/raw/internal/TranslatedStmt.qll

Lines changed: 4 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,23 +1006,22 @@ class TranslatedUsingBlockStmt extends TranslatedStmt {
10061006
override TranslatedElement getChild(int id) {
10071007
result = getDecl(id)
10081008
or
1009-
id = noDecls() and result = this.getBody()
1009+
id = getNumberOfDecls() and result = this.getBody()
10101010
}
10111011

10121012
override Instruction getFirstInstruction() {
1013-
if noDecls() > 0
1013+
if getNumberOfDecls() > 0
10141014
then result = this.getDecl(0).getFirstInstruction()
10151015
else result = this.getBody().getFirstInstruction()
10161016
}
10171017

10181018
override Instruction getChildSuccessor(TranslatedElement child) {
10191019
exists(int id |
10201020
child = this.getDecl(id) and
1021-
id < this.noDecls() - 1 and
10221021
result = this.getDecl(id + 1).getFirstInstruction()
10231022
)
10241023
or
1025-
child = this.getDecl(this.noDecls() - 1) and result = this.getBody().getFirstInstruction()
1024+
child = this.getDecl(this.getNumberOfDecls() - 1) and result = this.getBody().getFirstInstruction()
10261025
or
10271026
child = this.getBody() and result = this.getParent().getChildSuccessor(this)
10281027
}
@@ -1039,41 +1038,7 @@ class TranslatedUsingBlockStmt extends TranslatedStmt {
10391038
result = getTranslatedLocalDeclaration(stmt.getVariableDeclExpr(id))
10401039
}
10411040

1042-
private int noDecls() { result = count(stmt.getAVariableDeclExpr()) }
1041+
private int getNumberOfDecls() { result = count(stmt.getAVariableDeclExpr()) }
10431042

10441043
private TranslatedStmt getBody() { result = getTranslatedStmt(stmt.getBody()) }
10451044
}
1046-
1047-
// TODO: Should be modeled using the desugaring framework for a
1048-
// more exact translation.
1049-
class TranslatedUsingDeclStmt extends TranslatedStmt {
1050-
override UsingDeclStmt stmt;
1051-
1052-
override TranslatedElement getChild(int id) { result = getDecl(id) }
1053-
1054-
override Instruction getFirstInstruction() { result = this.getDecl(0).getFirstInstruction() }
1055-
1056-
override Instruction getChildSuccessor(TranslatedElement child) {
1057-
exists(int id |
1058-
child = this.getDecl(id) and
1059-
id < this.noDecls() - 1 and
1060-
result = this.getDecl(id + 1).getFirstInstruction()
1061-
)
1062-
or
1063-
child = this.getDecl(this.noDecls() - 1) and result = this.getParent().getChildSuccessor(this)
1064-
}
1065-
1066-
override predicate hasInstruction(
1067-
Opcode opcode, InstructionTag tag, Type resultType, boolean isLValue
1068-
) {
1069-
none()
1070-
}
1071-
1072-
override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() }
1073-
1074-
private TranslatedLocalDeclaration getDecl(int id) {
1075-
result = getTranslatedLocalDeclaration(stmt.getVariableDeclExpr(id))
1076-
}
1077-
1078-
private int noDecls() { result = count(stmt.getAVariableDeclExpr()) }
1079-
}

csharp/ql/test/library-tests/ir/ir/raw_ir.expected

Lines changed: 115 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -1252,10 +1252,10 @@ stmts.cs:
12521252
# 53| mu4_2(Int32) = Store : &:r4_1, r4_0
12531253
#-----| Goto -> Block 5
12541254

1255-
# 64| Block 5
1256-
# 64| r5_0(Int32) = Constant[2] :
1257-
# 64| r5_1(glval<Int32>) = VariableAddress[x] :
1258-
# 64| mu5_2(Int32) = Store : &:r5_1, r5_0
1255+
# 65| Block 5
1256+
# 65| r5_0(Int32) = Constant[2] :
1257+
# 65| r5_1(glval<Int32>) = VariableAddress[x] :
1258+
# 65| mu5_2(Int32) = Store : &:r5_1, r5_0
12591259
# 46| v5_3(Void) = ReturnVoid :
12601260
#-----| Goto -> Block 1
12611261

@@ -1274,57 +1274,57 @@ stmts.cs:
12741274

12751275
# 59| Block 8
12761276
# 59| v8_0(Void) = CatchAny :
1277-
# 60| v8_1(Void) = ReThrow :
1277+
# 61| v8_1(Void) = ReThrow :
12781278
#-----| Exception -> Block 2
12791279

1280-
# 68| System.Void test_stmts.forStmt()
1281-
# 68| Block 0
1282-
# 68| v0_0(Void) = EnterFunction :
1283-
# 68| mu0_1(null) = AliasedDefinition :
1284-
# 68| mu0_2(null) = UnmodeledDefinition :
1285-
# 70| r0_3(glval<Int32>) = VariableAddress[x] :
1286-
# 70| r0_4(Int32) = Constant[0] :
1287-
# 70| mu0_5(Int32) = Store : &:r0_3, r0_4
1288-
# 71| r0_6(glval<Int32>) = VariableAddress[i] :
1289-
# 71| r0_7(Int32) = Constant[0] :
1290-
# 71| mu0_8(Int32) = Store : &:r0_6, r0_7
1291-
# 71| r0_9(glval<Int32>) = VariableAddress[j] :
1292-
# 71| r0_10(Int32) = Constant[10] :
1293-
# 71| mu0_11(Int32) = Store : &:r0_9, r0_10
1280+
# 69| System.Void test_stmts.forStmt()
1281+
# 69| Block 0
1282+
# 69| v0_0(Void) = EnterFunction :
1283+
# 69| mu0_1(null) = AliasedDefinition :
1284+
# 69| mu0_2(null) = UnmodeledDefinition :
1285+
# 71| r0_3(glval<Int32>) = VariableAddress[x] :
1286+
# 71| r0_4(Int32) = Constant[0] :
1287+
# 71| mu0_5(Int32) = Store : &:r0_3, r0_4
1288+
# 72| r0_6(glval<Int32>) = VariableAddress[i] :
1289+
# 72| r0_7(Int32) = Constant[0] :
1290+
# 72| mu0_8(Int32) = Store : &:r0_6, r0_7
1291+
# 72| r0_9(glval<Int32>) = VariableAddress[j] :
1292+
# 72| r0_10(Int32) = Constant[10] :
1293+
# 72| mu0_11(Int32) = Store : &:r0_9, r0_10
12941294
#-----| Goto -> Block 2
12951295

1296-
# 68| Block 1
1297-
# 68| v1_0(Void) = ReturnVoid :
1298-
# 68| v1_1(Void) = UnmodeledUse : mu*
1299-
# 68| v1_2(Void) = ExitFunction :
1300-
1301-
# 71| Block 2
1302-
# 71| r2_0(glval<Int32>) = VariableAddress[i] :
1303-
# 71| r2_1(Int32) = Load : &:r2_0, ~mu0_2
1304-
# 71| r2_2(glval<Int32>) = VariableAddress[j] :
1305-
# 71| r2_3(Int32) = Load : &:r2_2, ~mu0_2
1306-
# 71| r2_4(Boolean) = CompareLT : r2_1, r2_3
1307-
# 71| v2_5(Void) = ConditionalBranch : r2_4
1296+
# 69| Block 1
1297+
# 69| v1_0(Void) = ReturnVoid :
1298+
# 69| v1_1(Void) = UnmodeledUse : mu*
1299+
# 69| v1_2(Void) = ExitFunction :
1300+
1301+
# 72| Block 2
1302+
# 72| r2_0(glval<Int32>) = VariableAddress[i] :
1303+
# 72| r2_1(Int32) = Load : &:r2_0, ~mu0_2
1304+
# 72| r2_2(glval<Int32>) = VariableAddress[j] :
1305+
# 72| r2_3(Int32) = Load : &:r2_2, ~mu0_2
1306+
# 72| r2_4(Boolean) = CompareLT : r2_1, r2_3
1307+
# 72| v2_5(Void) = ConditionalBranch : r2_4
13081308
#-----| False -> Block 4
13091309
#-----| True -> Block 3
13101310

1311-
# 73| Block 3
1312-
# 73| r3_0(glval<Int32>) = VariableAddress[x] :
1313-
# 73| r3_1(Int32) = Load : &:r3_0, ~mu0_2
1314-
# 73| r3_2(Int32) = Constant[1] :
1315-
# 73| r3_3(Int32) = Sub : r3_1, r3_2
1316-
# 73| r3_4(glval<Int32>) = VariableAddress[x] :
1317-
# 73| mu3_5(Int32) = Store : &:r3_4, r3_3
1318-
# 71| r3_6(glval<Int32>) = VariableAddress[i] :
1319-
# 71| r3_7(Int32) = Load : &:r3_6, ~mu0_2
1320-
# 71| r3_8(Int32) = Constant[1] :
1321-
# 71| r3_9(Int32) = Add : r3_7, r3_8
1322-
# 71| mu3_10(Int32) = Store : &:r3_6, r3_9
1323-
# 71| r3_11(glval<Int32>) = VariableAddress[j] :
1324-
# 71| r3_12(Int32) = Load : &:r3_11, ~mu0_2
1325-
# 71| r3_13(Int32) = Constant[1] :
1326-
# 71| r3_14(Int32) = Sub : r3_12, r3_13
1327-
# 71| mu3_15(Int32) = Store : &:r3_11, r3_14
1311+
# 74| Block 3
1312+
# 74| r3_0(glval<Int32>) = VariableAddress[x] :
1313+
# 74| r3_1(Int32) = Load : &:r3_0, ~mu0_2
1314+
# 74| r3_2(Int32) = Constant[1] :
1315+
# 74| r3_3(Int32) = Sub : r3_1, r3_2
1316+
# 74| r3_4(glval<Int32>) = VariableAddress[x] :
1317+
# 74| mu3_5(Int32) = Store : &:r3_4, r3_3
1318+
# 72| r3_6(glval<Int32>) = VariableAddress[i] :
1319+
# 72| r3_7(Int32) = Load : &:r3_6, ~mu0_2
1320+
# 72| r3_8(Int32) = Constant[1] :
1321+
# 72| r3_9(Int32) = Add : r3_7, r3_8
1322+
# 72| mu3_10(Int32) = Store : &:r3_6, r3_9
1323+
# 72| r3_11(glval<Int32>) = VariableAddress[j] :
1324+
# 72| r3_12(Int32) = Load : &:r3_11, ~mu0_2
1325+
# 72| r3_13(Int32) = Constant[1] :
1326+
# 72| r3_14(Int32) = Sub : r3_12, r3_13
1327+
# 72| mu3_15(Int32) = Store : &:r3_11, r3_14
13281328
#-----| Goto (back edge) -> Block 2
13291329

13301330
# 76| Block 4
@@ -1338,82 +1338,82 @@ stmts.cs:
13381338
# 77| mu4_7(Int32) = Store : &:r4_6, r4_5
13391339
#-----| Goto -> Block 5
13401340

1341-
# 77| Block 5
1342-
# 77| r5_0(glval<Int32>) = VariableAddress[a] :
1343-
# 77| r5_1(Int32) = Load : &:r5_0, ~mu0_2
1344-
# 77| r5_2(glval<Int32>) = VariableAddress[b] :
1345-
# 77| r5_3(Int32) = Load : &:r5_2, ~mu0_2
1346-
# 77| r5_4(Boolean) = CompareLT : r5_1, r5_3
1347-
# 77| v5_5(Void) = ConditionalBranch : r5_4
1341+
# 78| Block 5
1342+
# 78| r5_0(glval<Int32>) = VariableAddress[a] :
1343+
# 78| r5_1(Int32) = Load : &:r5_0, ~mu0_2
1344+
# 78| r5_2(glval<Int32>) = VariableAddress[b] :
1345+
# 78| r5_3(Int32) = Load : &:r5_2, ~mu0_2
1346+
# 78| r5_4(Boolean) = CompareLT : r5_1, r5_3
1347+
# 78| v5_5(Void) = ConditionalBranch : r5_4
13481348
#-----| False -> Block 7
13491349
#-----| True -> Block 6
13501350

1351-
# 79| Block 6
1352-
# 79| r6_0(glval<Int32>) = VariableAddress[a] :
1353-
# 79| r6_1(Int32) = Load : &:r6_0, ~mu0_2
1354-
# 79| r6_2(Int32) = Constant[1] :
1355-
# 79| r6_3(Int32) = Add : r6_1, r6_2
1356-
# 79| mu6_4(Int32) = Store : &:r6_0, r6_3
1351+
# 80| Block 6
1352+
# 80| r6_0(glval<Int32>) = VariableAddress[a] :
1353+
# 80| r6_1(Int32) = Load : &:r6_0, ~mu0_2
1354+
# 80| r6_2(Int32) = Constant[1] :
1355+
# 80| r6_3(Int32) = Add : r6_1, r6_2
1356+
# 80| mu6_4(Int32) = Store : &:r6_0, r6_3
13571357
#-----| Goto (back edge) -> Block 5
13581358

1359-
# 83| Block 7
1360-
# 83| v7_0(Void) = NoOp :
1359+
# 84| Block 7
1360+
# 84| v7_0(Void) = NoOp :
13611361
#-----| Goto (back edge) -> Block 7
13621362

1363-
# 88| System.Void test_stmts.doWhile()
1364-
# 88| Block 0
1365-
# 88| v0_0(Void) = EnterFunction :
1366-
# 88| mu0_1(null) = AliasedDefinition :
1367-
# 88| mu0_2(null) = UnmodeledDefinition :
1368-
# 90| r0_3(glval<Int32>) = VariableAddress[x] :
1369-
# 90| r0_4(Int32) = Constant[0] :
1370-
# 90| mu0_5(Int32) = Store : &:r0_3, r0_4
1363+
# 89| System.Void test_stmts.doWhile()
1364+
# 89| Block 0
1365+
# 89| v0_0(Void) = EnterFunction :
1366+
# 89| mu0_1(null) = AliasedDefinition :
1367+
# 89| mu0_2(null) = UnmodeledDefinition :
1368+
# 91| r0_3(glval<Int32>) = VariableAddress[x] :
1369+
# 91| r0_4(Int32) = Constant[0] :
1370+
# 91| mu0_5(Int32) = Store : &:r0_3, r0_4
13711371
#-----| Goto -> Block 2
13721372

1373-
# 88| Block 1
1374-
# 88| v1_0(Void) = ReturnVoid :
1375-
# 88| v1_1(Void) = UnmodeledUse : mu*
1376-
# 88| v1_2(Void) = ExitFunction :
1377-
1378-
# 93| Block 2
1379-
# 93| r2_0(glval<Int32>) = VariableAddress[x] :
1380-
# 93| r2_1(Int32) = Load : &:r2_0, ~mu0_2
1381-
# 93| r2_2(Int32) = Constant[1] :
1382-
# 93| r2_3(Int32) = Add : r2_1, r2_2
1383-
# 93| r2_4(glval<Int32>) = VariableAddress[x] :
1384-
# 93| mu2_5(Int32) = Store : &:r2_4, r2_3
1385-
# 95| r2_6(glval<Int32>) = VariableAddress[x] :
1386-
# 95| r2_7(Int32) = Load : &:r2_6, ~mu0_2
1387-
# 95| r2_8(Int32) = Constant[10] :
1388-
# 95| r2_9(Boolean) = CompareLT : r2_7, r2_8
1389-
# 95| v2_10(Void) = ConditionalBranch : r2_9
1373+
# 89| Block 1
1374+
# 89| v1_0(Void) = ReturnVoid :
1375+
# 89| v1_1(Void) = UnmodeledUse : mu*
1376+
# 89| v1_2(Void) = ExitFunction :
1377+
1378+
# 94| Block 2
1379+
# 94| r2_0(glval<Int32>) = VariableAddress[x] :
1380+
# 94| r2_1(Int32) = Load : &:r2_0, ~mu0_2
1381+
# 94| r2_2(Int32) = Constant[1] :
1382+
# 94| r2_3(Int32) = Add : r2_1, r2_2
1383+
# 94| r2_4(glval<Int32>) = VariableAddress[x] :
1384+
# 94| mu2_5(Int32) = Store : &:r2_4, r2_3
1385+
# 96| r2_6(glval<Int32>) = VariableAddress[x] :
1386+
# 96| r2_7(Int32) = Load : &:r2_6, ~mu0_2
1387+
# 96| r2_8(Int32) = Constant[10] :
1388+
# 96| r2_9(Boolean) = CompareLT : r2_7, r2_8
1389+
# 96| v2_10(Void) = ConditionalBranch : r2_9
13901390
#-----| False -> Block 1
13911391
#-----| True (back edge) -> Block 2
13921392

1393-
# 87| System.Void test_stmts.checkedUnchecked()
1394-
# 87| Block 0
1395-
# 87| v0_0(Void) = EnterFunction :
1396-
# 87| mu0_1(null) = AliasedDefinition :
1397-
# 87| mu0_2(null) = UnmodeledDefinition :
1398-
# 89| r0_3(glval<Int32>) = VariableAddress[num] :
1399-
# 89| r0_4(Int32) = Constant[2147483647] :
1400-
# 89| r0_5(Int32) = Load : &:r0_4, ~mu0_2
1401-
# 89| mu0_6(Int32) = Store : &:r0_3, r0_5
1402-
# 92| r0_7(glval<Int32>) = VariableAddress[num] :
1403-
# 92| r0_8(Int32) = Load : &:r0_7, ~mu0_2
1404-
# 92| r0_9(Int32) = Constant[1] :
1405-
# 92| r0_10(Int32) = Add : r0_8, r0_9
1406-
# 92| r0_11(glval<Int32>) = VariableAddress[num] :
1407-
# 92| mu0_12(Int32) = Store : &:r0_11, r0_10
1408-
# 96| r0_13(glval<Int32>) = VariableAddress[num] :
1409-
# 96| r0_14(Int32) = Load : &:r0_13, ~mu0_2
1410-
# 96| r0_15(Int32) = Constant[1] :
1411-
# 96| r0_16(Int32) = Add : r0_14, r0_15
1412-
# 96| r0_17(glval<Int32>) = VariableAddress[num] :
1413-
# 96| mu0_18(Int32) = Store : &:r0_17, r0_16
1414-
# 87| v0_19(Void) = ReturnVoid :
1415-
# 87| v0_20(Void) = UnmodeledUse : mu*
1416-
# 87| v0_21(Void) = ExitFunction :
1393+
# 99| System.Void test_stmts.checkedUnchecked()
1394+
# 99| Block 0
1395+
# 99| v0_0(Void) = EnterFunction :
1396+
# 99| mu0_1(null) = AliasedDefinition :
1397+
# 99| mu0_2(null) = UnmodeledDefinition :
1398+
# 101| r0_3(glval<Int32>) = VariableAddress[num] :
1399+
# 101| r0_4(Int32) = Constant[2147483647] :
1400+
# 101| r0_5(Int32) = Load : &:r0_4, ~mu0_2
1401+
# 101| mu0_6(Int32) = Store : &:r0_3, r0_5
1402+
# 104| r0_7(glval<Int32>) = VariableAddress[num] :
1403+
# 104| r0_8(Int32) = Load : &:r0_7, ~mu0_2
1404+
# 104| r0_9(Int32) = Constant[1] :
1405+
# 104| r0_10(Int32) = Add : r0_8, r0_9
1406+
# 104| r0_11(glval<Int32>) = VariableAddress[num] :
1407+
# 104| mu0_12(Int32) = Store : &:r0_11, r0_10
1408+
# 108| r0_13(glval<Int32>) = VariableAddress[num] :
1409+
# 108| r0_14(Int32) = Load : &:r0_13, ~mu0_2
1410+
# 108| r0_15(Int32) = Constant[1] :
1411+
# 108| r0_16(Int32) = Add : r0_14, r0_15
1412+
# 108| r0_17(glval<Int32>) = VariableAddress[num] :
1413+
# 108| mu0_18(Int32) = Store : &:r0_17, r0_16
1414+
# 99| v0_19(Void) = ReturnVoid :
1415+
# 99| v0_20(Void) = UnmodeledUse : mu*
1416+
# 99| v0_21(Void) = ExitFunction :
14171417

14181418
using.cs:
14191419
# 7| System.Void UsingStmt.MyDisposable..ctor()
@@ -1476,16 +1476,9 @@ using.cs:
14761476
# 22| r0_22(glval<null>) = FunctionAddress[DoSomething] :
14771477
# 22| v0_23(Void) = Call : func:r0_22, this:r0_21
14781478
# 22| mu0_24(null) = ^CallSideEffect : ~mu0_2
1479-
# 25| r0_25(glval<MyDisposable>) = VariableAddress[o3] :
1480-
# 25| r0_26(MyDisposable) = NewObj :
1481-
# 25| r0_27(glval<null>) = FunctionAddress[MyDisposable] :
1482-
# 25| v0_28(Void) = Call : func:r0_27, this:r0_26
1483-
# 25| mu0_29(null) = ^CallSideEffect : ~mu0_2
1484-
# 25| mu0_30(MyDisposable) = Store : &:r0_25, r0_26
1485-
# 25| v0_31(Void) = NoOp :
1486-
# 12| v0_32(Void) = ReturnVoid :
1487-
# 12| v0_33(Void) = UnmodeledUse : mu*
1488-
# 12| v0_34(Void) = ExitFunction :
1479+
# 12| v0_25(Void) = ReturnVoid :
1480+
# 12| v0_26(Void) = UnmodeledUse : mu*
1481+
# 12| v0_27(Void) = ExitFunction :
14891482

14901483
variables.cs:
14911484
# 5| System.Void test_variables.f()

csharp/ql/test/library-tests/ir/ir/stmts.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ public static void tryCatchFinally()
5656
{
5757
x = 1;
5858
}
59-
catch {
59+
catch
60+
{
6061
throw;
6162
}
6263
finally
@@ -105,5 +106,6 @@ public static void checkedUnchecked()
105106
checked
106107
{
107108
num = num + 1;
108-
} }
109+
}
110+
}
109111
}

csharp/ql/test/library-tests/ir/ir/using.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,5 @@ static void Main()
2121
{
2222
o2.DoSomething();
2323
}
24-
25-
using(var o3 = new MyDisposable());
2624
}
2725
}

0 commit comments

Comments
 (0)