Skip to content

Commit e93598e

Browse files
authored
Merge pull request github#1716 from geoffw0/qldoceg4
CPP: Add syntax examples to QLDoc in Function.qll
2 parents 5e910a4 + e4bbfb9 commit e93598e

File tree

11 files changed

+329
-132
lines changed

11 files changed

+329
-132
lines changed

cpp/ql/src/semmle/code/cpp/Function.qll

Lines changed: 223 additions & 36 deletions
Large diffs are not rendered by default.

cpp/ql/test/library-tests/functions/functions/Functions1.expected

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,10 @@
3232
| functions.cpp:28:3:28:8 | ~Table | ~Table | | | functions.cpp:28:3:28:8 | definition |
3333
| functions.cpp:29:9:29:14 | lookup | lookup | | | functions.cpp:29:9:29:14 | declaration |
3434
| functions.cpp:30:8:30:13 | insert | insert | | | functions.cpp:30:8:30:13 | declaration |
35+
| functions.cpp:33:7:33:7 | operator= | operator= | | | functions.cpp:33:7:33:7 | declaration |
36+
| functions.cpp:33:7:33:7 | operator= | operator= | | | functions.cpp:33:7:33:7 | definition |
37+
| functions.cpp:36:2:36:8 | MyClass | MyClass | | | functions.cpp:36:2:36:8 | declaration |
38+
| functions.cpp:37:2:37:8 | MyClass | MyClass | | | functions.cpp:37:2:37:8 | declaration |
39+
| functions.cpp:38:2:38:8 | MyClass | MyClass | | | functions.cpp:38:2:38:8 | declaration |
40+
| functions.cpp:39:2:39:8 | MyClass | MyClass | | | functions.cpp:39:2:39:8 | declaration |
41+
| functions.cpp:40:2:40:13 | operator int | operator int | | | functions.cpp:40:2:40:13 | declaration |
Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,26 @@
1-
| ODASA-5186.cpp:4:8:4:14 | MyClass<T> | Class | ODASA-5186.cpp:5:8:5:17 | operator== | member function |
2-
| ODASA-5186.cpp:4:8:4:14 | MyClass<int> | Struct | ODASA-5186.cpp:4:8:4:8 | operator= | member function |
3-
| ODASA-5186.cpp:4:8:4:14 | MyClass<int> | Struct | ODASA-5186.cpp:4:8:4:8 | operator= | member function |
4-
| ODASA-5186.cpp:4:8:4:14 | MyClass<int> | Struct | ODASA-5186.cpp:5:8:5:8 | operator== | member function |
5-
| ODASA-5186.hpp:2:8:2:17 | NEQ_helper<MyClass<int>> | Struct | ODASA-5186.hpp:2:8:2:8 | operator= | member function |
6-
| ODASA-5186.hpp:2:8:2:17 | NEQ_helper<MyClass<int>> | Struct | ODASA-5186.hpp:2:8:2:8 | operator= | member function |
7-
| file://:0:0:0:0 | __va_list_tag | Struct | file://:0:0:0:0 | operator= | member function |
8-
| file://:0:0:0:0 | __va_list_tag | Struct | file://:0:0:0:0 | operator= | member function |
9-
| functions.cpp:7:8:7:8 | A | Struct | functions.cpp:7:8:7:8 | operator= | member function |
10-
| functions.cpp:7:8:7:8 | A | Struct | functions.cpp:7:8:7:8 | operator= | member function |
11-
| functions.cpp:7:8:7:8 | A | Struct | functions.cpp:8:7:8:8 | af | member function |
12-
| functions.cpp:7:8:7:8 | A | Struct | functions.cpp:11:7:11:8 | ag | member function |
13-
| functions.cpp:19:7:19:10 | Name | Class | functions.cpp:19:7:19:7 | operator= | member function |
14-
| functions.cpp:19:7:19:10 | Name | Class | functions.cpp:19:7:19:7 | operator= | member function |
15-
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:23:7:23:7 | Table | constructor |
16-
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:23:7:23:7 | Table | member function |
17-
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:23:7:23:7 | operator= | member function |
18-
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:27:3:27:7 | Table | constructor |
19-
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:27:3:27:7 | Table | member function |
20-
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:28:3:28:8 | ~Table | destructor |
21-
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:28:3:28:8 | ~Table | member function |
22-
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:29:9:29:14 | lookup | member function |
23-
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:30:8:30:13 | insert | member function |
1+
| ODASA-5186.cpp:4:8:4:14 | MyClass<T> | Class | ODASA-5186.cpp:5:8:5:17 | operator== | |
2+
| ODASA-5186.cpp:4:8:4:14 | MyClass<int> | Struct | ODASA-5186.cpp:4:8:4:8 | operator= | |
3+
| ODASA-5186.cpp:4:8:4:14 | MyClass<int> | Struct | ODASA-5186.cpp:4:8:4:8 | operator= | |
4+
| ODASA-5186.cpp:4:8:4:14 | MyClass<int> | Struct | ODASA-5186.cpp:5:8:5:8 | operator== | |
5+
| ODASA-5186.hpp:2:8:2:17 | NEQ_helper<MyClass<int>> | Struct | ODASA-5186.hpp:2:8:2:8 | operator= | |
6+
| ODASA-5186.hpp:2:8:2:17 | NEQ_helper<MyClass<int>> | Struct | ODASA-5186.hpp:2:8:2:8 | operator= | |
7+
| file://:0:0:0:0 | __va_list_tag | Struct | file://:0:0:0:0 | operator= | |
8+
| file://:0:0:0:0 | __va_list_tag | Struct | file://:0:0:0:0 | operator= | |
9+
| functions.cpp:7:8:7:8 | A | Struct | functions.cpp:7:8:7:8 | operator= | |
10+
| functions.cpp:7:8:7:8 | A | Struct | functions.cpp:7:8:7:8 | operator= | |
11+
| functions.cpp:7:8:7:8 | A | Struct | functions.cpp:8:7:8:8 | af | |
12+
| functions.cpp:7:8:7:8 | A | Struct | functions.cpp:11:7:11:8 | ag | |
13+
| functions.cpp:19:7:19:10 | Name | Class | functions.cpp:19:7:19:7 | operator= | |
14+
| functions.cpp:19:7:19:10 | Name | Class | functions.cpp:19:7:19:7 | operator= | |
15+
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:23:7:23:7 | Table | Constructor, CopyConstructor, getAConstructor() |
16+
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:23:7:23:7 | operator= | |
17+
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:27:3:27:7 | Table | Constructor, getAConstructor() |
18+
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:28:3:28:8 | ~Table | Destructor, getDestructor() |
19+
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:29:9:29:14 | lookup | |
20+
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:30:8:30:13 | insert | |
21+
| functions.cpp:33:7:33:13 | MyClass | Class | functions.cpp:33:7:33:7 | operator= | |
22+
| functions.cpp:33:7:33:13 | MyClass | Class | functions.cpp:36:2:36:8 | MyClass | Constructor, NoArgConstructor, getAConstructor() |
23+
| functions.cpp:33:7:33:13 | MyClass | Class | functions.cpp:37:2:37:8 | MyClass | Constructor, ConversionConstructor, getAConstructor() |
24+
| functions.cpp:33:7:33:13 | MyClass | Class | functions.cpp:38:2:38:8 | MyClass | Constructor, CopyConstructor, getAConstructor() |
25+
| functions.cpp:33:7:33:13 | MyClass | Class | functions.cpp:39:2:39:8 | MyClass | Constructor, ConversionConstructor, MoveConstructor, getAConstructor() |
26+
| functions.cpp:33:7:33:13 | MyClass | Class | functions.cpp:40:2:40:13 | operator int | ConversionOperator |

cpp/ql/test/library-tests/functions/functions/Functions2.ql

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,41 @@
44
*/
55
import cpp
66

7-
from Class c, string ctype, MemberFunction f, string ftype
8-
where
9-
if c instanceof Struct then ctype = "Struct" else ctype = "Class" and
7+
bindingset[c, f] string describe(Class c, MemberFunction f)
8+
{
109
(
11-
(f = c.getAConstructor() and ftype = "constructor") or
12-
(f = c.getDestructor() and ftype = "destructor") or
13-
(f.getDeclaringType() = c and ftype = "member function")
10+
f = c.getAConstructor() and
11+
result = "getAConstructor()"
12+
) or (
13+
f = c.getDestructor() and
14+
result = "getDestructor()"
15+
) or (
16+
f instanceof Constructor and
17+
result = "Constructor"
18+
) or (
19+
f instanceof Destructor and
20+
result = "Destructor"
21+
) or (
22+
f instanceof ConversionConstructor and
23+
result = "ConversionConstructor"
24+
) or (
25+
f instanceof CopyConstructor and
26+
result = "CopyConstructor"
27+
) or (
28+
f instanceof MoveConstructor and
29+
result = "MoveConstructor"
30+
) or (
31+
f instanceof NoArgConstructor and
32+
result = "NoArgConstructor"
33+
) or (
34+
f instanceof ConversionOperator and
35+
result = "ConversionOperator"
1436
)
15-
select c, ctype, f, ftype
37+
}
38+
39+
from Class c, string ctype, MemberFunction f
40+
where
41+
f.getDeclaringType() = c and
42+
if c instanceof Struct then ctype = "Struct" else ctype = "Class"
43+
select
44+
c, ctype, f, concat(describe(c, f), ", ")

cpp/ql/test/library-tests/functions/functions/functions.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,12 @@ class Table {
3030
bool insert(Name*);
3131
};
3232

33-
33+
class MyClass
34+
{
35+
public:
36+
MyClass();
37+
MyClass(int from);
38+
MyClass(const MyClass &from);
39+
MyClass(MyClass &&from);
40+
operator int();
41+
};
Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,16 @@
1-
| virtual_functions.cpp:4:15:4:28 | withunusedpara | virtual_functions.cpp:1:7:1:7 | A | 2 | 0 | <none> |
2-
| virtual_functions.cpp:5:15:5:28 | withunusedpara | virtual_functions.cpp:1:7:1:7 | A | 2 | 0 | <none> |
3-
| virtual_functions.cpp:11:15:11:28 | withunusedpara | virtual_functions.cpp:8:7:8:8 | B1 | 0 | 1 | A |
4-
| virtual_functions.cpp:15:15:15:28 | withunusedpara | virtual_functions.cpp:8:7:8:8 | B1 | 0 | 1 | A |
5-
| virtual_functions.cpp:24:15:24:28 | withunusedpara | virtual_functions.cpp:21:7:21:8 | B2 | 0 | 1 | A |
6-
| virtual_functions.cpp:28:15:28:28 | withunusedpara | virtual_functions.cpp:21:7:21:8 | B2 | 0 | 1 | A |
7-
| virtual_functions.cpp:34:26:34:26 | f | virtual_functions.cpp:34:8:34:9 | X1 | 2 | 0 | <none> |
8-
| virtual_functions.cpp:36:23:36:23 | f | virtual_functions.cpp:36:8:36:9 | X3 | 1 | 1 | X1 |
9-
| virtual_functions.cpp:37:23:37:23 | f | virtual_functions.cpp:37:8:37:9 | X4 | 1 | 1 | X1 |
10-
| virtual_functions.cpp:38:27:38:27 | f | virtual_functions.cpp:38:8:38:9 | X5 | 1 | 2 | X3 |
11-
| virtual_functions.cpp:38:27:38:27 | f | virtual_functions.cpp:38:8:38:9 | X5 | 1 | 2 | X4 |
12-
| virtual_functions.cpp:40:23:40:23 | f | virtual_functions.cpp:40:8:40:9 | X7 | 0 | 1 | X5 |
13-
| virtual_functions.cpp:42:26:42:26 | f | virtual_functions.cpp:42:8:42:9 | Y1 | 4 | 0 | <none> |
14-
| virtual_functions.cpp:44:31:44:31 | f | virtual_functions.cpp:44:8:44:9 | Y3 | 1 | 1 | Y1 |
15-
| virtual_functions.cpp:45:31:45:31 | f | virtual_functions.cpp:45:8:45:9 | Y4 | 1 | 1 | Y1 |
16-
| virtual_functions.cpp:46:27:46:27 | f | virtual_functions.cpp:46:8:46:9 | Y5 | 1 | 3 | Y1 |
17-
| virtual_functions.cpp:46:27:46:27 | f | virtual_functions.cpp:46:8:46:9 | Y5 | 1 | 3 | Y3 |
18-
| virtual_functions.cpp:46:27:46:27 | f | virtual_functions.cpp:46:8:46:9 | Y5 | 1 | 3 | Y4 |
19-
| virtual_functions.cpp:48:23:48:23 | f | virtual_functions.cpp:48:8:48:9 | Y7 | 0 | 2 | Y1 |
20-
| virtual_functions.cpp:48:23:48:23 | f | virtual_functions.cpp:48:8:48:9 | Y7 | 0 | 2 | Y5 |
1+
| virtual_functions.cpp:4:15:4:28 | withunusedpara | virtual_functions.cpp:1:7:1:7 | A | B1, B2 | | PureVirtualFunction |
2+
| virtual_functions.cpp:5:15:5:28 | withunusedpara | virtual_functions.cpp:1:7:1:7 | A | B1, B2 | | PureVirtualFunction |
3+
| virtual_functions.cpp:11:15:11:28 | withunusedpara | virtual_functions.cpp:8:7:8:8 | B1 | | A | |
4+
| virtual_functions.cpp:15:15:15:28 | withunusedpara | virtual_functions.cpp:8:7:8:8 | B1 | | A | |
5+
| virtual_functions.cpp:24:15:24:28 | withunusedpara | virtual_functions.cpp:21:7:21:8 | B2 | | A | |
6+
| virtual_functions.cpp:28:15:28:28 | withunusedpara | virtual_functions.cpp:21:7:21:8 | B2 | | A | |
7+
| virtual_functions.cpp:34:26:34:26 | f | virtual_functions.cpp:34:8:34:9 | X1 | X3, X4 | | |
8+
| virtual_functions.cpp:36:23:36:23 | f | virtual_functions.cpp:36:8:36:9 | X3 | X5 | X1 | |
9+
| virtual_functions.cpp:37:23:37:23 | f | virtual_functions.cpp:37:8:37:9 | X4 | X5 | X1 | |
10+
| virtual_functions.cpp:38:27:38:27 | f | virtual_functions.cpp:38:8:38:9 | X5 | X7 | X3, X4 | |
11+
| virtual_functions.cpp:40:23:40:23 | f | virtual_functions.cpp:40:8:40:9 | X7 | | X5 | |
12+
| virtual_functions.cpp:42:26:42:26 | f | virtual_functions.cpp:42:8:42:9 | Y1 | Y3, Y4, Y5, Y7 | | |
13+
| virtual_functions.cpp:44:31:44:31 | f | virtual_functions.cpp:44:8:44:9 | Y3 | Y5 | Y1 | |
14+
| virtual_functions.cpp:45:31:45:31 | f | virtual_functions.cpp:45:8:45:9 | Y4 | Y5 | Y1 | |
15+
| virtual_functions.cpp:46:27:46:27 | f | virtual_functions.cpp:46:8:46:9 | Y5 | Y7 | Y1, Y3, Y4 | |
16+
| virtual_functions.cpp:48:23:48:23 | f | virtual_functions.cpp:48:8:48:9 | Y7 | | Y1, Y5 | |
Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
import cpp
22

3-
from VirtualFunction f, string overriddenFunctionDeclaringType
4-
where if exists(f.getAnOverriddenFunction().getDeclaringType())
5-
then overriddenFunctionDeclaringType = f.getAnOverriddenFunction().getDeclaringType().toString()
6-
else overriddenFunctionDeclaringType = "<none>"
7-
select f,
8-
f.getDeclaringType(),
9-
count(f.getAnOverridingFunction()),
10-
count(f.getAnOverriddenFunction()),
11-
overriddenFunctionDeclaringType
3+
string describe(VirtualFunction f)
4+
{
5+
f instanceof PureVirtualFunction and
6+
result = "PureVirtualFunction"
7+
}
128

9+
from VirtualFunction f
10+
select
11+
f,
12+
f.getDeclaringType(),
13+
concat(f.getAnOverridingFunction().getDeclaringType().toString(), ", "),
14+
concat(f.getAnOverriddenFunction().getDeclaringType().toString(), ", "),
15+
concat(describe(f), ", ")

cpp/ql/test/library-tests/virtual_functions/virtual_functions/VirtualFunctions5.expected

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

cpp/ql/test/library-tests/virtual_functions/virtual_functions/VirtualFunctions5.ql

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

cpp/ql/test/library-tests/virtual_functions/virtual_functions/VirtualFunctions6.expected

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

0 commit comments

Comments
 (0)