Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit bb9485d

Browse files
author
Dave Bartolomeo
committed
C++: Update points_to tests to use new framework
1 parent af9d90c commit bb9485d

5 files changed

Lines changed: 152 additions & 121 deletions

File tree

cpp/ql/test/library-tests/ir/escape/points_to.expected

Lines changed: 0 additions & 86 deletions
This file was deleted.

cpp/ql/test/library-tests/ir/escape/points_to.ql

Lines changed: 0 additions & 35 deletions
This file was deleted.
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
struct Point {
2+
int x;
3+
int y;
4+
};
5+
6+
struct Base1 {
7+
int b1;
8+
};
9+
10+
struct Base2 {
11+
int b2;
12+
};
13+
14+
struct DerivedSI : Base1 {
15+
int dsi;
16+
};
17+
18+
struct DerivedMI : Base1, Base2 {
19+
int dmi;
20+
};
21+
22+
struct DerivedVI : virtual Base1 {
23+
int dvi;
24+
};
25+
26+
void Locals() {
27+
Point pt = { //$ussa=pt
28+
1, //$ussa=pt[0..4)<int>
29+
2 //$ussa=pt[4..8)<int>
30+
};
31+
int i = pt.x; //$ussa=pt[0..4)<int>
32+
i = pt.y; //$ussa=pt[4..8)<int>
33+
int* p = &pt.x;
34+
i = *p; //$ussa=pt[0..4)<int>
35+
p = &pt.y;
36+
i = *p; //$ussa=pt[4..8)<int>
37+
}
38+
39+
void PointsTo(
40+
int a, //$raw,ussa=a
41+
Point& b, //$raw,ussa=b $ussa=*b
42+
Point* c, //$raw,ussa=c $ussa=*c
43+
int* d, //$raw,ussa=d $ussa=*d
44+
DerivedSI* e, //$raw,ussa=e $ussa=*e
45+
DerivedMI* f, //$raw,ussa=f $ussa=*f
46+
DerivedVI* g //$raw,ussa=g $ussa=*g
47+
) {
48+
49+
int i = a; //$raw,ussa=a
50+
i = *&a; //$raw,ussa=a
51+
i = *(&a + 0); //$raw,ussa=a
52+
i = b.x; //$raw,ussa=b $ussa=*b[0..4)<int>
53+
i = b.y; //$raw,ussa=b $ussa=*b[4..8)<int>
54+
i = c->x; //$raw,ussa=c $ussa=*c[0..4)<int>
55+
i = c->y; //$raw,ussa=c $ussa=*c[4..8)<int>
56+
i = *d; //$raw,ussa=d $ussa=*d[0..4)<int>
57+
i = *(d + 0); //$raw,ussa=d $ussa=*d[0..4)<int>
58+
i = d[5]; //$raw,ussa=d $ussa=*d[20..24)<int>
59+
i = 5[d]; //$raw,ussa=d $ussa=*d[20..24)<int>
60+
i = d[a]; //$raw,ussa=d $raw,ussa=a $ussa=*d[?..?)<int>
61+
i = a[d]; //$raw,ussa=d $raw,ussa=a $ussa=*d[?..?)<int>
62+
63+
int* p = &b.x; //$raw,ussa=b
64+
i = *p; //$ussa=*b[0..4)<int>
65+
p = &b.y; //$raw,ussa=b
66+
i = *p; //$ussa=*b[4..8)<int>
67+
p = &c->x; //$raw,ussa=c
68+
i = *p; //$ussa=*c[0..4)<int>
69+
p = &c->y; //$raw,ussa=c
70+
i = *p; //$ussa=*c[4..8)<int>
71+
p = &d[5]; //$raw,ussa=d
72+
i = *p; //$ussa=*d[20..24)<int>
73+
p = &d[a]; //$raw,ussa=d $raw,ussa=a
74+
i = *p; //$ussa=*d[?..?)<int>
75+
76+
Point* q = &c[a]; //$raw,ussa=c $raw,ussa=a
77+
i = q->x; //$ussa=*c[?..?)<int>
78+
i = q->y; //$ussa=*c[?..?)<int>
79+
80+
i = e->b1; //$raw,ussa=e $ussa=*e[0..4)<int>
81+
i = e->dsi; //$raw,ussa=e $ussa=*e[4..8)<int>
82+
i = f->b1; //$raw,ussa=f $ussa=*f[0..4)<int>
83+
i = f->b2; //$raw,ussa=f $ussa=*f[4..8)<int>
84+
i = f->dmi; //$raw,ussa=f $ussa=*f[8..12)<int>
85+
i = g->b1; //$raw,ussa=g $ussa=*g[?..?)<int>
86+
i = g->dvi; //$raw,ussa=g $ussa=*g[8..12)<int>
87+
}

cpp/ql/test/library-tests/ir/points_to/points_to.expected

Whitespace-only changes.
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import cpp
2+
private import TestUtilities.InlineExpectationsTest
3+
private import semmle.code.cpp.ir.internal.IntegerConstant as Ints
4+
5+
private predicate ignoreAllocation(string name) {
6+
name = "i" or
7+
name = "p" or
8+
name = "q"
9+
}
10+
11+
module Raw {
12+
private import semmle.code.cpp.ir.implementation.raw.IR
13+
private import semmle.code.cpp.ir.implementation.unaliased_ssa.internal.SimpleSSA
14+
15+
private MemoryLocation getAMemoryAccess(Instruction instr) {
16+
result = getResultMemoryLocation(instr) or
17+
result = getOperandMemoryLocation(instr.getAnOperand())
18+
}
19+
20+
class RawPointsToTest extends InlineExpectationsTest {
21+
RawPointsToTest() { this = "RawPointsToTest" }
22+
23+
override string getARelevantTag() { result = "raw" }
24+
25+
override predicate hasActualResult(Location location, string element, string tag, string value) {
26+
exists(Instruction instr, MemoryLocation memLocation |
27+
memLocation = getAMemoryAccess(instr) and
28+
tag = "raw" and
29+
not ignoreAllocation(memLocation.getAllocation().getAllocationString()) and
30+
value = memLocation.toString() and
31+
element = instr.toString() and
32+
location = instr.getLocation()
33+
)
34+
}
35+
}
36+
}
37+
38+
module UnaliasedSSA {
39+
private import semmle.code.cpp.ir.implementation.unaliased_ssa.IR
40+
private import semmle.code.cpp.ir.implementation.aliased_ssa.internal.AliasedSSA
41+
42+
private MemoryLocation getAMemoryAccess(Instruction instr) {
43+
result = getResultMemoryLocation(instr) or
44+
result = getOperandMemoryLocation(instr.getAnOperand())
45+
}
46+
47+
class UnaliasedSSAPointsToTest extends InlineExpectationsTest {
48+
UnaliasedSSAPointsToTest() { this = "UnaliasedSSAPointsToTest" }
49+
50+
override string getARelevantTag() { result = "ussa" }
51+
52+
override predicate hasActualResult(Location location, string element, string tag, string value) {
53+
exists(Instruction instr, MemoryLocation memLocation |
54+
memLocation = getAMemoryAccess(instr) and
55+
not memLocation instanceof AliasedVirtualVariable and
56+
not memLocation instanceof AllNonLocalMemory and
57+
tag = "ussa" and
58+
not ignoreAllocation(memLocation.getAllocation().getAllocationString()) and
59+
value = memLocation.toString() and
60+
element = instr.toString() and
61+
location = instr.getLocation()
62+
)
63+
}
64+
}
65+
}

0 commit comments

Comments
 (0)