Skip to content

Commit 5688210

Browse files
committed
Java: add test for modulus analysis
1 parent 77abff7 commit 5688210

File tree

3 files changed

+168
-0
lines changed

3 files changed

+168
-0
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
| ModulusAnalysis.java:3:5:3:22 | ...=... | 0 | 42 | 0 |
2+
| ModulusAnalysis.java:3:5:3:22 | c1 | 0 | 42 | 0 |
3+
| ModulusAnalysis.java:3:20:3:21 | 42 | 0 | 42 | 0 |
4+
| ModulusAnalysis.java:4:5:4:22 | ...=... | 0 | 43 | 0 |
5+
| ModulusAnalysis.java:4:5:4:22 | c2 | 0 | 43 | 0 |
6+
| ModulusAnalysis.java:4:20:4:21 | 43 | 0 | 43 | 0 |
7+
| ModulusAnalysis.java:7:18:7:18 | i | SSA init(i) | 0 | 0 |
8+
| ModulusAnalysis.java:7:18:7:22 | ... + ... | SSA init(i) | 3 | 0 |
9+
| ModulusAnalysis.java:7:22:7:22 | 3 | 0 | 3 | 0 |
10+
| ModulusAnalysis.java:9:19:9:20 | eq | SSA def(eq) | 0 | 0 |
11+
| ModulusAnalysis.java:9:19:9:20 | eq | SSA init(i) | 3 | 0 |
12+
| ModulusAnalysis.java:9:19:9:25 | ... * ... | 0 | 0 | 42 |
13+
| ModulusAnalysis.java:9:19:9:29 | ... + ... | 0 | 3 | 42 |
14+
| ModulusAnalysis.java:9:24:9:25 | c1 | 0 | 42 | 0 |
15+
| ModulusAnalysis.java:9:24:9:25 | c1 | SSA init(this.c1) | 0 | 0 |
16+
| ModulusAnalysis.java:9:29:9:29 | 3 | 0 | 3 | 0 |
17+
| ModulusAnalysis.java:11:21:11:21 | 7 | 0 | 7 | 0 |
18+
| ModulusAnalysis.java:12:13:12:15 | mul | 0 | 3 | 42 |
19+
| ModulusAnalysis.java:12:13:12:15 | mul | SSA def(mul) | 0 | 0 |
20+
| ModulusAnalysis.java:12:19:12:20 | c2 | 0 | 43 | 0 |
21+
| ModulusAnalysis.java:12:19:12:20 | c2 | SSA impl upd[untracked](this.c2) | 0 | 0 |
22+
| ModulusAnalysis.java:12:25:12:29 | seven | 0 | 7 | 0 |
23+
| ModulusAnalysis.java:12:25:12:29 | seven | SSA def(seven) | 0 | 0 |
24+
| ModulusAnalysis.java:13:32:13:34 | mul | 0 | 3 | 42 |
25+
| ModulusAnalysis.java:13:32:13:34 | mul | SSA def(mul) | 0 | 0 |
26+
| ModulusAnalysis.java:16:17:18:23 | ...?...:... | 0 | 3 | 4 |
27+
| ModulusAnalysis.java:17:15:17:15 | i | SSA init(i) | 0 | 0 |
28+
| ModulusAnalysis.java:17:15:17:19 | ... * ... | 0 | 0 | 4 |
29+
| ModulusAnalysis.java:17:15:17:23 | ... + ... | 0 | 3 | 4 |
30+
| ModulusAnalysis.java:17:19:17:19 | 4 | 0 | 4 | 0 |
31+
| ModulusAnalysis.java:17:23:17:23 | 3 | 0 | 3 | 0 |
32+
| ModulusAnalysis.java:18:15:18:15 | i | SSA init(i) | 0 | 0 |
33+
| ModulusAnalysis.java:18:15:18:19 | ... * ... | 0 | 0 | 8 |
34+
| ModulusAnalysis.java:18:15:18:23 | ... + ... | 0 | 7 | 8 |
35+
| ModulusAnalysis.java:18:19:18:19 | 8 | 0 | 8 | 0 |
36+
| ModulusAnalysis.java:18:23:18:23 | 7 | 0 | 7 | 0 |
37+
| ModulusAnalysis.java:19:28:19:28 | j | 0 | 3 | 4 |
38+
| ModulusAnalysis.java:19:28:19:28 | j | SSA def(j) | 0 | 0 |
39+
| ModulusAnalysis.java:21:13:21:13 | x | SSA init(x) | 0 | 0 |
40+
| ModulusAnalysis.java:21:17:21:18 | c1 | 0 | 42 | 0 |
41+
| ModulusAnalysis.java:21:17:21:18 | c1 | SSA init(this.c1) | 0 | 0 |
42+
| ModulusAnalysis.java:21:23:21:23 | 3 | 0 | 3 | 0 |
43+
| ModulusAnalysis.java:21:28:21:28 | y | SSA init(y) | 0 | 0 |
44+
| ModulusAnalysis.java:21:32:21:33 | c1 | 0 | 42 | 0 |
45+
| ModulusAnalysis.java:21:32:21:33 | c1 | SSA init(this.c1) | 0 | 0 |
46+
| ModulusAnalysis.java:21:38:21:38 | 7 | 0 | 7 | 0 |
47+
| ModulusAnalysis.java:22:32:22:32 | x | 0 | 3 | 42 |
48+
| ModulusAnalysis.java:22:32:22:32 | x | SSA init(x) | 0 | 0 |
49+
| ModulusAnalysis.java:22:32:22:36 | ... + ... | 0 | 10 | 42 |
50+
| ModulusAnalysis.java:22:32:22:36 | ... + ... | SSA init(x) | 7 | 42 |
51+
| ModulusAnalysis.java:22:32:22:36 | ... + ... | SSA init(y) | 3 | 42 |
52+
| ModulusAnalysis.java:22:36:22:36 | y | 0 | 7 | 42 |
53+
| ModulusAnalysis.java:22:36:22:36 | y | SSA init(y) | 0 | 0 |
54+
| ModulusAnalysis.java:25:13:25:13 | x | SSA init(x) | 0 | 0 |
55+
| ModulusAnalysis.java:25:17:25:18 | c1 | 0 | 42 | 0 |
56+
| ModulusAnalysis.java:25:17:25:18 | c1 | SSA init(this.c1) | 0 | 0 |
57+
| ModulusAnalysis.java:25:23:25:23 | 3 | 0 | 3 | 0 |
58+
| ModulusAnalysis.java:25:28:25:28 | y | SSA init(y) | 0 | 0 |
59+
| ModulusAnalysis.java:25:32:25:33 | c1 | 0 | 42 | 0 |
60+
| ModulusAnalysis.java:25:32:25:33 | c1 | SSA init(this.c1) | 0 | 0 |
61+
| ModulusAnalysis.java:25:38:25:38 | 7 | 0 | 7 | 0 |
62+
| ModulusAnalysis.java:26:32:26:32 | x | 0 | 3 | 42 |
63+
| ModulusAnalysis.java:26:32:26:32 | x | SSA init(x) | 0 | 0 |
64+
| ModulusAnalysis.java:26:32:26:36 | ... - ... | 0 | 38 | 42 |
65+
| ModulusAnalysis.java:26:32:26:36 | ... - ... | SSA init(x) | 35 | 42 |
66+
| ModulusAnalysis.java:26:36:26:36 | y | 0 | 7 | 42 |
67+
| ModulusAnalysis.java:26:36:26:36 | y | SSA init(y) | 0 | 0 |
68+
| ModulusAnalysis.java:29:17:29:26 | arr.length | SSA impl upd[untracked](arr.length) | 0 | 0 |
69+
| ModulusAnalysis.java:29:17:29:30 | ... * ... | 0 | 0 | 4 |
70+
| ModulusAnalysis.java:29:17:29:35 | ... - ... | 0 | 1 | 4 |
71+
| ModulusAnalysis.java:29:30:29:30 | 4 | 0 | 4 | 0 |
72+
| ModulusAnalysis.java:29:34:29:35 | 11 | 0 | 11 | 0 |
73+
| ModulusAnalysis.java:30:28:30:28 | l | 0 | 1 | 4 |
74+
| ModulusAnalysis.java:30:28:30:28 | l | SSA def(l) | 0 | 0 |
75+
| ModulusAnalysis.java:32:9:32:38 | ...=... | 0 | 1 | 4 |
76+
| ModulusAnalysis.java:32:13:32:29 | getArray(...).length | getArray(...).length | 0 | 0 |
77+
| ModulusAnalysis.java:32:13:32:33 | ... * ... | 0 | 0 | 4 |
78+
| ModulusAnalysis.java:32:13:32:38 | ... - ... | 0 | 1 | 4 |
79+
| ModulusAnalysis.java:32:33:32:33 | 4 | 0 | 4 | 0 |
80+
| ModulusAnalysis.java:32:37:32:38 | 11 | 0 | 11 | 0 |
81+
| ModulusAnalysis.java:33:28:33:28 | l | 0 | 1 | 4 |
82+
| ModulusAnalysis.java:33:28:33:28 | l | SSA def(l) | 0 | 0 |
83+
| ModulusAnalysis.java:36:13:36:25 | ...=... | 0 | 3 | 4 |
84+
| ModulusAnalysis.java:36:17:36:17 | i | SSA init(i) | 0 | 0 |
85+
| ModulusAnalysis.java:36:17:36:21 | ... * ... | 0 | 0 | 4 |
86+
| ModulusAnalysis.java:36:17:36:25 | ... + ... | 0 | 3 | 4 |
87+
| ModulusAnalysis.java:36:21:36:21 | 4 | 0 | 4 | 0 |
88+
| ModulusAnalysis.java:36:25:36:25 | 3 | 0 | 3 | 0 |
89+
| ModulusAnalysis.java:39:13:39:25 | ...=... | 0 | 7 | 8 |
90+
| ModulusAnalysis.java:39:17:39:17 | i | SSA init(i) | 0 | 0 |
91+
| ModulusAnalysis.java:39:17:39:21 | ... * ... | 0 | 0 | 8 |
92+
| ModulusAnalysis.java:39:17:39:25 | ... + ... | 0 | 7 | 8 |
93+
| ModulusAnalysis.java:39:21:39:21 | 8 | 0 | 8 | 0 |
94+
| ModulusAnalysis.java:39:25:39:25 | 7 | 0 | 7 | 0 |
95+
| ModulusAnalysis.java:41:28:41:28 | j | 0 | 3 | 4 |
96+
| ModulusAnalysis.java:41:28:41:28 | j | SSA phi(j) | 0 | 0 |
97+
| ModulusAnalysis.java:44:32:44:32 | j | 0 | 3 | 4 |
98+
| ModulusAnalysis.java:44:32:44:32 | j | SSA phi(j) | 0 | 0 |
99+
| ModulusAnalysis.java:46:32:46:32 | j | 0 | 3 | 4 |
100+
| ModulusAnalysis.java:46:32:46:32 | j | SSA phi(j) | 0 | 0 |
101+
| ModulusAnalysis.java:49:14:49:14 | x | SSA init(x) | 0 | 0 |
102+
| ModulusAnalysis.java:49:18:49:19 | 15 | 0 | 15 | 0 |
103+
| ModulusAnalysis.java:49:25:49:25 | 3 | 0 | 3 | 0 |
104+
| ModulusAnalysis.java:50:32:50:32 | x | 0 | 3 | 16 |
105+
| ModulusAnalysis.java:50:32:50:32 | x | SSA init(x) | 0 | 0 |
106+
| ModulusAnalysis.java:54:38:54:39 | 42 | 0 | 42 | 0 |
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
class ModulusAnalysis
2+
{
3+
final int c1 = 42;
4+
final int c2 = 43;
5+
6+
void m(int i, boolean cond, int x, int y, int[] arr) {
7+
int eq = i + 3;
8+
9+
int mul = eq * c1 + 3; // congruent 3 mod 42
10+
11+
int seven = 7;
12+
if (mul % c2 == seven) {
13+
System.out.println(mul); // congruent 3 mod 42
14+
}
15+
16+
int j = cond
17+
? i * 4 + 3
18+
: i * 8 + 7;
19+
System.out.println(j); // congruent 3 mod 4
20+
21+
if (x % c1 == 3 && y % c1 == 7) {
22+
System.out.println(x + y); // congruent 10 mod 42
23+
}
24+
25+
if (x % c1 == 3 && y % c1 == 7) {
26+
System.out.println(x - y); // congruent 38 mod 42
27+
}
28+
29+
int l = arr.length * 4 - 11;
30+
System.out.println(l); // congruent 1 mod 4
31+
32+
l = getArray().length * 4 - 11;
33+
System.out.println(l); // congruent 1 mod 4
34+
35+
if (cond) {
36+
j = i * 4 + 3;
37+
}
38+
else {
39+
j = i * 8 + 7;
40+
}
41+
System.out.println(j); // congruent 3 mod 4
42+
43+
if (cond) {
44+
System.out.println(j); // congruent 3 mod 4
45+
} else {
46+
System.out.println(j); // congruent 3 mod 4
47+
}
48+
49+
if ((x & 15) == 3) {
50+
System.out.println(x); // congruent 3 mod 16
51+
}
52+
}
53+
54+
int[] getArray(){ return new int[42]; }
55+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import java
2+
import semmle.code.java.dataflow.ModulusAnalysis
3+
import semmle.code.java.dataflow.Bound
4+
5+
from Expr e, Bound b, int delta, int mod
6+
where exprModulus(e, b, delta, mod)
7+
select e, b.toString(), delta, mod

0 commit comments

Comments
 (0)