Skip to content

Commit e036cd7

Browse files
authored
Merge pull request #1366 from zlaski-semmle/zlaski/tostring-performance
C++: Improve Element::toString() performance
2 parents 813e1e7 + 8c09900 commit e036cd7

File tree

5 files changed

+67
-66
lines changed

5 files changed

+67
-66
lines changed

change-notes/1.21/analysis-cpp.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,5 @@
3939
- The taint tracking library now includes taint-specific edges for functions modeled in `semmle.code.cpp.models.interfaces.DataFlow`.
4040
- The taint tracking library adds flow through library functions that are modeled in `semmle.code.cpp.models.interfaces.Taint`. Queries can add subclasses of `TaintFunction` to specify additional flow.
4141
- There is a new `FoldExpr` class, representing C++17 fold expressions.
42-
- The member predicates `DeclarationEntry.getUnspecifiedType`, `Expr.getUnspecifiedType`, and `Variable.getUnspecifiedType` have been added. These should be preferred over the existing `getUnderlyingType` predicates.
42+
- The member predicates `DeclarationEntry.getUnspecifiedType`, `Expr.getUnspecifiedType`, and `Variable.getUnspecifiedType` have been added. These should be preferred over the existing `getUnderlyingType` predicates.
43+
- The predicate `TypeMention.toString()` has been simplified to always return the string "`type mention`". This may improve performance when using `Element.toString()` or its descendants.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1276,7 +1276,7 @@ private predicate suppressUnusedThis(Type t) { any() }
12761276

12771277
/** A source code location referring to a type */
12781278
class TypeMention extends Locatable, @type_mention {
1279-
override string toString() {result = "mention of " + getMentionedType()}
1279+
override string toString() {result = "type mention"}
12801280

12811281
/**
12821282
* Gets the type being referenced by this type mention.

cpp/ql/test/library-tests/templates/CPP-204/element.expected

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,28 +28,28 @@
2828
| test.cpp:2:12:2:13 | EC |
2929
| test.cpp:2:12:2:13 | definition of EC |
3030
| test.cpp:3:5:3:5 | V |
31-
| test.cpp:6:10:6:11 | mention of EC |
31+
| test.cpp:6:10:6:11 | type mention |
3232
| test.cpp:7:8:7:10 | IsX<X> |
3333
| test.cpp:7:8:7:10 | IsX<X> |
3434
| test.cpp:7:8:7:10 | definition of IsX<X> |
3535
| test.cpp:8:23:8:27 | Value |
3636
| test.cpp:8:23:8:27 | definition of Value |
3737
| test.cpp:8:31:8:35 | 0 |
3838
| test.cpp:8:31:8:35 | initializer for Value |
39-
| test.cpp:11:10:11:11 | mention of EC |
40-
| test.cpp:11:25:11:27 | mention of IsX<X> |
39+
| test.cpp:11:10:11:11 | type mention |
40+
| test.cpp:11:25:11:27 | type mention |
4141
| test.cpp:12:8:12:9 | DX<X, B> |
4242
| test.cpp:12:8:12:9 | definition of DX<X, B> |
4343
| test.cpp:13:17:13:20 | Type |
4444
| test.cpp:13:17:13:20 | declaration of Type |
45-
| test.cpp:16:10:16:11 | mention of EC |
45+
| test.cpp:16:10:16:11 | type mention |
4646
| test.cpp:17:8:17:9 | IX<X> |
4747
| test.cpp:17:8:17:9 | definition of IX<X> |
4848
| test.cpp:18:21:18:25 | Value |
4949
| test.cpp:18:21:18:25 | definition of Value |
5050
| test.cpp:18:29:18:32 | EC:: |
5151
| test.cpp:18:29:18:33 | V |
5252
| test.cpp:18:29:18:33 | initializer for Value |
53-
| test.cpp:21:10:21:11 | mention of EC |
53+
| test.cpp:21:10:21:11 | type mention |
5454
| test.cpp:22:6:22:8 | definition of run |
5555
| test.cpp:22:6:22:8 | run |

cpp/ql/test/library-tests/templates/instantiations_functions/elements.expected

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -362,15 +362,15 @@
362362
| test.cpp:34:6:34:11 | define |
363363
| test.cpp:34:6:34:11 | definition of define |
364364
| test.cpp:34:15:37:1 | { ... } |
365-
| test.cpp:35:5:35:10 | mention of action<actor1<composite<int>>> |
365+
| test.cpp:35:5:35:10 | type mention |
366366
| test.cpp:35:5:35:37 | declaration |
367-
| test.cpp:35:12:35:17 | mention of actor1<composite<int>> |
368-
| test.cpp:35:19:35:27 | mention of composite<int> |
367+
| test.cpp:35:12:35:17 | type mention |
368+
| test.cpp:35:19:35:27 | type mention |
369369
| test.cpp:35:36:35:36 | call to action |
370370
| test.cpp:35:36:35:36 | definition of z |
371371
| test.cpp:35:36:35:36 | initializer for z |
372372
| test.cpp:35:36:35:36 | z |
373-
| test.cpp:36:5:36:8 | mention of rule |
373+
| test.cpp:36:5:36:8 | type mention |
374374
| test.cpp:36:5:36:27 | declaration |
375375
| test.cpp:36:10:36:22 | definition of pp_expression |
376376
| test.cpp:36:10:36:22 | pp_expression |
Lines changed: 55 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
| access.c:11:3:11:3 | mention of s | access.c:7:3:7:3 | s | T |
1+
| access.c:11:3:11:3 | type mention | access.c:7:3:7:3 | s | T |
22
| access.c:13:3:13:8 | global | access.c:2:5:2:10 | global | V |
33
| access.c:15:3:15:6 | my_s | access.c:11:5:11:8 | my_s | V |
44
| access.c:15:8:15:8 | x | access.c:6:8:6:8 | x | V |
@@ -7,49 +7,49 @@
77
| access.c:17:3:17:8 | call to access | access.c:9:6:9:11 | access | M |
88
| access.c:17:10:17:14 | param | access.c:9:17:9:21 | param | V |
99
| access.c:26:23:26:35 | more_accesses | access.c:24:6:24:18 | more_accesses | V |
10-
| access.c:27:3:27:8 | mention of myEnum | access.c:22:3:22:8 | myEnum | T |
10+
| access.c:27:3:27:8 | type mention | access.c:22:3:22:8 | myEnum | T |
1111
| access.c:27:15:27:25 | MYENUMCONST | access.c:21:3:21:13 | MYENUMCONST | V |
1212
| call.c:12:3:12:8 | call to call_f | call.c:4:6:4:11 | call_f | M |
1313
| call.c:14:3:14:7 | f_ptr | call.c:10:10:10:14 | f_ptr | V |
1414
| call.c:14:12:14:17 | call_f | call.c:4:6:4:11 | call_f | V |
1515
| call.c:15:3:15:7 | f_ptr | call.c:10:10:10:14 | f_ptr | V |
1616
| class.cpp:13:33:13:36 | _val | class.cpp:13:21:13:24 | _val | V |
17-
| class.cpp:16:16:16:22 | mention of myClass | class.cpp:2:7:2:13 | myClass | T |
17+
| class.cpp:16:16:16:22 | type mention | class.cpp:2:7:2:13 | myClass | T |
1818
| class.cpp:26:29:26:32 | _val | class.cpp:26:17:26:20 | _val | V |
19-
| class.cpp:35:1:35:14 | mention of myIntContainer | class.cpp:9:7:9:20 | myIntContainer | T |
20-
| class.cpp:36:1:36:12 | mention of myTContainer<char> | class.cpp:23:7:23:18 | myTContainer<char> | T |
21-
| class.cpp:38:30:38:36 | mention of myClass | class.cpp:2:7:2:13 | myClass | T |
22-
| class.cpp:45:2:45:8 | mention of myClass | class.cpp:2:7:2:13 | myClass | T |
23-
| class.cpp:51:2:51:8 | mention of myClass | class.cpp:2:7:2:13 | myClass | T |
24-
| class.cpp:59:2:59:24 | mention of implicitDestructorClass | class.cpp:48:7:48:29 | implicitDestructorClass | T |
25-
| class.cpp:66:2:66:8 | mention of myClass | class.cpp:2:7:2:13 | myClass | T |
19+
| class.cpp:35:1:35:14 | type mention | class.cpp:9:7:9:20 | myIntContainer | T |
20+
| class.cpp:36:1:36:12 | type mention | class.cpp:23:7:23:18 | myTContainer<char> | T |
21+
| class.cpp:38:30:38:36 | type mention | class.cpp:2:7:2:13 | myClass | T |
22+
| class.cpp:45:2:45:8 | type mention | class.cpp:2:7:2:13 | myClass | T |
23+
| class.cpp:51:2:51:8 | type mention | class.cpp:2:7:2:13 | myClass | T |
24+
| class.cpp:59:2:59:24 | type mention | class.cpp:48:7:48:29 | implicitDestructorClass | T |
25+
| class.cpp:66:2:66:8 | type mention | class.cpp:2:7:2:13 | myClass | T |
2626
| class.cpp:68:2:68:3 | mc | class.cpp:66:11:66:12 | mc | V |
27-
| class.cpp:68:11:68:17 | mention of myClass | class.cpp:2:7:2:13 | myClass | T |
27+
| class.cpp:68:11:68:17 | type mention | class.cpp:2:7:2:13 | myClass | T |
2828
| class.cpp:70:9:70:10 | mc | class.cpp:66:11:66:12 | mc | V |
2929
| class.cpp:75:26:75:29 | _num | class.cpp:75:14:75:17 | _num | V |
30-
| class.cpp:77:3:77:8 | mention of Number | class.cpp:73:7:73:12 | Number | T |
31-
| class.cpp:77:26:77:31 | mention of Number | class.cpp:73:7:73:12 | Number | T |
32-
| class.cpp:78:5:78:10 | mention of Number | class.cpp:73:7:73:12 | Number | T |
30+
| class.cpp:77:3:77:8 | type mention | class.cpp:73:7:73:12 | Number | T |
31+
| class.cpp:77:26:77:31 | type mention | class.cpp:73:7:73:12 | Number | T |
32+
| class.cpp:78:5:78:10 | type mention | class.cpp:73:7:73:12 | Number | T |
3333
| class.cpp:78:19:78:21 | num | class.cpp:84:7:84:9 | num | V |
3434
| class.cpp:78:25:78:29 | other | class.cpp:77:34:77:38 | other | V |
3535
| class.cpp:78:31:78:33 | num | class.cpp:84:7:84:9 | num | V |
3636
| class.cpp:80:12:80:17 | result | class.cpp:78:12:78:17 | result | V |
37-
| class.cpp:87:1:87:6 | mention of Number | class.cpp:73:7:73:12 | Number | T |
38-
| class.cpp:89:3:89:8 | mention of Number | class.cpp:73:7:73:12 | Number | T |
37+
| class.cpp:87:1:87:6 | type mention | class.cpp:73:7:73:12 | Number | T |
38+
| class.cpp:89:3:89:8 | type mention | class.cpp:73:7:73:12 | Number | T |
3939
| class.cpp:91:10:91:15 | result | class.cpp:89:10:89:15 | result | V |
4040
| class.cpp:91:17:91:17 | call to operator/ | class.cpp:77:10:77:18 | operator/ | M |
41-
| class.cpp:91:20:91:25 | mention of Number | class.cpp:73:7:73:12 | Number | T |
41+
| class.cpp:91:20:91:25 | type mention | class.cpp:73:7:73:12 | Number | T |
4242
| class.cpp:91:27:91:29 | num | class.cpp:87:17:87:19 | num | V |
43-
| class.cpp:100:24:100:34 | mention of string_type | class.cpp:94:18:94:28 | string_type | T |
44-
| class.cpp:105:1:105:15 | mention of StringContainer | class.cpp:97:7:97:21 | StringContainer | T |
45-
| class.cpp:106:9:106:23 | mention of StringContainer | class.cpp:100:2:100:16 | StringContainer | M |
43+
| class.cpp:100:24:100:34 | type mention | class.cpp:94:18:94:28 | string_type | T |
44+
| class.cpp:105:1:105:15 | type mention | class.cpp:97:7:97:21 | StringContainer | T |
45+
| class.cpp:106:9:106:23 | type mention | class.cpp:100:2:100:16 | StringContainer | M |
4646
| class.cpp:106:25:106:27 | STR(x) | class.cpp:95:1:95:18 | #define STR(x) L ## x | X |
47-
| class.cpp:117:2:117:29 | mention of myClassWithConstructorParams | class.cpp:109:7:109:34 | myClassWithConstructorParams | T |
47+
| class.cpp:117:2:117:29 | type mention | class.cpp:109:7:109:34 | myClassWithConstructorParams | T |
4848
| class.cpp:117:37:117:37 | a | class.cpp:115:27:115:27 | a | V |
4949
| class.cpp:117:40:117:40 | b | class.cpp:115:34:115:34 | b | V |
50-
| class.cpp:118:2:118:29 | mention of myClassWithConstructorParams | class.cpp:109:7:109:34 | myClassWithConstructorParams | T |
50+
| class.cpp:118:2:118:29 | type mention | class.cpp:109:7:109:34 | myClassWithConstructorParams | T |
5151
| class.cpp:119:2:119:4 | ptr | class.cpp:118:32:118:34 | ptr | V |
52-
| class.cpp:119:12:119:39 | mention of myClassWithConstructorParams | class.cpp:109:7:109:34 | myClassWithConstructorParams | T |
52+
| class.cpp:119:12:119:39 | type mention | class.cpp:109:7:109:34 | myClassWithConstructorParams | T |
5353
| class.cpp:119:41:119:41 | a | class.cpp:115:27:115:27 | a | V |
5454
| class.cpp:119:44:119:44 | b | class.cpp:115:34:115:34 | b | V |
5555
| include.c:2:10:2:20 | #include "include.h" | include.h:0:0:0:0 | include.h | I |
@@ -59,56 +59,56 @@
5959
| macros.c:11:5:11:11 | fgmacro(x) | macros.c:9:1:9:29 | #define fgmacro(x) f(x); g(x) | X |
6060
| macros.c:15:1:15:2 | MM(name) | macros.c:14:1:14:38 | #define MM(name) extern int name (int) | X |
6161
| overload.cpp:5:22:5:23 | _v | overload.cpp:5:14:5:15 | _v | V |
62-
| overload.cpp:6:16:6:22 | mention of MyValue | overload.cpp:2:7:2:13 | MyValue | T |
62+
| overload.cpp:6:16:6:22 | type mention | overload.cpp:2:7:2:13 | MyValue | T |
6363
| overload.cpp:6:36:6:40 | other | overload.cpp:6:25:6:29 | other | V |
6464
| overload.cpp:6:42:6:42 | v | overload.cpp:22:6:22:6 | v | V |
65-
| overload.cpp:8:2:8:8 | mention of MyValue | overload.cpp:2:7:2:13 | MyValue | T |
66-
| overload.cpp:8:27:8:33 | mention of MyValue | overload.cpp:2:7:2:13 | MyValue | T |
65+
| overload.cpp:8:2:8:8 | type mention | overload.cpp:2:7:2:13 | MyValue | T |
66+
| overload.cpp:8:27:8:33 | type mention | overload.cpp:2:7:2:13 | MyValue | T |
6767
| overload.cpp:10:3:10:3 | v | overload.cpp:22:6:22:6 | v | V |
6868
| overload.cpp:10:7:10:11 | other | overload.cpp:8:36:8:40 | other | V |
6969
| overload.cpp:10:13:10:13 | v | overload.cpp:22:6:22:6 | v | V |
70-
| overload.cpp:15:2:15:8 | mention of MyValue | overload.cpp:2:7:2:13 | MyValue | T |
71-
| overload.cpp:17:3:17:9 | mention of MyValue | overload.cpp:2:7:2:13 | MyValue | T |
70+
| overload.cpp:15:2:15:8 | type mention | overload.cpp:2:7:2:13 | MyValue | T |
71+
| overload.cpp:17:3:17:9 | type mention | overload.cpp:2:7:2:13 | MyValue | T |
7272
| overload.cpp:18:3:18:3 | v | overload.cpp:22:6:22:6 | v | V |
7373
| overload.cpp:19:10:19:13 | temp | overload.cpp:17:11:17:14 | temp | V |
74-
| overload.cpp:27:2:27:8 | mention of MyValue | overload.cpp:2:7:2:13 | MyValue | T |
74+
| overload.cpp:27:2:27:8 | type mention | overload.cpp:2:7:2:13 | MyValue | T |
7575
| overload.cpp:27:20:27:20 | x | overload.cpp:27:10:27:10 | x | V |
76-
| overload.cpp:28:2:28:8 | mention of MyValue | overload.cpp:2:7:2:13 | MyValue | T |
77-
| overload.cpp:28:12:28:18 | mention of MyValue | overload.cpp:2:7:2:13 | MyValue | T |
76+
| overload.cpp:28:2:28:8 | type mention | overload.cpp:2:7:2:13 | MyValue | T |
77+
| overload.cpp:28:12:28:18 | type mention | overload.cpp:2:7:2:13 | MyValue | T |
7878
| overload.cpp:30:2:30:2 | y | overload.cpp:27:16:27:16 | y | V |
7979
| overload.cpp:30:4:30:4 | call to operator= | overload.cpp:8:11:8:19 | operator= | M |
8080
| overload.cpp:30:6:30:6 | call to operator* | overload.cpp:15:10:15:18 | operator* | M |
8181
| overload.cpp:30:7:30:7 | call to operator* | overload.cpp:15:10:15:18 | operator* | M |
8282
| overload.cpp:30:8:30:8 | call to operator* | overload.cpp:15:10:15:18 | operator* | M |
8383
| overload.cpp:30:9:30:9 | x | overload.cpp:27:10:27:10 | x | V |
84-
| type_mentions.cpp:2:9:2:16 | mention of MyClass1 | type_mentions.cpp:1:7:1:14 | MyClass1 | T |
85-
| type_mentions.cpp:7:2:7:9 | mention of MyClass1 | type_mentions.cpp:1:7:1:14 | MyClass1 | T |
86-
| type_mentions.cpp:8:2:8:8 | mention of MyType1 | type_mentions.cpp:2:18:2:24 | MyType1 | T |
84+
| type_mentions.cpp:2:9:2:16 | type mention | type_mentions.cpp:1:7:1:14 | MyClass1 | T |
85+
| type_mentions.cpp:7:2:7:9 | type mention | type_mentions.cpp:1:7:1:14 | MyClass1 | T |
86+
| type_mentions.cpp:8:2:8:8 | type mention | type_mentions.cpp:2:18:2:24 | MyType1 | T |
8787
| type_mentions.cpp:9:2:9:7 | MYTYPE | type_mentions.cpp:3:1:3:22 | #define MYTYPE MyType1 | X |
88-
| type_mentions.cpp:18:8:18:15 | mention of MyClass2<1> | type_mentions.cpp:14:7:14:14 | MyClass2<1> | T |
89-
| type_mentions.cpp:18:24:18:31 | mention of MyClass1 | type_mentions.cpp:1:7:1:14 | MyClass1 | T |
90-
| type_mentions.cpp:27:3:27:11 | mention of MyStruct1 | type_mentions.cpp:21:10:21:18 | MyStruct1 | T |
91-
| type_mentions.cpp:35:1:35:14 | mention of BinaryTemplate<MyClass1, MyStruct1> | type_mentions.cpp:31:7:31:20 | BinaryTemplate<MyClass1, MyStruct1> | T |
92-
| type_mentions.cpp:35:16:35:23 | mention of MyClass1 | type_mentions.cpp:1:7:1:14 | MyClass1 | T |
93-
| type_mentions.cpp:35:40:35:48 | mention of MyStruct1 | type_mentions.cpp:21:10:21:18 | MyStruct1 | T |
94-
| type_mentions.cpp:39:24:39:32 | mention of MyStruct1 | type_mentions.cpp:21:10:21:18 | MyStruct1 | T |
95-
| type_mentions.cpp:43:8:43:15 | mention of MyClass3 | type_mentions.cpp:37:7:37:14 | MyClass3 | T |
96-
| type_mentions.cpp:43:18:43:33 | mention of MyTypedefStruct1 | type_mentions.cpp:39:34:39:49 | MyTypedefStruct1 | T |
97-
| type_mentions.cpp:45:18:45:25 | mention of MyClass3 | type_mentions.cpp:37:7:37:14 | MyClass3 | T |
98-
| type_mentions.cpp:52:2:52:9 | mention of MyClass1 | type_mentions.cpp:1:7:1:14 | MyClass1 | T |
99-
| type_mentions.cpp:53:2:53:9 | mention of MyClass3 | type_mentions.cpp:37:7:37:14 | MyClass3 | T |
100-
| type_mentions.cpp:57:2:57:8 | mention of MyUnion | type_mentions.cpp:51:7:51:13 | MyUnion | T |
88+
| type_mentions.cpp:18:8:18:15 | type mention | type_mentions.cpp:14:7:14:14 | MyClass2<1> | T |
89+
| type_mentions.cpp:18:24:18:31 | type mention | type_mentions.cpp:1:7:1:14 | MyClass1 | T |
90+
| type_mentions.cpp:27:3:27:11 | type mention | type_mentions.cpp:21:10:21:18 | MyStruct1 | T |
91+
| type_mentions.cpp:35:1:35:14 | type mention | type_mentions.cpp:31:7:31:20 | BinaryTemplate<MyClass1, MyStruct1> | T |
92+
| type_mentions.cpp:35:16:35:23 | type mention | type_mentions.cpp:1:7:1:14 | MyClass1 | T |
93+
| type_mentions.cpp:35:40:35:48 | type mention | type_mentions.cpp:21:10:21:18 | MyStruct1 | T |
94+
| type_mentions.cpp:39:24:39:32 | type mention | type_mentions.cpp:21:10:21:18 | MyStruct1 | T |
95+
| type_mentions.cpp:43:8:43:15 | type mention | type_mentions.cpp:37:7:37:14 | MyClass3 | T |
96+
| type_mentions.cpp:43:18:43:33 | type mention | type_mentions.cpp:39:34:39:49 | MyTypedefStruct1 | T |
97+
| type_mentions.cpp:45:18:45:25 | type mention | type_mentions.cpp:37:7:37:14 | MyClass3 | T |
98+
| type_mentions.cpp:52:2:52:9 | type mention | type_mentions.cpp:1:7:1:14 | MyClass1 | T |
99+
| type_mentions.cpp:53:2:53:9 | type mention | type_mentions.cpp:37:7:37:14 | MyClass3 | T |
100+
| type_mentions.cpp:57:2:57:8 | type mention | type_mentions.cpp:51:7:51:13 | MyUnion | T |
101101
| type_mentions.cpp:58:2:58:3 | un | type_mentions.cpp:57:10:57:11 | un | V |
102102
| type_mentions.cpp:58:5:58:10 | myVal1 | type_mentions.cpp:52:11:52:16 | myVal1 | V |
103103
| type_mentions.cpp:58:14:58:15 | un | type_mentions.cpp:57:10:57:11 | un | V |
104104
| type_mentions.cpp:58:17:58:22 | myVal1 | type_mentions.cpp:52:11:52:16 | myVal1 | V |
105-
| type_mentions.cpp:60:2:60:7 | mention of MyEnum | type_mentions.cpp:47:6:47:11 | MyEnum | T |
105+
| type_mentions.cpp:60:2:60:7 | type mention | type_mentions.cpp:47:6:47:11 | MyEnum | T |
106106
| type_mentions.cpp:60:14:60:22 | myEnumVal | type_mentions.cpp:48:2:48:10 | myEnumVal | V |
107-
| type_mentions.cpp:62:2:62:8 | mention of MyType1 | type_mentions.cpp:2:18:2:24 | MyType1 | T |
108-
| type_mentions.cpp:62:19:62:25 | mention of MyType1 | type_mentions.cpp:2:18:2:24 | MyType1 | T |
109-
| type_mentions.cpp:63:2:63:8 | mention of MyType1 | type_mentions.cpp:2:18:2:24 | MyType1 | T |
110-
| type_mentions.cpp:63:22:63:28 | mention of MyType1 | type_mentions.cpp:2:18:2:24 | MyType1 | T |
107+
| type_mentions.cpp:62:2:62:8 | type mention | type_mentions.cpp:2:18:2:24 | MyType1 | T |
108+
| type_mentions.cpp:62:19:62:25 | type mention | type_mentions.cpp:2:18:2:24 | MyType1 | T |
109+
| type_mentions.cpp:63:2:63:8 | type mention | type_mentions.cpp:2:18:2:24 | MyType1 | T |
110+
| type_mentions.cpp:63:22:63:28 | type mention | type_mentions.cpp:2:18:2:24 | MyType1 | T |
111111
| type_mentions.cpp:65:2:65:3 | en | type_mentions.cpp:60:9:60:10 | en | V |
112-
| type_mentions.cpp:65:8:65:13 | mention of MyEnum | type_mentions.cpp:47:6:47:11 | MyEnum | T |
113-
| type_mentions.cpp:74:25:74:31 | mention of MyType1 | type_mentions.cpp:2:18:2:24 | MyType1 | T |
114-
| type_mentions.cpp:78:1:78:7 | mention of MyType1 | type_mentions.cpp:2:18:2:24 | MyType1 | T |
112+
| type_mentions.cpp:65:8:65:13 | type mention | type_mentions.cpp:47:6:47:11 | MyEnum | T |
113+
| type_mentions.cpp:74:25:74:31 | type mention | type_mentions.cpp:2:18:2:24 | MyType1 | T |
114+
| type_mentions.cpp:78:1:78:7 | type mention | type_mentions.cpp:2:18:2:24 | MyType1 | T |

0 commit comments

Comments
 (0)