File tree Expand file tree Collapse file tree 3 files changed +68
-0
lines changed
cpp/ql/test/library-tests/members/this Expand file tree Collapse file tree 3 files changed +68
-0
lines changed Original file line number Diff line number Diff line change
1
+
2
+ int global;
3
+
4
+ class C {
5
+ int x;
6
+
7
+ public:
8
+
9
+ void f1 () {
10
+ // Implicit dereference of `this.`
11
+ x++;
12
+ }
13
+
14
+ void f2 () {
15
+ // Explicit dereference of `this.`
16
+ this ->x ++;
17
+ }
18
+
19
+ int f3 () const {
20
+ // We expect the type of `this` to be const-qualified.
21
+ return x;
22
+ }
23
+
24
+ int f4 () volatile {
25
+ // We expect the type of `this` to be volatile-qualified.
26
+ return x;
27
+ }
28
+
29
+ int f5 () const volatile {
30
+ // We expect the type of `this` to be qualified as both const and volatile.
31
+ return x;
32
+ }
33
+
34
+ void f6 () {
35
+ // No use of `this`, but we still expect to be able to get its type.
36
+ global++;
37
+ }
38
+ };
39
+
40
+ // We want to test that D* is in the database even when there's no use of it,
41
+ // not even through an implicit dereference of `this`.
42
+ class D {
43
+ void f () {
44
+ global++;
45
+ }
46
+ };
Original file line number Diff line number Diff line change
1
+ thisExprType
2
+ | test.cpp:11:5:11:5 | this | file://:0:0:0:0 | C * |
3
+ | test.cpp:16:5:16:8 | this | file://:0:0:0:0 | C * |
4
+ | test.cpp:21:12:21:12 | this | file://:0:0:0:0 | const C * |
5
+ | test.cpp:26:12:26:12 | this | file://:0:0:0:0 | volatile C * |
6
+ | test.cpp:31:12:31:12 | this | file://:0:0:0:0 | const volatile C * |
7
+ #select
8
+ | test.cpp:9:8:9:9 | f1 | file://:0:0:0:0 | C * |
9
+ | test.cpp:14:8:14:9 | f2 | file://:0:0:0:0 | C * |
10
+ | test.cpp:19:7:19:8 | f3 | file://:0:0:0:0 | const C * |
11
+ | test.cpp:24:7:24:8 | f4 | file://:0:0:0:0 | volatile C * |
12
+ | test.cpp:29:7:29:8 | f5 | file://:0:0:0:0 | const volatile C * |
13
+ | test.cpp:34:8:34:9 | f6 | file://:0:0:0:0 | C * |
14
+ | test.cpp:43:8:43:8 | f | file://:0:0:0:0 | D * |
Original file line number Diff line number Diff line change
1
+ import cpp
2
+
3
+ query predicate thisExprType ( ThisExpr e , Type t ) {
4
+ t = e .getType ( )
5
+ }
6
+
7
+ from MemberFunction f
8
+ select f , f .getTypeOfThis ( )
You can’t perform that action at this time.
0 commit comments