Merge branch 'main' into rust-data-flow-split

This commit is contained in:
Simon Friis Vindum
2025-03-14 09:58:46 +01:00
105 changed files with 4694 additions and 354 deletions

View File

@@ -1 +1 @@
| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:14:10:30 | GenericParamList |
| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:14:10:30 | <...> |

View File

@@ -4,7 +4,7 @@
| utf8_identifiers.rs:1:1:4:6 | fn foo |
| utf8_identifiers.rs:1:1:12:2 | SourceFile |
| utf8_identifiers.rs:1:4:1:6 | foo |
| utf8_identifiers.rs:1:7:4:1 | GenericParamList |
| utf8_identifiers.rs:1:7:4:1 | <...> |
| utf8_identifiers.rs:2:5:2:6 | ''\u03b2 |
| utf8_identifiers.rs:2:5:2:6 | LifetimeParam |
| utf8_identifiers.rs:3:5:3:5 | \u03b3 |

View File

@@ -60,28 +60,21 @@ edges
| main.rs:134:24:134:33 | source(...) | main.rs:134:13:134:34 | ...::new(...) [MyInt] | provenance | |
| main.rs:135:9:135:26 | MyInt {...} [MyInt] | main.rs:135:24:135:24 | m | provenance | |
| main.rs:135:24:135:24 | m | main.rs:136:10:136:10 | m | provenance | |
| main.rs:175:18:175:21 | SelfParam [MyInt] | main.rs:175:48:177:5 | { ... } [MyInt] | provenance | |
| main.rs:179:26:179:37 | ...: MyInt [MyInt] | main.rs:179:49:181:5 | { ... } [MyInt] | provenance | |
| main.rs:185:9:185:9 | a [MyInt] | main.rs:187:49:187:49 | a [MyInt] | provenance | |
| main.rs:185:13:185:38 | MyInt {...} [MyInt] | main.rs:185:9:185:9 | a [MyInt] | provenance | |
| main.rs:185:28:185:36 | source(...) | main.rs:185:13:185:38 | MyInt {...} [MyInt] | provenance | |
| main.rs:187:9:187:26 | MyInt {...} [MyInt] | main.rs:187:24:187:24 | c | provenance | |
| main.rs:187:24:187:24 | c | main.rs:188:10:188:10 | c | provenance | |
| main.rs:187:30:187:53 | ...::take_self(...) [MyInt] | main.rs:187:9:187:26 | MyInt {...} [MyInt] | provenance | |
| main.rs:187:49:187:49 | a [MyInt] | main.rs:175:18:175:21 | SelfParam [MyInt] | provenance | |
| main.rs:187:49:187:49 | a [MyInt] | main.rs:187:30:187:53 | ...::take_self(...) [MyInt] | provenance | |
| main.rs:191:9:191:9 | b [MyInt] | main.rs:192:54:192:54 | b [MyInt] | provenance | |
| main.rs:191:13:191:39 | MyInt {...} [MyInt] | main.rs:191:9:191:9 | b [MyInt] | provenance | |
| main.rs:191:28:191:37 | source(...) | main.rs:191:13:191:39 | MyInt {...} [MyInt] | provenance | |
| main.rs:192:9:192:26 | MyInt {...} [MyInt] | main.rs:192:24:192:24 | c | provenance | |
| main.rs:192:24:192:24 | c | main.rs:193:10:193:10 | c | provenance | |
| main.rs:192:30:192:55 | ...::take_second(...) [MyInt] | main.rs:192:9:192:26 | MyInt {...} [MyInt] | provenance | |
| main.rs:192:54:192:54 | b [MyInt] | main.rs:179:26:179:37 | ...: MyInt [MyInt] | provenance | |
| main.rs:192:54:192:54 | b [MyInt] | main.rs:192:30:192:55 | ...::take_second(...) [MyInt] | provenance | |
| main.rs:202:9:202:9 | a | main.rs:203:10:203:10 | a | provenance | |
| main.rs:202:13:202:21 | source(...) | main.rs:202:9:202:9 | a | provenance | |
| main.rs:212:13:212:13 | c | main.rs:213:14:213:14 | c | provenance | |
| main.rs:212:17:212:25 | source(...) | main.rs:212:13:212:13 | c | provenance | |
| main.rs:142:12:142:15 | SelfParam [MyInt] | main.rs:144:24:144:27 | self [MyInt] | provenance | |
| main.rs:144:9:144:35 | MyInt {...} [MyInt] | main.rs:142:42:145:5 | { ... } [MyInt] | provenance | |
| main.rs:144:24:144:27 | self [MyInt] | main.rs:144:24:144:33 | self.value | provenance | |
| main.rs:144:24:144:33 | self.value | main.rs:144:9:144:35 | MyInt {...} [MyInt] | provenance | |
| main.rs:159:9:159:9 | a [MyInt] | main.rs:142:12:142:15 | SelfParam [MyInt] | provenance | |
| main.rs:159:9:159:9 | a [MyInt] | main.rs:161:13:161:20 | a.add(...) [MyInt] | provenance | |
| main.rs:159:13:159:38 | MyInt {...} [MyInt] | main.rs:159:9:159:9 | a [MyInt] | provenance | |
| main.rs:159:28:159:36 | source(...) | main.rs:159:13:159:38 | MyInt {...} [MyInt] | provenance | |
| main.rs:161:9:161:9 | d [MyInt] | main.rs:162:10:162:10 | d [MyInt] | provenance | |
| main.rs:161:13:161:20 | a.add(...) [MyInt] | main.rs:161:9:161:9 | d [MyInt] | provenance | |
| main.rs:162:10:162:10 | d [MyInt] | main.rs:162:10:162:16 | d.value | provenance | |
| main.rs:201:9:201:9 | a | main.rs:202:10:202:10 | a | provenance | |
| main.rs:201:13:201:21 | source(...) | main.rs:201:9:201:9 | a | provenance | |
| main.rs:211:13:211:13 | c | main.rs:212:14:212:14 | c | provenance | |
| main.rs:211:17:211:25 | source(...) | main.rs:211:13:211:13 | c | provenance | |
nodes
| main.rs:12:28:14:1 | { ... } | semmle.label | { ... } |
| main.rs:13:5:13:13 | source(...) | semmle.label | source(...) |
@@ -151,32 +144,24 @@ nodes
| main.rs:135:9:135:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
| main.rs:135:24:135:24 | m | semmle.label | m |
| main.rs:136:10:136:10 | m | semmle.label | m |
| main.rs:175:18:175:21 | SelfParam [MyInt] | semmle.label | SelfParam [MyInt] |
| main.rs:175:48:177:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] |
| main.rs:179:26:179:37 | ...: MyInt [MyInt] | semmle.label | ...: MyInt [MyInt] |
| main.rs:179:49:181:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] |
| main.rs:185:9:185:9 | a [MyInt] | semmle.label | a [MyInt] |
| main.rs:185:13:185:38 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
| main.rs:185:28:185:36 | source(...) | semmle.label | source(...) |
| main.rs:187:9:187:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
| main.rs:187:24:187:24 | c | semmle.label | c |
| main.rs:187:30:187:53 | ...::take_self(...) [MyInt] | semmle.label | ...::take_self(...) [MyInt] |
| main.rs:187:49:187:49 | a [MyInt] | semmle.label | a [MyInt] |
| main.rs:188:10:188:10 | c | semmle.label | c |
| main.rs:191:9:191:9 | b [MyInt] | semmle.label | b [MyInt] |
| main.rs:191:13:191:39 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
| main.rs:191:28:191:37 | source(...) | semmle.label | source(...) |
| main.rs:192:9:192:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
| main.rs:192:24:192:24 | c | semmle.label | c |
| main.rs:192:30:192:55 | ...::take_second(...) [MyInt] | semmle.label | ...::take_second(...) [MyInt] |
| main.rs:192:54:192:54 | b [MyInt] | semmle.label | b [MyInt] |
| main.rs:193:10:193:10 | c | semmle.label | c |
| main.rs:202:9:202:9 | a | semmle.label | a |
| main.rs:202:13:202:21 | source(...) | semmle.label | source(...) |
| main.rs:203:10:203:10 | a | semmle.label | a |
| main.rs:212:13:212:13 | c | semmle.label | c |
| main.rs:212:17:212:25 | source(...) | semmle.label | source(...) |
| main.rs:213:14:213:14 | c | semmle.label | c |
| main.rs:142:12:142:15 | SelfParam [MyInt] | semmle.label | SelfParam [MyInt] |
| main.rs:142:42:145:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] |
| main.rs:144:9:144:35 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
| main.rs:144:24:144:27 | self [MyInt] | semmle.label | self [MyInt] |
| main.rs:144:24:144:33 | self.value | semmle.label | self.value |
| main.rs:159:9:159:9 | a [MyInt] | semmle.label | a [MyInt] |
| main.rs:159:13:159:38 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
| main.rs:159:28:159:36 | source(...) | semmle.label | source(...) |
| main.rs:161:9:161:9 | d [MyInt] | semmle.label | d [MyInt] |
| main.rs:161:13:161:20 | a.add(...) [MyInt] | semmle.label | a.add(...) [MyInt] |
| main.rs:162:10:162:10 | d [MyInt] | semmle.label | d [MyInt] |
| main.rs:162:10:162:16 | d.value | semmle.label | d.value |
| main.rs:201:9:201:9 | a | semmle.label | a |
| main.rs:201:13:201:21 | source(...) | semmle.label | source(...) |
| main.rs:202:10:202:10 | a | semmle.label | a |
| main.rs:211:13:211:13 | c | semmle.label | c |
| main.rs:211:17:211:25 | source(...) | semmle.label | source(...) |
| main.rs:212:14:212:14 | c | semmle.label | c |
subpaths
| main.rs:36:26:36:26 | a | main.rs:30:17:30:22 | ...: i64 | main.rs:30:32:32:1 | { ... } | main.rs:36:13:36:27 | pass_through(...) |
| main.rs:41:26:44:5 | { ... } | main.rs:30:17:30:22 | ...: i64 | main.rs:30:32:32:1 | { ... } | main.rs:41:13:44:6 | pass_through(...) |
@@ -184,8 +169,7 @@ subpaths
| main.rs:103:29:103:29 | a | main.rs:79:27:79:32 | ...: i64 | main.rs:79:42:85:5 | { ... } | main.rs:103:13:103:30 | mn.data_through(...) |
| main.rs:116:38:116:38 | a | main.rs:79:27:79:32 | ...: i64 | main.rs:79:42:85:5 | { ... } | main.rs:116:13:116:39 | ...::data_through(...) |
| main.rs:134:24:134:33 | source(...) | main.rs:128:12:128:17 | ...: i64 | main.rs:128:28:130:5 | { ... } [MyInt] | main.rs:134:13:134:34 | ...::new(...) [MyInt] |
| main.rs:187:49:187:49 | a [MyInt] | main.rs:175:18:175:21 | SelfParam [MyInt] | main.rs:175:48:177:5 | { ... } [MyInt] | main.rs:187:30:187:53 | ...::take_self(...) [MyInt] |
| main.rs:192:54:192:54 | b [MyInt] | main.rs:179:26:179:37 | ...: MyInt [MyInt] | main.rs:179:49:181:5 | { ... } [MyInt] | main.rs:192:30:192:55 | ...::take_second(...) [MyInt] |
| main.rs:159:9:159:9 | a [MyInt] | main.rs:142:12:142:15 | SelfParam [MyInt] | main.rs:142:42:145:5 | { ... } [MyInt] | main.rs:161:13:161:20 | a.add(...) [MyInt] |
testFailures
#select
| main.rs:18:10:18:10 | a | main.rs:13:5:13:13 | source(...) | main.rs:18:10:18:10 | a | $@ | main.rs:13:5:13:13 | source(...) | source(...) |
@@ -199,7 +183,6 @@ testFailures
| main.rs:104:10:104:10 | b | main.rs:102:13:102:21 | source(...) | main.rs:104:10:104:10 | b | $@ | main.rs:102:13:102:21 | source(...) | source(...) |
| main.rs:117:10:117:10 | b | main.rs:115:13:115:22 | source(...) | main.rs:117:10:117:10 | b | $@ | main.rs:115:13:115:22 | source(...) | source(...) |
| main.rs:136:10:136:10 | m | main.rs:134:24:134:33 | source(...) | main.rs:136:10:136:10 | m | $@ | main.rs:134:24:134:33 | source(...) | source(...) |
| main.rs:188:10:188:10 | c | main.rs:185:28:185:36 | source(...) | main.rs:188:10:188:10 | c | $@ | main.rs:185:28:185:36 | source(...) | source(...) |
| main.rs:193:10:193:10 | c | main.rs:191:28:191:37 | source(...) | main.rs:193:10:193:10 | c | $@ | main.rs:191:28:191:37 | source(...) | source(...) |
| main.rs:203:10:203:10 | a | main.rs:202:13:202:21 | source(...) | main.rs:203:10:203:10 | a | $@ | main.rs:202:13:202:21 | source(...) | source(...) |
| main.rs:213:14:213:14 | c | main.rs:212:17:212:25 | source(...) | main.rs:213:14:213:14 | c | $@ | main.rs:212:17:212:25 | source(...) | source(...) |
| main.rs:162:10:162:16 | d.value | main.rs:159:28:159:36 | source(...) | main.rs:162:10:162:16 | d.value | $@ | main.rs:159:28:159:36 | source(...) | source(...) |
| main.rs:202:10:202:10 | a | main.rs:201:13:201:21 | source(...) | main.rs:202:10:202:10 | a | $@ | main.rs:201:13:201:21 | source(...) | source(...) |
| main.rs:212:14:212:14 | c | main.rs:211:17:211:25 | source(...) | main.rs:212:14:212:14 | c | $@ | main.rs:211:17:211:25 | source(...) | source(...) |

View File

@@ -159,8 +159,7 @@ fn test_operator_overloading() {
let a = MyInt { value: source(7) };
let b = MyInt { value: 2 };
let d = a.add(b);
sink(d.value); // $ MISSING: hasValueFlow=7
sink(d.value); // $ hasValueFlow=7
}
trait MyTrait {
@@ -185,12 +184,12 @@ fn data_through_trait_method_called_as_function() {
let a = MyInt { value: source(8) };
let b = MyInt { value: 2 };
let MyInt { value: c } = MyTrait::take_self(a, b);
sink(c); // $ hasValueFlow=8
sink(c); // $ MISSING: hasValueFlow=8
let a = MyInt { value: 0 };
let b = MyInt { value: source(37) };
let MyInt { value: c } = MyTrait::take_second(a, b);
sink(c); // $ hasValueFlow=37
sink(c); // $ MISSING: hasValueFlow=37
let a = MyInt { value: 0 };
let b = MyInt { value: source(38) };

View File

@@ -37,31 +37,28 @@
| main.rs:159:28:159:36 | source(...) | main.rs:1:1:3:1 | fn source |
| main.rs:161:13:161:20 | a.add(...) | main.rs:142:5:145:5 | fn add |
| main.rs:162:5:162:17 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:185:28:185:36 | source(...) | main.rs:1:1:3:1 | fn source |
| main.rs:187:30:187:53 | ...::take_self(...) | main.rs:175:5:177:5 | fn take_self |
| main.rs:188:5:188:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:191:28:191:37 | source(...) | main.rs:1:1:3:1 | fn source |
| main.rs:192:30:192:55 | ...::take_second(...) | main.rs:179:5:181:5 | fn take_second |
| main.rs:193:5:193:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:196:28:196:37 | source(...) | main.rs:1:1:3:1 | fn source |
| main.rs:197:30:197:53 | ...::take_self(...) | main.rs:175:5:177:5 | fn take_self |
| main.rs:198:5:198:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:202:13:202:21 | source(...) | main.rs:1:1:3:1 | fn source |
| main.rs:203:5:203:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:208:13:208:26 | async_source(...) | main.rs:201:1:205:1 | fn async_source |
| main.rs:209:5:209:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:212:17:212:25 | source(...) | main.rs:1:1:3:1 | fn source |
| main.rs:213:9:213:15 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:216:5:216:17 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:220:41:220:54 | async_source(...) | main.rs:201:1:205:1 | fn async_source |
| main.rs:221:5:221:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:223:33:223:61 | test_async_await_async_part(...) | main.rs:207:1:217:1 | fn test_async_await_async_part |
| main.rs:227:5:227:22 | data_out_of_call(...) | main.rs:16:1:19:1 | fn data_out_of_call |
| main.rs:228:5:228:21 | data_in_to_call(...) | main.rs:25:1:28:1 | fn data_in_to_call |
| main.rs:229:5:229:23 | data_through_call(...) | main.rs:34:1:38:1 | fn data_through_call |
| main.rs:230:5:230:34 | data_through_nested_function(...) | main.rs:48:1:57:1 | fn data_through_nested_function |
| main.rs:232:5:232:24 | data_out_of_method(...) | main.rs:88:1:92:1 | fn data_out_of_method |
| main.rs:233:5:233:28 | data_in_to_method_call(...) | main.rs:94:1:98:1 | fn data_in_to_method_call |
| main.rs:234:5:234:25 | data_through_method(...) | main.rs:100:1:105:1 | fn data_through_method |
| main.rs:236:5:236:31 | test_operator_overloading(...) | main.rs:148:1:164:1 | fn test_operator_overloading |
| main.rs:237:5:237:22 | test_async_await(...) | main.rs:219:1:224:1 | fn test_async_await |
| main.rs:184:28:184:36 | source(...) | main.rs:1:1:3:1 | fn source |
| main.rs:187:5:187:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:190:28:190:37 | source(...) | main.rs:1:1:3:1 | fn source |
| main.rs:192:5:192:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:195:28:195:37 | source(...) | main.rs:1:1:3:1 | fn source |
| main.rs:197:5:197:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:201:13:201:21 | source(...) | main.rs:1:1:3:1 | fn source |
| main.rs:202:5:202:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:207:13:207:26 | async_source(...) | main.rs:200:1:204:1 | fn async_source |
| main.rs:208:5:208:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:211:17:211:25 | source(...) | main.rs:1:1:3:1 | fn source |
| main.rs:212:9:212:15 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:215:5:215:17 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:219:41:219:54 | async_source(...) | main.rs:200:1:204:1 | fn async_source |
| main.rs:220:5:220:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:222:33:222:61 | test_async_await_async_part(...) | main.rs:206:1:216:1 | fn test_async_await_async_part |
| main.rs:226:5:226:22 | data_out_of_call(...) | main.rs:16:1:19:1 | fn data_out_of_call |
| main.rs:227:5:227:21 | data_in_to_call(...) | main.rs:25:1:28:1 | fn data_in_to_call |
| main.rs:228:5:228:23 | data_through_call(...) | main.rs:34:1:38:1 | fn data_through_call |
| main.rs:229:5:229:34 | data_through_nested_function(...) | main.rs:48:1:57:1 | fn data_through_nested_function |
| main.rs:231:5:231:24 | data_out_of_method(...) | main.rs:88:1:92:1 | fn data_out_of_method |
| main.rs:232:5:232:28 | data_in_to_method_call(...) | main.rs:94:1:98:1 | fn data_in_to_method_call |
| main.rs:233:5:233:25 | data_through_method(...) | main.rs:100:1:105:1 | fn data_through_method |
| main.rs:235:5:235:31 | test_operator_overloading(...) | main.rs:148:1:163:1 | fn test_operator_overloading |
| main.rs:236:5:236:22 | test_async_await(...) | main.rs:218:1:223:1 | fn test_async_await |

View File

@@ -2321,6 +2321,7 @@ storeStep
| main.rs:137:38:137:38 | 2 | Point.y | main.rs:137:13:137:40 | Point {...} |
| main.rs:143:28:143:36 | source(...) | Point.x | main.rs:143:17:143:44 | Point {...} |
| main.rs:143:42:143:42 | 2 | Point.y | main.rs:143:17:143:44 | Point {...} |
| main.rs:145:11:145:20 | source(...) | Point.y | main.rs:145:5:145:5 | [post] p |
| main.rs:151:12:151:21 | source(...) | Point.x | main.rs:150:13:153:5 | Point {...} |
| main.rs:152:12:152:12 | 2 | Point.y | main.rs:150:13:153:5 | Point {...} |
| main.rs:166:16:169:9 | Point {...} | Point3D.plane | main.rs:165:13:171:5 | Point3D {...} |
@@ -2956,13 +2957,25 @@ readStep
| main.rs:124:10:124:10 | b | tuple.0 | main.rs:124:10:124:12 | b.0 |
| main.rs:124:10:124:12 | b.0 | tuple.1 | main.rs:124:10:124:15 | ... .1 |
| main.rs:125:10:125:10 | b | tuple.1 | main.rs:125:10:125:12 | b.1 |
| main.rs:138:10:138:10 | p | Point.x | main.rs:138:10:138:12 | p.x |
| main.rs:139:10:139:10 | p | Point.y | main.rs:139:10:139:12 | p.y |
| main.rs:144:10:144:10 | p | Point.y | main.rs:144:10:144:12 | p.y |
| main.rs:145:5:145:5 | p | Point.y | main.rs:145:5:145:7 | p.y |
| main.rs:146:10:146:10 | p | Point.y | main.rs:146:10:146:12 | p.y |
| main.rs:154:9:154:28 | Point {...} | Point.x | main.rs:154:20:154:20 | a |
| main.rs:154:9:154:28 | Point {...} | Point.y | main.rs:154:26:154:26 | b |
| main.rs:172:10:172:10 | p | Point3D.plane | main.rs:172:10:172:16 | p.plane |
| main.rs:172:10:172:16 | p.plane | Point.x | main.rs:172:10:172:18 | ... .x |
| main.rs:173:10:173:10 | p | Point3D.plane | main.rs:173:10:173:16 | p.plane |
| main.rs:173:10:173:16 | p.plane | Point.y | main.rs:173:10:173:18 | ... .y |
| main.rs:174:10:174:10 | p | Point3D.z | main.rs:174:10:174:12 | p.z |
| main.rs:184:9:187:9 | Point3D {...} | Point3D.plane | main.rs:185:20:185:33 | Point {...} |
| main.rs:184:9:187:9 | Point3D {...} | Point3D.z | main.rs:186:13:186:13 | z |
| main.rs:185:20:185:33 | Point {...} | Point.x | main.rs:185:28:185:28 | x |
| main.rs:185:20:185:33 | Point {...} | Point.y | main.rs:185:31:185:31 | y |
| main.rs:199:10:199:10 | s | MyTupleStruct(0) | main.rs:199:10:199:12 | s.0 |
| main.rs:199:10:199:10 | s | tuple.0 | main.rs:199:10:199:12 | s.0 |
| main.rs:200:10:200:10 | s | MyTupleStruct(1) | main.rs:200:10:200:12 | s.1 |
| main.rs:200:10:200:10 | s | tuple.1 | main.rs:200:10:200:12 | s.1 |
| main.rs:203:9:203:27 | MyTupleStruct(...) | MyTupleStruct(0) | main.rs:203:23:203:23 | x |
| main.rs:203:9:203:27 | MyTupleStruct(...) | MyTupleStruct(1) | main.rs:203:26:203:26 | y |

View File

@@ -46,11 +46,24 @@ edges
| main.rs:122:14:122:14 | a [tuple.1] | main.rs:122:13:122:18 | TupleExpr [tuple.0, tuple.1] | provenance | |
| main.rs:124:10:124:10 | b [tuple.0, tuple.1] | main.rs:124:10:124:12 | b.0 [tuple.1] | provenance | |
| main.rs:124:10:124:12 | b.0 [tuple.1] | main.rs:124:10:124:15 | ... .1 | provenance | |
| main.rs:137:9:137:9 | p [Point.x] | main.rs:138:10:138:10 | p [Point.x] | provenance | |
| main.rs:137:13:137:40 | Point {...} [Point.x] | main.rs:137:9:137:9 | p [Point.x] | provenance | |
| main.rs:137:24:137:32 | source(...) | main.rs:137:13:137:40 | Point {...} [Point.x] | provenance | |
| main.rs:138:10:138:10 | p [Point.x] | main.rs:138:10:138:12 | p.x | provenance | |
| main.rs:145:5:145:5 | [post] p [Point.y] | main.rs:146:10:146:10 | p [Point.y] | provenance | |
| main.rs:145:11:145:20 | source(...) | main.rs:145:5:145:5 | [post] p [Point.y] | provenance | |
| main.rs:146:10:146:10 | p [Point.y] | main.rs:146:10:146:12 | p.y | provenance | |
| main.rs:150:9:150:9 | p [Point.x] | main.rs:154:9:154:28 | Point {...} [Point.x] | provenance | |
| main.rs:150:13:153:5 | Point {...} [Point.x] | main.rs:150:9:150:9 | p [Point.x] | provenance | |
| main.rs:151:12:151:21 | source(...) | main.rs:150:13:153:5 | Point {...} [Point.x] | provenance | |
| main.rs:154:9:154:28 | Point {...} [Point.x] | main.rs:154:20:154:20 | a | provenance | |
| main.rs:154:20:154:20 | a | main.rs:155:10:155:10 | a | provenance | |
| main.rs:165:9:165:9 | p [Point3D.plane, Point.y] | main.rs:173:10:173:10 | p [Point3D.plane, Point.y] | provenance | |
| main.rs:165:13:171:5 | Point3D {...} [Point3D.plane, Point.y] | main.rs:165:9:165:9 | p [Point3D.plane, Point.y] | provenance | |
| main.rs:166:16:169:9 | Point {...} [Point.y] | main.rs:165:13:171:5 | Point3D {...} [Point3D.plane, Point.y] | provenance | |
| main.rs:168:16:168:25 | source(...) | main.rs:166:16:169:9 | Point {...} [Point.y] | provenance | |
| main.rs:173:10:173:10 | p [Point3D.plane, Point.y] | main.rs:173:10:173:16 | p.plane [Point.y] | provenance | |
| main.rs:173:10:173:16 | p.plane [Point.y] | main.rs:173:10:173:18 | ... .y | provenance | |
| main.rs:178:9:178:9 | y | main.rs:180:30:180:30 | y | provenance | |
| main.rs:178:13:178:22 | source(...) | main.rs:178:9:178:9 | y | provenance | |
| main.rs:179:9:179:9 | p [Point3D.plane, Point.y] | main.rs:183:11:183:11 | p [Point3D.plane, Point.y] | provenance | |
@@ -61,9 +74,11 @@ edges
| main.rs:184:9:187:9 | Point3D {...} [Point3D.plane, Point.y] | main.rs:185:20:185:33 | Point {...} [Point.y] | provenance | |
| main.rs:185:20:185:33 | Point {...} [Point.y] | main.rs:185:31:185:31 | y | provenance | |
| main.rs:185:31:185:31 | y | main.rs:189:18:189:18 | y | provenance | |
| main.rs:198:9:198:9 | s [MyTupleStruct(0)] | main.rs:199:10:199:10 | s [MyTupleStruct(0)] | provenance | |
| main.rs:198:9:198:9 | s [MyTupleStruct(0)] | main.rs:202:11:202:11 | s [MyTupleStruct(0)] | provenance | |
| main.rs:198:13:198:40 | MyTupleStruct(...) [MyTupleStruct(0)] | main.rs:198:9:198:9 | s [MyTupleStruct(0)] | provenance | |
| main.rs:198:27:198:36 | source(...) | main.rs:198:13:198:40 | MyTupleStruct(...) [MyTupleStruct(0)] | provenance | |
| main.rs:199:10:199:10 | s [MyTupleStruct(0)] | main.rs:199:10:199:12 | s.0 | provenance | |
| main.rs:202:11:202:11 | s [MyTupleStruct(0)] | main.rs:203:9:203:27 | MyTupleStruct(...) [MyTupleStruct(0)] | provenance | |
| main.rs:203:9:203:27 | MyTupleStruct(...) [MyTupleStruct(0)] | main.rs:203:23:203:23 | x | provenance | |
| main.rs:203:23:203:23 | x | main.rs:204:18:204:18 | x | provenance | |
@@ -264,12 +279,28 @@ nodes
| main.rs:124:10:124:10 | b [tuple.0, tuple.1] | semmle.label | b [tuple.0, tuple.1] |
| main.rs:124:10:124:12 | b.0 [tuple.1] | semmle.label | b.0 [tuple.1] |
| main.rs:124:10:124:15 | ... .1 | semmle.label | ... .1 |
| main.rs:137:9:137:9 | p [Point.x] | semmle.label | p [Point.x] |
| main.rs:137:13:137:40 | Point {...} [Point.x] | semmle.label | Point {...} [Point.x] |
| main.rs:137:24:137:32 | source(...) | semmle.label | source(...) |
| main.rs:138:10:138:10 | p [Point.x] | semmle.label | p [Point.x] |
| main.rs:138:10:138:12 | p.x | semmle.label | p.x |
| main.rs:145:5:145:5 | [post] p [Point.y] | semmle.label | [post] p [Point.y] |
| main.rs:145:11:145:20 | source(...) | semmle.label | source(...) |
| main.rs:146:10:146:10 | p [Point.y] | semmle.label | p [Point.y] |
| main.rs:146:10:146:12 | p.y | semmle.label | p.y |
| main.rs:150:9:150:9 | p [Point.x] | semmle.label | p [Point.x] |
| main.rs:150:13:153:5 | Point {...} [Point.x] | semmle.label | Point {...} [Point.x] |
| main.rs:151:12:151:21 | source(...) | semmle.label | source(...) |
| main.rs:154:9:154:28 | Point {...} [Point.x] | semmle.label | Point {...} [Point.x] |
| main.rs:154:20:154:20 | a | semmle.label | a |
| main.rs:155:10:155:10 | a | semmle.label | a |
| main.rs:165:9:165:9 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] |
| main.rs:165:13:171:5 | Point3D {...} [Point3D.plane, Point.y] | semmle.label | Point3D {...} [Point3D.plane, Point.y] |
| main.rs:166:16:169:9 | Point {...} [Point.y] | semmle.label | Point {...} [Point.y] |
| main.rs:168:16:168:25 | source(...) | semmle.label | source(...) |
| main.rs:173:10:173:10 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] |
| main.rs:173:10:173:16 | p.plane [Point.y] | semmle.label | p.plane [Point.y] |
| main.rs:173:10:173:18 | ... .y | semmle.label | ... .y |
| main.rs:178:9:178:9 | y | semmle.label | y |
| main.rs:178:13:178:22 | source(...) | semmle.label | source(...) |
| main.rs:179:9:179:9 | p [Point3D.plane, Point.y] | semmle.label | p [Point3D.plane, Point.y] |
@@ -284,6 +315,8 @@ nodes
| main.rs:198:9:198:9 | s [MyTupleStruct(0)] | semmle.label | s [MyTupleStruct(0)] |
| main.rs:198:13:198:40 | MyTupleStruct(...) [MyTupleStruct(0)] | semmle.label | MyTupleStruct(...) [MyTupleStruct(0)] |
| main.rs:198:27:198:36 | source(...) | semmle.label | source(...) |
| main.rs:199:10:199:10 | s [MyTupleStruct(0)] | semmle.label | s [MyTupleStruct(0)] |
| main.rs:199:10:199:12 | s.0 | semmle.label | s.0 |
| main.rs:202:11:202:11 | s [MyTupleStruct(0)] | semmle.label | s [MyTupleStruct(0)] |
| main.rs:203:9:203:27 | MyTupleStruct(...) [MyTupleStruct(0)] | semmle.label | MyTupleStruct(...) [MyTupleStruct(0)] |
| main.rs:203:23:203:23 | x | semmle.label | x |
@@ -478,8 +511,12 @@ testFailures
| main.rs:113:10:113:12 | a.1 | main.rs:111:21:111:30 | source(...) | main.rs:113:10:113:12 | a.1 | $@ | main.rs:111:21:111:30 | source(...) | source(...) |
| main.rs:116:10:116:12 | a.0 | main.rs:114:11:114:20 | source(...) | main.rs:116:10:116:12 | a.0 | $@ | main.rs:114:11:114:20 | source(...) | source(...) |
| main.rs:124:10:124:15 | ... .1 | main.rs:121:17:121:26 | source(...) | main.rs:124:10:124:15 | ... .1 | $@ | main.rs:121:17:121:26 | source(...) | source(...) |
| main.rs:138:10:138:12 | p.x | main.rs:137:24:137:32 | source(...) | main.rs:138:10:138:12 | p.x | $@ | main.rs:137:24:137:32 | source(...) | source(...) |
| main.rs:146:10:146:12 | p.y | main.rs:145:11:145:20 | source(...) | main.rs:146:10:146:12 | p.y | $@ | main.rs:145:11:145:20 | source(...) | source(...) |
| main.rs:155:10:155:10 | a | main.rs:151:12:151:21 | source(...) | main.rs:155:10:155:10 | a | $@ | main.rs:151:12:151:21 | source(...) | source(...) |
| main.rs:173:10:173:18 | ... .y | main.rs:168:16:168:25 | source(...) | main.rs:173:10:173:18 | ... .y | $@ | main.rs:168:16:168:25 | source(...) | source(...) |
| main.rs:189:18:189:18 | y | main.rs:178:13:178:22 | source(...) | main.rs:189:18:189:18 | y | $@ | main.rs:178:13:178:22 | source(...) | source(...) |
| main.rs:199:10:199:12 | s.0 | main.rs:198:27:198:36 | source(...) | main.rs:199:10:199:12 | s.0 | $@ | main.rs:198:27:198:36 | source(...) | source(...) |
| main.rs:204:18:204:18 | x | main.rs:198:27:198:36 | source(...) | main.rs:204:18:204:18 | x | $@ | main.rs:198:27:198:36 | source(...) | source(...) |
| main.rs:217:33:217:33 | n | main.rs:214:27:214:36 | source(...) | main.rs:217:33:217:33 | n | $@ | main.rs:214:27:214:36 | source(...) | source(...) |
| main.rs:230:25:230:25 | n | main.rs:227:19:227:28 | source(...) | main.rs:230:25:230:25 | n | $@ | main.rs:227:19:227:28 | source(...) | source(...) |

View File

@@ -135,7 +135,7 @@ struct Point {
fn struct_field() {
let p = Point { x: source(9), y: 2 };
sink(p.x); // $ MISSING: hasValueFlow=9
sink(p.x); // $ hasValueFlow=9
sink(p.y);
}
@@ -143,7 +143,7 @@ fn struct_mutation() {
let mut p = Point { x: source(9), y: 2 };
sink(p.y);
p.y = source(54);
sink(p.y); // $ MISSING: hasValueFlow=54
sink(p.y); // $ hasValueFlow=54
}
fn struct_pattern_match() {
@@ -170,7 +170,7 @@ fn struct_nested_field() {
z: 4,
};
sink(p.plane.x);
sink(p.plane.y); // $ MISSING: hasValueFlow=77
sink(p.plane.y); // $ hasValueFlow=77
sink(p.z);
}
@@ -196,7 +196,7 @@ struct MyTupleStruct(i64, i64);
fn tuple_struct() {
let s = MyTupleStruct(source(94), 2);
sink(s.0); // $ MISSING: hasValueFlow=94
sink(s.0); // $ hasValueFlow=94
sink(s.1);
match s {

View File

@@ -126,7 +126,7 @@ fn test_set_struct_field() {
let s = source(7);
let my_struct = set_struct_field(s);
sink(my_struct.field1);
sink(my_struct.field2); // $ MISSING: hasValueFlow=7
sink(my_struct.field2); // $ hasValueFlow=7
}
// has a flow model

View File

@@ -15,9 +15,10 @@ models
| 14 | Summary: repo::test; crate::get_var_field; Argument[0].Field[crate::MyFieldEnum::C::field_c]; ReturnValue; value |
| 15 | Summary: repo::test; crate::get_var_pos; Argument[0].Field[crate::MyPosEnum::A(0)]; ReturnValue; value |
| 16 | Summary: repo::test; crate::set_array_element; Argument[0]; ReturnValue.Element; value |
| 17 | Summary: repo::test; crate::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value |
| 18 | Summary: repo::test; crate::set_var_field; Argument[0]; ReturnValue.Field[crate::MyFieldEnum::D::field_d]; value |
| 19 | Summary: repo::test; crate::set_var_pos; Argument[0]; ReturnValue.Field[crate::MyPosEnum::B(0)]; value |
| 17 | Summary: repo::test; crate::set_struct_field; Argument[0]; ReturnValue.Field[crate::MyStruct::field2]; value |
| 18 | Summary: repo::test; crate::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value |
| 19 | Summary: repo::test; crate::set_var_field; Argument[0]; ReturnValue.Field[crate::MyFieldEnum::D::field_d]; value |
| 20 | Summary: repo::test; crate::set_var_pos; Argument[0]; ReturnValue.Field[crate::MyPosEnum::B(0)]; value |
edges
| main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | |
| main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | |
@@ -48,8 +49,8 @@ edges
| main.rs:54:9:54:10 | e1 [B] | main.rs:55:11:55:12 | e1 [B] | provenance | |
| main.rs:54:14:54:27 | set_var_pos(...) [B] | main.rs:54:9:54:10 | e1 [B] | provenance | |
| main.rs:54:14:54:27 | set_var_pos(...) [B] | main.rs:54:9:54:10 | e1 [B] | provenance | |
| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:19 |
| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:19 |
| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:20 |
| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:20 |
| main.rs:55:11:55:12 | e1 [B] | main.rs:57:9:57:23 | ...::B(...) [B] | provenance | |
| main.rs:55:11:55:12 | e1 [B] | main.rs:57:9:57:23 | ...::B(...) [B] | provenance | |
| main.rs:57:9:57:23 | ...::B(...) [B] | main.rs:57:22:57:22 | i | provenance | |
@@ -76,8 +77,8 @@ edges
| main.rs:86:9:86:10 | e1 [D] | main.rs:87:11:87:12 | e1 [D] | provenance | |
| main.rs:86:14:86:29 | set_var_field(...) [D] | main.rs:86:9:86:10 | e1 [D] | provenance | |
| main.rs:86:14:86:29 | set_var_field(...) [D] | main.rs:86:9:86:10 | e1 [D] | provenance | |
| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:18 |
| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:18 |
| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:19 |
| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:19 |
| main.rs:87:11:87:12 | e1 [D] | main.rs:89:9:89:37 | ...::D {...} [D] | provenance | |
| main.rs:87:11:87:12 | e1 [D] | main.rs:89:9:89:37 | ...::D {...} [D] | provenance | |
| main.rs:89:9:89:37 | ...::D {...} [D] | main.rs:89:35:89:35 | i | provenance | |
@@ -96,6 +97,18 @@ edges
| main.rs:106:17:106:17 | s | main.rs:105:21:108:5 | MyStruct {...} [MyStruct.field1] | provenance | |
| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | main.rs:109:10:109:36 | get_struct_field(...) | provenance | MaD:12 |
| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | main.rs:109:10:109:36 | get_struct_field(...) | provenance | MaD:12 |
| main.rs:126:9:126:9 | s | main.rs:127:38:127:38 | s | provenance | |
| main.rs:126:9:126:9 | s | main.rs:127:38:127:38 | s | provenance | |
| main.rs:126:13:126:21 | source(...) | main.rs:126:9:126:9 | s | provenance | |
| main.rs:126:13:126:21 | source(...) | main.rs:126:9:126:9 | s | provenance | |
| main.rs:127:9:127:17 | my_struct [MyStruct.field2] | main.rs:129:10:129:18 | my_struct [MyStruct.field2] | provenance | |
| main.rs:127:9:127:17 | my_struct [MyStruct.field2] | main.rs:129:10:129:18 | my_struct [MyStruct.field2] | provenance | |
| main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | main.rs:127:9:127:17 | my_struct [MyStruct.field2] | provenance | |
| main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | main.rs:127:9:127:17 | my_struct [MyStruct.field2] | provenance | |
| main.rs:127:38:127:38 | s | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:17 |
| main.rs:127:38:127:38 | s | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:17 |
| main.rs:129:10:129:18 | my_struct [MyStruct.field2] | main.rs:129:10:129:25 | my_struct.field2 | provenance | |
| main.rs:129:10:129:18 | my_struct [MyStruct.field2] | main.rs:129:10:129:25 | my_struct.field2 | provenance | |
| main.rs:138:9:138:9 | s | main.rs:139:29:139:29 | s | provenance | |
| main.rs:138:9:138:9 | s | main.rs:139:29:139:29 | s | provenance | |
| main.rs:138:13:138:21 | source(...) | main.rs:138:9:138:9 | s | provenance | |
@@ -136,8 +149,8 @@ edges
| main.rs:173:9:173:9 | t [tuple.1] | main.rs:175:10:175:10 | t [tuple.1] | provenance | |
| main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | main.rs:173:9:173:9 | t [tuple.1] | provenance | |
| main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | main.rs:173:9:173:9 | t [tuple.1] | provenance | |
| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:17 |
| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:17 |
| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:18 |
| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:18 |
| main.rs:175:10:175:10 | t [tuple.1] | main.rs:175:10:175:12 | t.1 | provenance | |
| main.rs:175:10:175:10 | t [tuple.1] | main.rs:175:10:175:12 | t.1 | provenance | |
| main.rs:184:9:184:9 | s | main.rs:189:11:189:11 | s | provenance | |
@@ -337,6 +350,20 @@ nodes
| main.rs:109:10:109:36 | get_struct_field(...) | semmle.label | get_struct_field(...) |
| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | semmle.label | my_struct [MyStruct.field1] |
| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | semmle.label | my_struct [MyStruct.field1] |
| main.rs:126:9:126:9 | s | semmle.label | s |
| main.rs:126:9:126:9 | s | semmle.label | s |
| main.rs:126:13:126:21 | source(...) | semmle.label | source(...) |
| main.rs:126:13:126:21 | source(...) | semmle.label | source(...) |
| main.rs:127:9:127:17 | my_struct [MyStruct.field2] | semmle.label | my_struct [MyStruct.field2] |
| main.rs:127:9:127:17 | my_struct [MyStruct.field2] | semmle.label | my_struct [MyStruct.field2] |
| main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | semmle.label | set_struct_field(...) [MyStruct.field2] |
| main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | semmle.label | set_struct_field(...) [MyStruct.field2] |
| main.rs:127:38:127:38 | s | semmle.label | s |
| main.rs:127:38:127:38 | s | semmle.label | s |
| main.rs:129:10:129:18 | my_struct [MyStruct.field2] | semmle.label | my_struct [MyStruct.field2] |
| main.rs:129:10:129:18 | my_struct [MyStruct.field2] | semmle.label | my_struct [MyStruct.field2] |
| main.rs:129:10:129:25 | my_struct.field2 | semmle.label | my_struct.field2 |
| main.rs:129:10:129:25 | my_struct.field2 | semmle.label | my_struct.field2 |
| main.rs:138:9:138:9 | s | semmle.label | s |
| main.rs:138:9:138:9 | s | semmle.label | s |
| main.rs:138:13:138:21 | source(...) | semmle.label | source(...) |
@@ -532,6 +559,8 @@ invalidSpecComponent
| main.rs:89:47:89:47 | i | main.rs:85:13:85:21 | source(...) | main.rs:89:47:89:47 | i | $@ | main.rs:85:13:85:21 | source(...) | source(...) |
| main.rs:109:10:109:36 | get_struct_field(...) | main.rs:104:13:104:21 | source(...) | main.rs:109:10:109:36 | get_struct_field(...) | $@ | main.rs:104:13:104:21 | source(...) | source(...) |
| main.rs:109:10:109:36 | get_struct_field(...) | main.rs:104:13:104:21 | source(...) | main.rs:109:10:109:36 | get_struct_field(...) | $@ | main.rs:104:13:104:21 | source(...) | source(...) |
| main.rs:129:10:129:25 | my_struct.field2 | main.rs:126:13:126:21 | source(...) | main.rs:129:10:129:25 | my_struct.field2 | $@ | main.rs:126:13:126:21 | source(...) | source(...) |
| main.rs:129:10:129:25 | my_struct.field2 | main.rs:126:13:126:21 | source(...) | main.rs:129:10:129:25 | my_struct.field2 | $@ | main.rs:126:13:126:21 | source(...) | source(...) |
| main.rs:139:10:139:31 | get_array_element(...) | main.rs:138:13:138:21 | source(...) | main.rs:139:10:139:31 | get_array_element(...) | $@ | main.rs:138:13:138:21 | source(...) | source(...) |
| main.rs:139:10:139:31 | get_array_element(...) | main.rs:138:13:138:21 | source(...) | main.rs:139:10:139:31 | get_array_element(...) | $@ | main.rs:138:13:138:21 | source(...) | source(...) |
| main.rs:150:10:150:15 | arr[0] | main.rs:148:13:148:21 | source(...) | main.rs:150:10:150:15 | arr[0] | $@ | main.rs:148:13:148:21 | source(...) | source(...) |

View File

@@ -1,3 +0,0 @@
multiplePathResolutions
| main.rs:118:9:118:9 | f | main.rs:104:5:106:5 | fn f |
| main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f |

View File

@@ -0,0 +1,6 @@
multiplePathResolutions
| main.rs:118:9:118:9 | f | main.rs:104:5:106:5 | fn f |
| main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f |
multipleStaticCallTargets
| main.rs:118:9:118:11 | f(...) | main.rs:104:5:106:5 | fn f |
| main.rs:118:9:118:11 | f(...) | main.rs:110:5:112:5 | fn f |

View File

@@ -184,11 +184,11 @@ mod m8 {
> // $ MISSING: item=52
::f(&x); // $ MISSING: item=I53
let x = MyStruct {}; // $ item=I50
x.f(); // $ MISSING: item=I53
x.f(); // $ item=I53
let x = MyStruct {}; // $ item=I50
x.g(); // $ MISSING: item=I54
x.g(); // $ item=I54
MyStruct::h(&x); // $ item=I74
x.h(); // $ MISSING: item=I74
x.h(); // $ item=I74
} // I55
} // I46
@@ -304,7 +304,7 @@ mod m15 {
fn f(&self) {
println!("m15::Trait2::f");
Self::g(self); // $ item=I80
self.g(); // $ MISSING: item=I80
self.g(); // $ item=I80
}
} // I82
@@ -316,7 +316,7 @@ mod m15 {
fn f(&self) {
println!("m15::<S as Trait1>::f");
Self::g(self); // $ item=I77
self.g(); // $ MISSING: item=I77
self.g(); // $ item=I77
} // I76
fn g(&self) {
@@ -343,7 +343,7 @@ mod m15 {
as Trait2 // $ item=I82
>::f(&x); // $ MISSING: item=I78
S::g(&x); // $ item=I77
x.g(); // $ MISSING: item=I77
x.g(); // $ item=I77
} // I75
}
@@ -359,7 +359,7 @@ mod m16 {
fn h(&self) -> T { // $ item=I84
Self::g(&self); // $ item=I85
self.g() // $ MISSING: item=I85
self.g() // $ item=I85
} // I96
const c: T // $ item=I84
@@ -376,7 +376,7 @@ mod m16 {
fn f(&self) -> T { // $ item=I87
println!("m16::Trait2::f");
Self::g(self); // $ item=I85
self.g(); // $ MISSING: item=I85
self.g(); // $ item=I85
Self::c // $ item=I94
}
} // I89
@@ -391,7 +391,7 @@ mod m16 {
fn f(&self) -> S { // $ item=I90
println!("m16::<S as Trait1<S>>::f");
Self::g(self); // $ item=I92
self.g() // $ MISSING: item=I92
self.g() // $ item=I92
} // I91
fn g(&self) -> S { // $ item=I90
@@ -429,9 +429,9 @@ mod m16 {
> // $ item=I89
>::f(&x); // $ MISSING: item=I93
S::g(&x); // $ item=I92
x.g(); // $ MISSING: item=I92
x.g(); // $ item=I92
S::h(&x); // $ item=I96
x.h(); // $ MISSING: item=I96
x.h(); // $ item=I96
S::c; // $ item=I95
<S // $ item=I90
as Trait1<
@@ -460,7 +460,7 @@ mod m17 {
fn g<T: // I5
MyTrait // $ item=I2
>(x: T) { // $ item=I5
x.f(); // $ MISSING: item=I1
x.f(); // $ item=I1
T::f(&x); // $ item=I1
MyTrait::f(&x); // $ item=I1
} // I6

View File

@@ -1,5 +1,6 @@
import rust
import codeql.rust.elements.internal.PathResolution
import codeql.rust.internal.PathResolution
import codeql.rust.internal.TypeInference
import utils.test.InlineExpectationsTest
import TestUtils
@@ -32,12 +33,15 @@ module ResolveTest implements TestSig {
}
predicate hasActualResult(Location location, string element, string tag, string value) {
exists(Path p |
not p = any(Path parent).getQualifier() and
location = p.getLocation() and
element = p.toString() and
item(resolvePath(p), value) and
exists(AstNode n |
not n = any(Path parent).getQualifier() and
location = n.getLocation() and
element = n.toString() and
tag = "item"
|
item(resolvePath(n), value)
or
item(n.(MethodCallExpr).getStaticTarget(), value)
)
}
}

View File

@@ -0,0 +1,574 @@
mod m1 {
pub struct Foo {}
impl Foo {
pub fn m1(self) -> Self {
self
}
pub fn m2(self) -> Foo {
self
}
}
pub fn f() -> Foo {
println!("main.rs::m1::f");
let x = Foo {};
let y: _ = Foo {};
x
}
pub fn g(x: Foo, y: Foo) -> Foo {
println!("main.rs::m1::g");
x.m1();
y.m2()
}
}
mod m2 {
#[derive(Debug)]
struct MyThing<A> {
a: A,
}
#[derive(Debug)]
struct S1;
#[derive(Debug)]
struct S2;
impl MyThing<S1> {
fn m1(self) -> S1 {
self.a
}
}
impl MyThing<S2> {
fn m1(self) -> Self {
Self { a: self.a }
}
}
impl<T> MyThing<T> {
fn m2(self) -> T {
self.a
}
}
pub fn f() {
let x = MyThing { a: S1 };
let y = MyThing { a: S2 };
println!("{:?}", x.m1()); // missing call target
println!("{:?}", y.m1().a); // missing call target
let x = MyThing { a: S1 };
let y = MyThing { a: S2 };
println!("{:?}", x.m2());
println!("{:?}", y.m2());
}
}
mod m3 {
#[derive(Debug)]
struct MyThing<A> {
a: A,
}
#[derive(Debug)]
struct S1;
#[derive(Debug)]
struct S2;
trait MyTrait<A> {
fn m1(self) -> A;
fn m2(self) -> Self
where
Self: Sized,
{
self
}
}
fn call_trait_m1<T1, T2: MyTrait<T1>>(x: T2) -> T1 {
x.m1()
}
impl MyTrait<S1> for MyThing<S1> {
fn m1(self) -> S1 {
self.a
}
}
impl MyTrait<Self> for MyThing<S2> {
fn m1(self) -> Self {
Self { a: self.a }
}
}
pub fn f() {
let x = MyThing { a: S1 };
let y = MyThing { a: S2 };
println!("{:?}", x.m1()); // missing call target
println!("{:?}", y.m1().a); // missing call target
let x = MyThing { a: S1 };
let y = MyThing { a: S2 };
println!("{:?}", call_trait_m1(x)); // missing
println!("{:?}", call_trait_m1(y).a); // missing
}
}
mod m4 {
#[derive(Debug)]
struct MyThing<A> {
a: A,
}
#[derive(Debug)]
struct S1;
#[derive(Debug)]
struct S2;
trait MyTrait<A> {
fn m1(self) -> A;
fn m2(self) -> A
where
Self: Sized,
{
self.m1()
}
}
fn call_trait_m1<T1, T2: MyTrait<T1>>(x: T2) -> T1 {
x.m1()
}
impl<T> MyTrait<T> for MyThing<T> {
fn m1(self) -> T {
self.a
}
}
pub fn f() {
let x = MyThing { a: S1 };
let y = MyThing { a: S2 };
println!("{:?}", x.m1());
println!("{:?}", y.m1());
let x = MyThing { a: S1 };
let y = MyThing { a: S2 };
println!("{:?}", x.m2());
println!("{:?}", y.m2());
let x = MyThing { a: S1 };
let y = MyThing { a: S2 };
println!("{:?}", call_trait_m1(x)); // missing
println!("{:?}", call_trait_m1(y)); // missing
}
}
mod m5 {
trait MyTrait {
type AssociatedType;
fn m1(self) -> Self::AssociatedType;
fn m2(self) -> Self::AssociatedType
where
Self::AssociatedType: Default,
Self: Sized,
{
Self::AssociatedType::default()
}
}
#[derive(Debug, Default)]
struct S;
impl MyTrait for S {
type AssociatedType = S;
fn m1(self) -> Self::AssociatedType {
S
}
}
pub fn f() {
let x = S;
println!("{:?}", x.m1());
let x = S;
println!("{:?}", x.m2()); // missing
}
}
mod m6 {
#[derive(Debug)]
enum MyEnum<A> {
C1(A),
C2 { a: A },
}
#[derive(Debug)]
struct S1;
#[derive(Debug)]
struct S2;
impl<T> MyEnum<T> {
fn m1(self) -> T {
match self {
MyEnum::C1(a) => a, // missing
MyEnum::C2 { a } => a, // missing
}
}
}
pub fn f() {
let x = MyEnum::C1(S1);
let y = MyEnum::C2 { a: S2 };
println!("{:?}", x.m1());
println!("{:?}", y.m1());
}
}
mod m7 {
#[derive(Debug)]
struct MyThing<A> {
a: A,
}
#[derive(Debug)]
struct MyThing2<A> {
a: A,
}
#[derive(Debug)]
struct S1;
#[derive(Debug)]
struct S2;
trait MyTrait1<A> {
fn m1(self) -> A;
}
trait MyTrait2<A>: MyTrait1<A> {
fn m2(self) -> A
where
Self: Sized,
{
if 1 + 1 > 2 {
self.m1()
} else {
Self::m1(self)
}
}
}
trait MyTrait3<A>: MyTrait2<MyThing<A>> {
fn m3(self) -> A
where
Self: Sized,
{
if 1 + 1 > 2 {
self.m2().a
} else {
Self::m2(self).a
}
}
}
impl<T> MyTrait1<T> for MyThing<T> {
fn m1(self) -> T {
self.a
}
}
impl<T> MyTrait2<T> for MyThing<T> {}
impl<T> MyTrait1<MyThing<T>> for MyThing2<T> {
fn m1(self) -> MyThing<T> {
MyThing { a: self.a }
}
}
impl<T> MyTrait2<MyThing<T>> for MyThing2<T> {}
impl<T> MyTrait3<T> for MyThing2<T> {}
pub fn f() {
let x = MyThing { a: S1 };
let y = MyThing { a: S2 };
println!("{:?}", x.m1());
println!("{:?}", y.m1());
let x = MyThing { a: S1 };
let y = MyThing { a: S2 };
println!("{:?}", x.m2());
println!("{:?}", y.m2());
let x = MyThing2 { a: S1 };
let y = MyThing2 { a: S2 };
println!("{:?}", x.m3());
println!("{:?}", y.m3());
}
}
mod m8 {
use std::convert::From;
use std::fmt::Debug;
#[derive(Debug)]
struct S1;
#[derive(Debug)]
struct S2;
trait Trait: Debug {}
impl Trait for S1 {}
fn id<T: ?Sized>(x: &T) -> &T {
x
}
impl Into<S2> for S1 {
fn into(self) -> S2 {
S2
}
}
fn into<T1, T2>(x: T1) -> T2
where
T1: Into<T2>,
{
x.into()
}
pub fn f() {
let x = S1;
println!("{:?}", id(&x));
let x = S1;
println!("{:?}", id::<S1>(&x));
let x = S1;
println!("{:?}", id::<dyn Trait>(&x)); // incorrectly has type `S1` instead of `Trait`
let x = S1;
into::<S1, S2>(x);
let x = S1;
let y: S2 = into(x);
}
}
mod m9 {
#[derive(Debug)]
enum MyOption<T> {
MyNone(),
MySome(T),
}
trait MyTrait<S> {
fn set(&mut self, value: S);
fn call_set(&mut self, value: S) {
self.set(value);
}
}
impl<T> MyTrait<T> for MyOption<T> {
fn set(&mut self, value: T) {}
}
impl<T> MyOption<T> {
fn new() -> Self {
MyOption::MyNone()
}
}
impl<T> MyOption<MyOption<T>> {
fn flatten(self) -> MyOption<T> {
match self {
MyOption::MyNone() => MyOption::MyNone(), // missing inner type `Option<T>`
MyOption::MySome(x) => x, // missing
}
}
}
#[derive(Debug)]
struct S;
pub fn f() {
let x1 = MyOption::<S>::new(); // `::new` missing type `S`
println!("{:?}", x1);
let mut x2 = MyOption::new();
x2.set(S);
println!("{:?}", x2);
let mut x3 = MyOption::new(); // missing type `S` from `MyOption<S>` (but can resolve `MyTrait<S>`)
x3.call_set(S);
println!("{:?}", x3);
let mut x4 = MyOption::new();
MyOption::set(&mut x4, S);
println!("{:?}", x4);
let x5 = MyOption::MySome(MyOption::<S>::MyNone());
println!("{:?}", x5.flatten()); // missing call target
let x6 = MyOption::MySome(MyOption::<S>::MyNone());
println!("{:?}", MyOption::<MyOption<S>>::flatten(x6));
}
}
mod m10 {
#[derive(Debug, Copy, Clone)]
struct S<T>(T);
#[derive(Debug, Copy, Clone)]
struct S2;
impl<T> S<T> {
fn m1(self) -> T {
self.0
}
fn m2(&self) -> &T {
&self.0
}
fn m3(self: &S<T>) -> &T {
&self.0
}
}
pub fn f() {
let x1 = S(S2);
println!("{:?}", x1.m1());
let x2 = S(S2);
// implicit borrow
println!("{:?}", x2.m2());
println!("{:?}", x2.m3());
let x3 = S(S2);
// explicit borrow
println!("{:?}", S::<S2>::m2(&x3));
println!("{:?}", S::<S2>::m3(&x3));
let x4 = &S(S2);
// explicit borrow
println!("{:?}", x4.m2());
println!("{:?}", x4.m3());
let x5 = &S(S2);
// implicit dereference
println!("{:?}", x5.m1());
println!("{:?}", x5.0);
let x6 = &S(S2);
// explicit dereference
println!("{:?}", (*x6).m1());
}
}
mod m11 {
trait MyTrait {
fn foo(&self) -> &Self;
fn bar(&self) -> &Self {
self.foo()
}
}
struct MyStruct;
impl MyTrait for MyStruct {
fn foo(&self) -> &MyStruct {
self
}
}
pub fn f() {
let x = MyStruct;
x.bar();
}
}
mod m12 {
struct S;
struct MyStruct<T>(T);
impl<T> MyStruct<T> {
fn foo(&self) -> &Self {
self
}
}
pub fn f() {
let x = MyStruct(S);
x.foo();
}
}
mod m13 {
struct S;
impl S {
fn f1(&self) -> &Self {
&&&self
}
fn f2(self: &Self) -> &Self {
&&&self
}
fn f3(x: &Self) -> &Self {
x
}
fn f4(x: &Self) -> &Self {
&&&x
}
}
pub fn f() {
let x = S {};
x.f1();
x.f2();
S::f3(&x);
}
}
fn main() {
m1::f();
m1::g(m1::Foo {}, m1::Foo {});
m2::f();
m3::f();
m4::f();
m5::f();
m6::f();
m7::f();
m8::f();
m9::f();
m10::f();
m11::f();
m12::f();
m13::f();
}

View File

@@ -0,0 +1,792 @@
inferType
| main.rs:5:19:5:22 | SelfParam | | main.rs:2:5:2:21 | struct Foo |
| main.rs:5:33:7:9 | { ... } | | main.rs:2:5:2:21 | struct Foo |
| main.rs:6:13:6:16 | self | | main.rs:2:5:2:21 | struct Foo |
| main.rs:9:19:9:22 | SelfParam | | main.rs:2:5:2:21 | struct Foo |
| main.rs:9:32:11:9 | { ... } | | main.rs:2:5:2:21 | struct Foo |
| main.rs:10:13:10:16 | self | | main.rs:2:5:2:21 | struct Foo |
| main.rs:14:23:19:5 | { ... } | | main.rs:2:5:2:21 | struct Foo |
| main.rs:16:13:16:13 | x | | main.rs:2:5:2:21 | struct Foo |
| main.rs:16:17:16:22 | Foo {...} | | main.rs:2:5:2:21 | struct Foo |
| main.rs:17:13:17:13 | y | | main.rs:2:5:2:21 | struct Foo |
| main.rs:17:20:17:25 | Foo {...} | | main.rs:2:5:2:21 | struct Foo |
| main.rs:18:9:18:9 | x | | main.rs:2:5:2:21 | struct Foo |
| main.rs:21:14:21:14 | x | | main.rs:2:5:2:21 | struct Foo |
| main.rs:21:22:21:22 | y | | main.rs:2:5:2:21 | struct Foo |
| main.rs:21:37:25:5 | { ... } | | main.rs:2:5:2:21 | struct Foo |
| main.rs:23:9:23:9 | x | | main.rs:2:5:2:21 | struct Foo |
| main.rs:23:9:23:14 | x.m1(...) | | main.rs:2:5:2:21 | struct Foo |
| main.rs:24:9:24:9 | y | | main.rs:2:5:2:21 | struct Foo |
| main.rs:24:9:24:14 | y.m2(...) | | main.rs:2:5:2:21 | struct Foo |
| main.rs:40:15:40:18 | SelfParam | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:40:15:40:18 | SelfParam | A | main.rs:34:5:35:14 | struct S1 |
| main.rs:40:27:42:9 | { ... } | | main.rs:34:5:35:14 | struct S1 |
| main.rs:41:13:41:16 | self | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:41:13:41:16 | self | A | main.rs:34:5:35:14 | struct S1 |
| main.rs:41:13:41:18 | self.a | | main.rs:34:5:35:14 | struct S1 |
| main.rs:46:15:46:18 | SelfParam | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:46:15:46:18 | SelfParam | A | main.rs:36:5:37:14 | struct S2 |
| main.rs:46:29:48:9 | { ... } | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:46:29:48:9 | { ... } | A | main.rs:36:5:37:14 | struct S2 |
| main.rs:47:13:47:30 | Self {...} | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:47:13:47:30 | Self {...} | A | main.rs:36:5:37:14 | struct S2 |
| main.rs:47:23:47:26 | self | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:47:23:47:26 | self | A | main.rs:36:5:37:14 | struct S2 |
| main.rs:47:23:47:28 | self.a | | main.rs:36:5:37:14 | struct S2 |
| main.rs:52:15:52:18 | SelfParam | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:52:15:52:18 | SelfParam | A | main.rs:51:10:51:10 | T |
| main.rs:52:26:54:9 | { ... } | | main.rs:51:10:51:10 | T |
| main.rs:53:13:53:16 | self | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:53:13:53:16 | self | A | main.rs:51:10:51:10 | T |
| main.rs:53:13:53:18 | self.a | | main.rs:51:10:51:10 | T |
| main.rs:58:13:58:13 | x | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:58:13:58:13 | x | A | main.rs:34:5:35:14 | struct S1 |
| main.rs:58:17:58:33 | MyThing {...} | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:58:17:58:33 | MyThing {...} | A | main.rs:34:5:35:14 | struct S1 |
| main.rs:58:30:58:31 | S1 | | main.rs:34:5:35:14 | struct S1 |
| main.rs:59:13:59:13 | y | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:59:13:59:13 | y | A | main.rs:36:5:37:14 | struct S2 |
| main.rs:59:17:59:33 | MyThing {...} | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:59:17:59:33 | MyThing {...} | A | main.rs:36:5:37:14 | struct S2 |
| main.rs:59:30:59:31 | S2 | | main.rs:36:5:37:14 | struct S2 |
| main.rs:61:26:61:26 | x | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:61:26:61:26 | x | A | main.rs:34:5:35:14 | struct S1 |
| main.rs:62:26:62:26 | y | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:62:26:62:26 | y | A | main.rs:36:5:37:14 | struct S2 |
| main.rs:64:13:64:13 | x | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:64:13:64:13 | x | A | main.rs:34:5:35:14 | struct S1 |
| main.rs:64:17:64:33 | MyThing {...} | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:64:17:64:33 | MyThing {...} | A | main.rs:34:5:35:14 | struct S1 |
| main.rs:64:30:64:31 | S1 | | main.rs:34:5:35:14 | struct S1 |
| main.rs:65:13:65:13 | y | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:65:13:65:13 | y | A | main.rs:36:5:37:14 | struct S2 |
| main.rs:65:17:65:33 | MyThing {...} | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:65:17:65:33 | MyThing {...} | A | main.rs:36:5:37:14 | struct S2 |
| main.rs:65:30:65:31 | S2 | | main.rs:36:5:37:14 | struct S2 |
| main.rs:67:26:67:26 | x | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:67:26:67:26 | x | A | main.rs:34:5:35:14 | struct S1 |
| main.rs:67:26:67:31 | x.m2(...) | | main.rs:34:5:35:14 | struct S1 |
| main.rs:68:26:68:26 | y | | main.rs:29:5:32:5 | struct MyThing |
| main.rs:68:26:68:26 | y | A | main.rs:36:5:37:14 | struct S2 |
| main.rs:68:26:68:31 | y.m2(...) | | main.rs:36:5:37:14 | struct S2 |
| main.rs:84:15:84:18 | SelfParam | | main.rs:83:5:92:5 | trait MyTrait |
| main.rs:84:15:84:18 | SelfParam | A | main.rs:83:19:83:19 | A |
| main.rs:86:15:86:18 | SelfParam | | main.rs:83:5:92:5 | trait MyTrait |
| main.rs:86:15:86:18 | SelfParam | A | main.rs:83:19:83:19 | A |
| main.rs:89:9:91:9 | { ... } | | main.rs:83:5:92:5 | trait MyTrait |
| main.rs:89:9:91:9 | { ... } | A | main.rs:83:19:83:19 | A |
| main.rs:90:13:90:16 | self | | main.rs:83:5:92:5 | trait MyTrait |
| main.rs:90:13:90:16 | self | A | main.rs:83:19:83:19 | A |
| main.rs:94:43:94:43 | x | | main.rs:83:5:92:5 | trait MyTrait |
| main.rs:94:43:94:43 | x | | main.rs:94:26:94:40 | T2 |
| main.rs:94:43:94:43 | x | A | main.rs:94:22:94:23 | T1 |
| main.rs:94:56:96:5 | { ... } | | main.rs:94:22:94:23 | T1 |
| main.rs:95:9:95:9 | x | | main.rs:83:5:92:5 | trait MyTrait |
| main.rs:95:9:95:9 | x | | main.rs:94:26:94:40 | T2 |
| main.rs:95:9:95:9 | x | A | main.rs:94:22:94:23 | T1 |
| main.rs:95:9:95:14 | x.m1(...) | | main.rs:94:22:94:23 | T1 |
| main.rs:99:15:99:18 | SelfParam | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:99:15:99:18 | SelfParam | A | main.rs:78:5:79:14 | struct S1 |
| main.rs:99:27:101:9 | { ... } | | main.rs:78:5:79:14 | struct S1 |
| main.rs:100:13:100:16 | self | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:100:13:100:16 | self | A | main.rs:78:5:79:14 | struct S1 |
| main.rs:100:13:100:18 | self.a | | main.rs:78:5:79:14 | struct S1 |
| main.rs:105:15:105:18 | SelfParam | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:105:15:105:18 | SelfParam | A | main.rs:80:5:81:14 | struct S2 |
| main.rs:105:29:107:9 | { ... } | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:105:29:107:9 | { ... } | A | main.rs:80:5:81:14 | struct S2 |
| main.rs:106:13:106:30 | Self {...} | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:106:13:106:30 | Self {...} | A | main.rs:80:5:81:14 | struct S2 |
| main.rs:106:23:106:26 | self | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:106:23:106:26 | self | A | main.rs:80:5:81:14 | struct S2 |
| main.rs:106:23:106:28 | self.a | | main.rs:80:5:81:14 | struct S2 |
| main.rs:111:13:111:13 | x | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:111:13:111:13 | x | A | main.rs:78:5:79:14 | struct S1 |
| main.rs:111:17:111:33 | MyThing {...} | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:111:17:111:33 | MyThing {...} | A | main.rs:78:5:79:14 | struct S1 |
| main.rs:111:30:111:31 | S1 | | main.rs:78:5:79:14 | struct S1 |
| main.rs:112:13:112:13 | y | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:112:13:112:13 | y | A | main.rs:80:5:81:14 | struct S2 |
| main.rs:112:17:112:33 | MyThing {...} | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:112:17:112:33 | MyThing {...} | A | main.rs:80:5:81:14 | struct S2 |
| main.rs:112:30:112:31 | S2 | | main.rs:80:5:81:14 | struct S2 |
| main.rs:114:26:114:26 | x | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:114:26:114:26 | x | A | main.rs:78:5:79:14 | struct S1 |
| main.rs:115:26:115:26 | y | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:115:26:115:26 | y | A | main.rs:80:5:81:14 | struct S2 |
| main.rs:117:13:117:13 | x | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:117:13:117:13 | x | A | main.rs:78:5:79:14 | struct S1 |
| main.rs:117:17:117:33 | MyThing {...} | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:117:17:117:33 | MyThing {...} | A | main.rs:78:5:79:14 | struct S1 |
| main.rs:117:30:117:31 | S1 | | main.rs:78:5:79:14 | struct S1 |
| main.rs:118:13:118:13 | y | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:118:13:118:13 | y | A | main.rs:80:5:81:14 | struct S2 |
| main.rs:118:17:118:33 | MyThing {...} | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:118:17:118:33 | MyThing {...} | A | main.rs:80:5:81:14 | struct S2 |
| main.rs:118:30:118:31 | S2 | | main.rs:80:5:81:14 | struct S2 |
| main.rs:120:40:120:40 | x | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:120:40:120:40 | x | A | main.rs:78:5:79:14 | struct S1 |
| main.rs:121:40:121:40 | y | | main.rs:73:5:76:5 | struct MyThing |
| main.rs:121:40:121:40 | y | A | main.rs:80:5:81:14 | struct S2 |
| main.rs:137:15:137:18 | SelfParam | | main.rs:136:5:145:5 | trait MyTrait |
| main.rs:137:15:137:18 | SelfParam | A | main.rs:136:19:136:19 | A |
| main.rs:139:15:139:18 | SelfParam | | main.rs:136:5:145:5 | trait MyTrait |
| main.rs:139:15:139:18 | SelfParam | A | main.rs:136:19:136:19 | A |
| main.rs:142:9:144:9 | { ... } | | main.rs:136:19:136:19 | A |
| main.rs:143:13:143:16 | self | | main.rs:136:5:145:5 | trait MyTrait |
| main.rs:143:13:143:16 | self | A | main.rs:136:19:136:19 | A |
| main.rs:143:13:143:21 | self.m1(...) | | main.rs:136:19:136:19 | A |
| main.rs:147:43:147:43 | x | | main.rs:136:5:145:5 | trait MyTrait |
| main.rs:147:43:147:43 | x | | main.rs:147:26:147:40 | T2 |
| main.rs:147:43:147:43 | x | A | main.rs:147:22:147:23 | T1 |
| main.rs:147:56:149:5 | { ... } | | main.rs:147:22:147:23 | T1 |
| main.rs:148:9:148:9 | x | | main.rs:136:5:145:5 | trait MyTrait |
| main.rs:148:9:148:9 | x | | main.rs:147:26:147:40 | T2 |
| main.rs:148:9:148:9 | x | A | main.rs:147:22:147:23 | T1 |
| main.rs:148:9:148:14 | x.m1(...) | | main.rs:147:22:147:23 | T1 |
| main.rs:152:15:152:18 | SelfParam | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:152:15:152:18 | SelfParam | A | main.rs:151:10:151:10 | T |
| main.rs:152:26:154:9 | { ... } | | main.rs:151:10:151:10 | T |
| main.rs:153:13:153:16 | self | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:153:13:153:16 | self | A | main.rs:151:10:151:10 | T |
| main.rs:153:13:153:18 | self.a | | main.rs:151:10:151:10 | T |
| main.rs:158:13:158:13 | x | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:158:13:158:13 | x | A | main.rs:131:5:132:14 | struct S1 |
| main.rs:158:17:158:33 | MyThing {...} | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:158:17:158:33 | MyThing {...} | A | main.rs:131:5:132:14 | struct S1 |
| main.rs:158:30:158:31 | S1 | | main.rs:131:5:132:14 | struct S1 |
| main.rs:159:13:159:13 | y | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:159:13:159:13 | y | A | main.rs:133:5:134:14 | struct S2 |
| main.rs:159:17:159:33 | MyThing {...} | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:159:17:159:33 | MyThing {...} | A | main.rs:133:5:134:14 | struct S2 |
| main.rs:159:30:159:31 | S2 | | main.rs:133:5:134:14 | struct S2 |
| main.rs:161:26:161:26 | x | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:161:26:161:26 | x | A | main.rs:131:5:132:14 | struct S1 |
| main.rs:161:26:161:31 | x.m1(...) | | main.rs:131:5:132:14 | struct S1 |
| main.rs:162:26:162:26 | y | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:162:26:162:26 | y | A | main.rs:133:5:134:14 | struct S2 |
| main.rs:162:26:162:31 | y.m1(...) | | main.rs:133:5:134:14 | struct S2 |
| main.rs:164:13:164:13 | x | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:164:13:164:13 | x | | main.rs:136:5:145:5 | trait MyTrait |
| main.rs:164:13:164:13 | x | A | main.rs:131:5:132:14 | struct S1 |
| main.rs:164:13:164:13 | x | A | main.rs:131:5:132:14 | struct S1 |
| main.rs:164:17:164:33 | MyThing {...} | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:164:17:164:33 | MyThing {...} | | main.rs:136:5:145:5 | trait MyTrait |
| main.rs:164:17:164:33 | MyThing {...} | A | main.rs:131:5:132:14 | struct S1 |
| main.rs:164:17:164:33 | MyThing {...} | A | main.rs:131:5:132:14 | struct S1 |
| main.rs:164:30:164:31 | S1 | | main.rs:131:5:132:14 | struct S1 |
| main.rs:165:13:165:13 | y | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:165:13:165:13 | y | | main.rs:136:5:145:5 | trait MyTrait |
| main.rs:165:13:165:13 | y | A | main.rs:133:5:134:14 | struct S2 |
| main.rs:165:13:165:13 | y | A | main.rs:133:5:134:14 | struct S2 |
| main.rs:165:17:165:33 | MyThing {...} | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:165:17:165:33 | MyThing {...} | | main.rs:136:5:145:5 | trait MyTrait |
| main.rs:165:17:165:33 | MyThing {...} | A | main.rs:133:5:134:14 | struct S2 |
| main.rs:165:17:165:33 | MyThing {...} | A | main.rs:133:5:134:14 | struct S2 |
| main.rs:165:30:165:31 | S2 | | main.rs:133:5:134:14 | struct S2 |
| main.rs:167:26:167:26 | x | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:167:26:167:26 | x | | main.rs:136:5:145:5 | trait MyTrait |
| main.rs:167:26:167:26 | x | A | main.rs:131:5:132:14 | struct S1 |
| main.rs:167:26:167:26 | x | A | main.rs:131:5:132:14 | struct S1 |
| main.rs:167:26:167:31 | x.m2(...) | | main.rs:131:5:132:14 | struct S1 |
| main.rs:168:26:168:26 | y | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:168:26:168:26 | y | | main.rs:136:5:145:5 | trait MyTrait |
| main.rs:168:26:168:26 | y | A | main.rs:133:5:134:14 | struct S2 |
| main.rs:168:26:168:26 | y | A | main.rs:133:5:134:14 | struct S2 |
| main.rs:168:26:168:31 | y.m2(...) | | main.rs:133:5:134:14 | struct S2 |
| main.rs:170:13:170:13 | x | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:170:13:170:13 | x | A | main.rs:131:5:132:14 | struct S1 |
| main.rs:170:17:170:33 | MyThing {...} | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:170:17:170:33 | MyThing {...} | A | main.rs:131:5:132:14 | struct S1 |
| main.rs:170:30:170:31 | S1 | | main.rs:131:5:132:14 | struct S1 |
| main.rs:171:13:171:13 | y | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:171:13:171:13 | y | A | main.rs:133:5:134:14 | struct S2 |
| main.rs:171:17:171:33 | MyThing {...} | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:171:17:171:33 | MyThing {...} | A | main.rs:133:5:134:14 | struct S2 |
| main.rs:171:30:171:31 | S2 | | main.rs:133:5:134:14 | struct S2 |
| main.rs:173:40:173:40 | x | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:173:40:173:40 | x | A | main.rs:131:5:132:14 | struct S1 |
| main.rs:174:40:174:40 | y | | main.rs:126:5:129:5 | struct MyThing |
| main.rs:174:40:174:40 | y | A | main.rs:133:5:134:14 | struct S2 |
| main.rs:182:15:182:18 | SelfParam | | main.rs:179:5:191:5 | trait MyTrait |
| main.rs:184:15:184:18 | SelfParam | | main.rs:179:5:191:5 | trait MyTrait |
| main.rs:199:15:199:18 | SelfParam | | main.rs:193:5:194:13 | struct S |
| main.rs:199:45:201:9 | { ... } | | main.rs:193:5:194:13 | struct S |
| main.rs:200:13:200:13 | S | | main.rs:193:5:194:13 | struct S |
| main.rs:205:13:205:13 | x | | main.rs:193:5:194:13 | struct S |
| main.rs:205:17:205:17 | S | | main.rs:193:5:194:13 | struct S |
| main.rs:206:26:206:26 | x | | main.rs:193:5:194:13 | struct S |
| main.rs:206:26:206:31 | x.m1(...) | | main.rs:193:5:194:13 | struct S |
| main.rs:208:13:208:13 | x | | main.rs:179:5:191:5 | trait MyTrait |
| main.rs:208:13:208:13 | x | | main.rs:193:5:194:13 | struct S |
| main.rs:208:17:208:17 | S | | main.rs:179:5:191:5 | trait MyTrait |
| main.rs:208:17:208:17 | S | | main.rs:193:5:194:13 | struct S |
| main.rs:209:26:209:26 | x | | main.rs:179:5:191:5 | trait MyTrait |
| main.rs:209:26:209:26 | x | | main.rs:193:5:194:13 | struct S |
| main.rs:226:15:226:18 | SelfParam | | main.rs:214:5:218:5 | enum MyEnum |
| main.rs:226:15:226:18 | SelfParam | A | main.rs:225:10:225:10 | T |
| main.rs:226:26:231:9 | { ... } | | main.rs:225:10:225:10 | T |
| main.rs:227:13:230:13 | match self { ... } | | main.rs:225:10:225:10 | T |
| main.rs:227:19:227:22 | self | | main.rs:214:5:218:5 | enum MyEnum |
| main.rs:227:19:227:22 | self | A | main.rs:225:10:225:10 | T |
| main.rs:235:13:235:13 | x | | main.rs:214:5:218:5 | enum MyEnum |
| main.rs:235:13:235:13 | x | A | main.rs:220:5:221:14 | struct S1 |
| main.rs:235:17:235:30 | ...::C1(...) | | main.rs:214:5:218:5 | enum MyEnum |
| main.rs:235:17:235:30 | ...::C1(...) | A | main.rs:220:5:221:14 | struct S1 |
| main.rs:235:28:235:29 | S1 | | main.rs:220:5:221:14 | struct S1 |
| main.rs:236:13:236:13 | y | | main.rs:214:5:218:5 | enum MyEnum |
| main.rs:236:13:236:13 | y | A | main.rs:222:5:223:14 | struct S2 |
| main.rs:236:17:236:36 | ...::C2 {...} | | main.rs:214:5:218:5 | enum MyEnum |
| main.rs:236:17:236:36 | ...::C2 {...} | A | main.rs:222:5:223:14 | struct S2 |
| main.rs:236:33:236:34 | S2 | | main.rs:222:5:223:14 | struct S2 |
| main.rs:238:26:238:26 | x | | main.rs:214:5:218:5 | enum MyEnum |
| main.rs:238:26:238:26 | x | A | main.rs:220:5:221:14 | struct S1 |
| main.rs:238:26:238:31 | x.m1(...) | | main.rs:220:5:221:14 | struct S1 |
| main.rs:239:26:239:26 | y | | main.rs:214:5:218:5 | enum MyEnum |
| main.rs:239:26:239:26 | y | A | main.rs:222:5:223:14 | struct S2 |
| main.rs:239:26:239:31 | y.m1(...) | | main.rs:222:5:223:14 | struct S2 |
| main.rs:260:15:260:18 | SelfParam | | main.rs:259:5:261:5 | trait MyTrait1 |
| main.rs:260:15:260:18 | SelfParam | A | main.rs:259:20:259:20 | A |
| main.rs:264:15:264:18 | SelfParam | | main.rs:259:5:261:5 | trait MyTrait1 |
| main.rs:264:15:264:18 | SelfParam | | main.rs:263:5:274:5 | trait MyTrait2 |
| main.rs:264:15:264:18 | SelfParam | A | main.rs:263:20:263:20 | A |
| main.rs:264:15:264:18 | SelfParam | A | main.rs:263:20:263:20 | A |
| main.rs:267:9:273:9 | { ... } | | main.rs:263:20:263:20 | A |
| main.rs:268:13:272:13 | if ... {...} else {...} | | main.rs:263:20:263:20 | A |
| main.rs:268:26:270:13 | { ... } | | main.rs:263:20:263:20 | A |
| main.rs:269:17:269:20 | self | | main.rs:259:5:261:5 | trait MyTrait1 |
| main.rs:269:17:269:20 | self | | main.rs:263:5:274:5 | trait MyTrait2 |
| main.rs:269:17:269:20 | self | A | main.rs:263:20:263:20 | A |
| main.rs:269:17:269:20 | self | A | main.rs:263:20:263:20 | A |
| main.rs:269:17:269:25 | self.m1(...) | | main.rs:263:20:263:20 | A |
| main.rs:270:20:272:13 | { ... } | | main.rs:263:20:263:20 | A |
| main.rs:271:17:271:30 | ...::m1(...) | | main.rs:263:20:263:20 | A |
| main.rs:271:26:271:29 | self | | main.rs:259:5:261:5 | trait MyTrait1 |
| main.rs:271:26:271:29 | self | | main.rs:263:5:274:5 | trait MyTrait2 |
| main.rs:271:26:271:29 | self | A | main.rs:263:20:263:20 | A |
| main.rs:271:26:271:29 | self | A | main.rs:263:20:263:20 | A |
| main.rs:277:15:277:18 | SelfParam | | main.rs:263:5:274:5 | trait MyTrait2 |
| main.rs:277:15:277:18 | SelfParam | | main.rs:276:5:287:5 | trait MyTrait3 |
| main.rs:277:15:277:18 | SelfParam | A | main.rs:244:5:247:5 | struct MyThing |
| main.rs:277:15:277:18 | SelfParam | A | main.rs:276:20:276:20 | A |
| main.rs:277:15:277:18 | SelfParam | A.A | main.rs:276:20:276:20 | A |
| main.rs:280:9:286:9 | { ... } | | main.rs:276:20:276:20 | A |
| main.rs:281:13:285:13 | if ... {...} else {...} | | main.rs:276:20:276:20 | A |
| main.rs:281:26:283:13 | { ... } | | main.rs:276:20:276:20 | A |
| main.rs:282:17:282:20 | self | | main.rs:263:5:274:5 | trait MyTrait2 |
| main.rs:282:17:282:20 | self | | main.rs:276:5:287:5 | trait MyTrait3 |
| main.rs:282:17:282:20 | self | A | main.rs:244:5:247:5 | struct MyThing |
| main.rs:282:17:282:20 | self | A | main.rs:276:20:276:20 | A |
| main.rs:282:17:282:20 | self | A.A | main.rs:276:20:276:20 | A |
| main.rs:282:17:282:25 | self.m2(...) | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:282:17:282:25 | self.m2(...) | A | main.rs:276:20:276:20 | A |
| main.rs:282:17:282:27 | ... .a | | main.rs:276:20:276:20 | A |
| main.rs:283:20:285:13 | { ... } | | main.rs:276:20:276:20 | A |
| main.rs:284:17:284:30 | ...::m2(...) | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:284:17:284:30 | ...::m2(...) | A | main.rs:276:20:276:20 | A |
| main.rs:284:17:284:32 | ... .a | | main.rs:276:20:276:20 | A |
| main.rs:284:26:284:29 | self | | main.rs:263:5:274:5 | trait MyTrait2 |
| main.rs:284:26:284:29 | self | | main.rs:276:5:287:5 | trait MyTrait3 |
| main.rs:284:26:284:29 | self | A | main.rs:244:5:247:5 | struct MyThing |
| main.rs:284:26:284:29 | self | A | main.rs:276:20:276:20 | A |
| main.rs:284:26:284:29 | self | A.A | main.rs:276:20:276:20 | A |
| main.rs:290:15:290:18 | SelfParam | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:290:15:290:18 | SelfParam | A | main.rs:289:10:289:10 | T |
| main.rs:290:26:292:9 | { ... } | | main.rs:289:10:289:10 | T |
| main.rs:291:13:291:16 | self | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:291:13:291:16 | self | A | main.rs:289:10:289:10 | T |
| main.rs:291:13:291:18 | self.a | | main.rs:289:10:289:10 | T |
| main.rs:298:15:298:18 | SelfParam | | main.rs:249:5:252:5 | struct MyThing2 |
| main.rs:298:15:298:18 | SelfParam | A | main.rs:297:10:297:10 | T |
| main.rs:298:35:300:9 | { ... } | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:298:35:300:9 | { ... } | A | main.rs:297:10:297:10 | T |
| main.rs:299:13:299:33 | MyThing {...} | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:299:13:299:33 | MyThing {...} | A | main.rs:297:10:297:10 | T |
| main.rs:299:26:299:29 | self | | main.rs:249:5:252:5 | struct MyThing2 |
| main.rs:299:26:299:29 | self | A | main.rs:297:10:297:10 | T |
| main.rs:299:26:299:31 | self.a | | main.rs:297:10:297:10 | T |
| main.rs:308:13:308:13 | x | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:308:13:308:13 | x | A | main.rs:254:5:255:14 | struct S1 |
| main.rs:308:17:308:33 | MyThing {...} | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:308:17:308:33 | MyThing {...} | A | main.rs:254:5:255:14 | struct S1 |
| main.rs:308:30:308:31 | S1 | | main.rs:254:5:255:14 | struct S1 |
| main.rs:309:13:309:13 | y | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:309:13:309:13 | y | A | main.rs:256:5:257:14 | struct S2 |
| main.rs:309:17:309:33 | MyThing {...} | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:309:17:309:33 | MyThing {...} | A | main.rs:256:5:257:14 | struct S2 |
| main.rs:309:30:309:31 | S2 | | main.rs:256:5:257:14 | struct S2 |
| main.rs:311:26:311:26 | x | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:311:26:311:26 | x | A | main.rs:254:5:255:14 | struct S1 |
| main.rs:311:26:311:31 | x.m1(...) | | main.rs:254:5:255:14 | struct S1 |
| main.rs:312:26:312:26 | y | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:312:26:312:26 | y | A | main.rs:256:5:257:14 | struct S2 |
| main.rs:312:26:312:31 | y.m1(...) | | main.rs:256:5:257:14 | struct S2 |
| main.rs:314:13:314:13 | x | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:314:13:314:13 | x | | main.rs:263:5:274:5 | trait MyTrait2 |
| main.rs:314:13:314:13 | x | A | main.rs:254:5:255:14 | struct S1 |
| main.rs:314:13:314:13 | x | A | main.rs:254:5:255:14 | struct S1 |
| main.rs:314:17:314:33 | MyThing {...} | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:314:17:314:33 | MyThing {...} | | main.rs:263:5:274:5 | trait MyTrait2 |
| main.rs:314:17:314:33 | MyThing {...} | A | main.rs:254:5:255:14 | struct S1 |
| main.rs:314:17:314:33 | MyThing {...} | A | main.rs:254:5:255:14 | struct S1 |
| main.rs:314:30:314:31 | S1 | | main.rs:254:5:255:14 | struct S1 |
| main.rs:315:13:315:13 | y | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:315:13:315:13 | y | | main.rs:263:5:274:5 | trait MyTrait2 |
| main.rs:315:13:315:13 | y | A | main.rs:256:5:257:14 | struct S2 |
| main.rs:315:13:315:13 | y | A | main.rs:256:5:257:14 | struct S2 |
| main.rs:315:17:315:33 | MyThing {...} | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:315:17:315:33 | MyThing {...} | | main.rs:263:5:274:5 | trait MyTrait2 |
| main.rs:315:17:315:33 | MyThing {...} | A | main.rs:256:5:257:14 | struct S2 |
| main.rs:315:17:315:33 | MyThing {...} | A | main.rs:256:5:257:14 | struct S2 |
| main.rs:315:30:315:31 | S2 | | main.rs:256:5:257:14 | struct S2 |
| main.rs:317:26:317:26 | x | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:317:26:317:26 | x | | main.rs:263:5:274:5 | trait MyTrait2 |
| main.rs:317:26:317:26 | x | A | main.rs:254:5:255:14 | struct S1 |
| main.rs:317:26:317:26 | x | A | main.rs:254:5:255:14 | struct S1 |
| main.rs:317:26:317:31 | x.m2(...) | | main.rs:254:5:255:14 | struct S1 |
| main.rs:318:26:318:26 | y | | main.rs:244:5:247:5 | struct MyThing |
| main.rs:318:26:318:26 | y | | main.rs:263:5:274:5 | trait MyTrait2 |
| main.rs:318:26:318:26 | y | A | main.rs:256:5:257:14 | struct S2 |
| main.rs:318:26:318:26 | y | A | main.rs:256:5:257:14 | struct S2 |
| main.rs:318:26:318:31 | y.m2(...) | | main.rs:256:5:257:14 | struct S2 |
| main.rs:320:13:320:13 | x | | main.rs:249:5:252:5 | struct MyThing2 |
| main.rs:320:13:320:13 | x | | main.rs:276:5:287:5 | trait MyTrait3 |
| main.rs:320:13:320:13 | x | A | main.rs:254:5:255:14 | struct S1 |
| main.rs:320:13:320:13 | x | A | main.rs:254:5:255:14 | struct S1 |
| main.rs:320:17:320:34 | MyThing2 {...} | | main.rs:249:5:252:5 | struct MyThing2 |
| main.rs:320:17:320:34 | MyThing2 {...} | | main.rs:276:5:287:5 | trait MyTrait3 |
| main.rs:320:17:320:34 | MyThing2 {...} | A | main.rs:254:5:255:14 | struct S1 |
| main.rs:320:17:320:34 | MyThing2 {...} | A | main.rs:254:5:255:14 | struct S1 |
| main.rs:320:31:320:32 | S1 | | main.rs:254:5:255:14 | struct S1 |
| main.rs:321:13:321:13 | y | | main.rs:249:5:252:5 | struct MyThing2 |
| main.rs:321:13:321:13 | y | | main.rs:276:5:287:5 | trait MyTrait3 |
| main.rs:321:13:321:13 | y | A | main.rs:256:5:257:14 | struct S2 |
| main.rs:321:13:321:13 | y | A | main.rs:256:5:257:14 | struct S2 |
| main.rs:321:17:321:34 | MyThing2 {...} | | main.rs:249:5:252:5 | struct MyThing2 |
| main.rs:321:17:321:34 | MyThing2 {...} | | main.rs:276:5:287:5 | trait MyTrait3 |
| main.rs:321:17:321:34 | MyThing2 {...} | A | main.rs:256:5:257:14 | struct S2 |
| main.rs:321:17:321:34 | MyThing2 {...} | A | main.rs:256:5:257:14 | struct S2 |
| main.rs:321:31:321:32 | S2 | | main.rs:256:5:257:14 | struct S2 |
| main.rs:323:26:323:26 | x | | main.rs:249:5:252:5 | struct MyThing2 |
| main.rs:323:26:323:26 | x | | main.rs:276:5:287:5 | trait MyTrait3 |
| main.rs:323:26:323:26 | x | A | main.rs:254:5:255:14 | struct S1 |
| main.rs:323:26:323:26 | x | A | main.rs:254:5:255:14 | struct S1 |
| main.rs:323:26:323:31 | x.m3(...) | | main.rs:254:5:255:14 | struct S1 |
| main.rs:324:26:324:26 | y | | main.rs:249:5:252:5 | struct MyThing2 |
| main.rs:324:26:324:26 | y | | main.rs:276:5:287:5 | trait MyTrait3 |
| main.rs:324:26:324:26 | y | A | main.rs:256:5:257:14 | struct S2 |
| main.rs:324:26:324:26 | y | A | main.rs:256:5:257:14 | struct S2 |
| main.rs:324:26:324:31 | y.m3(...) | | main.rs:256:5:257:14 | struct S2 |
| main.rs:342:22:342:22 | x | | file://:0:0:0:0 | & |
| main.rs:342:22:342:22 | x | &T | main.rs:342:11:342:19 | T |
| main.rs:342:35:344:5 | { ... } | | file://:0:0:0:0 | & |
| main.rs:342:35:344:5 | { ... } | &T | main.rs:342:11:342:19 | T |
| main.rs:343:9:343:9 | x | | file://:0:0:0:0 | & |
| main.rs:343:9:343:9 | x | &T | main.rs:342:11:342:19 | T |
| main.rs:347:17:347:20 | SelfParam | | main.rs:332:5:333:14 | struct S1 |
| main.rs:347:29:349:9 | { ... } | | main.rs:335:5:336:14 | struct S2 |
| main.rs:348:13:348:14 | S2 | | main.rs:335:5:336:14 | struct S2 |
| main.rs:352:21:352:21 | x | | main.rs:352:13:352:14 | T1 |
| main.rs:355:5:357:5 | { ... } | | main.rs:352:17:352:18 | T2 |
| main.rs:356:9:356:9 | x | | main.rs:352:13:352:14 | T1 |
| main.rs:356:9:356:16 | x.into(...) | | main.rs:352:17:352:18 | T2 |
| main.rs:360:13:360:13 | x | | main.rs:332:5:333:14 | struct S1 |
| main.rs:360:17:360:18 | S1 | | main.rs:332:5:333:14 | struct S1 |
| main.rs:361:26:361:31 | id(...) | | file://:0:0:0:0 | & |
| main.rs:361:26:361:31 | id(...) | &T | main.rs:332:5:333:14 | struct S1 |
| main.rs:361:29:361:30 | &x | | file://:0:0:0:0 | & |
| main.rs:361:29:361:30 | &x | &T | main.rs:332:5:333:14 | struct S1 |
| main.rs:361:30:361:30 | x | | main.rs:332:5:333:14 | struct S1 |
| main.rs:363:13:363:13 | x | | main.rs:332:5:333:14 | struct S1 |
| main.rs:363:17:363:18 | S1 | | main.rs:332:5:333:14 | struct S1 |
| main.rs:364:26:364:37 | id::<...>(...) | | file://:0:0:0:0 | & |
| main.rs:364:26:364:37 | id::<...>(...) | &T | main.rs:332:5:333:14 | struct S1 |
| main.rs:364:35:364:36 | &x | | file://:0:0:0:0 | & |
| main.rs:364:35:364:36 | &x | &T | main.rs:332:5:333:14 | struct S1 |
| main.rs:364:36:364:36 | x | | main.rs:332:5:333:14 | struct S1 |
| main.rs:366:13:366:13 | x | | main.rs:332:5:333:14 | struct S1 |
| main.rs:366:17:366:18 | S1 | | main.rs:332:5:333:14 | struct S1 |
| main.rs:367:26:367:44 | id::<...>(...) | | file://:0:0:0:0 | & |
| main.rs:367:26:367:44 | id::<...>(...) | &T | main.rs:332:5:333:14 | struct S1 |
| main.rs:367:42:367:43 | &x | | file://:0:0:0:0 | & |
| main.rs:367:42:367:43 | &x | &T | main.rs:332:5:333:14 | struct S1 |
| main.rs:367:43:367:43 | x | | main.rs:332:5:333:14 | struct S1 |
| main.rs:369:13:369:13 | x | | main.rs:332:5:333:14 | struct S1 |
| main.rs:369:17:369:18 | S1 | | main.rs:332:5:333:14 | struct S1 |
| main.rs:370:9:370:25 | into::<...>(...) | | main.rs:335:5:336:14 | struct S2 |
| main.rs:370:24:370:24 | x | | main.rs:332:5:333:14 | struct S1 |
| main.rs:372:13:372:13 | x | | main.rs:332:5:333:14 | struct S1 |
| main.rs:372:17:372:18 | S1 | | main.rs:332:5:333:14 | struct S1 |
| main.rs:373:13:373:13 | y | | main.rs:335:5:336:14 | struct S2 |
| main.rs:373:21:373:27 | into(...) | | main.rs:335:5:336:14 | struct S2 |
| main.rs:373:26:373:26 | x | | main.rs:332:5:333:14 | struct S1 |
| main.rs:385:16:385:24 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:385:16:385:24 | SelfParam | &T | main.rs:384:5:390:5 | trait MyTrait |
| main.rs:385:16:385:24 | SelfParam | &T.S | main.rs:384:19:384:19 | S |
| main.rs:385:27:385:31 | value | | main.rs:384:19:384:19 | S |
| main.rs:387:21:387:29 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:387:21:387:29 | SelfParam | &T | main.rs:384:5:390:5 | trait MyTrait |
| main.rs:387:21:387:29 | SelfParam | &T.S | main.rs:384:19:384:19 | S |
| main.rs:387:32:387:36 | value | | main.rs:384:19:384:19 | S |
| main.rs:388:13:388:16 | self | | file://:0:0:0:0 | & |
| main.rs:388:13:388:16 | self | &T | main.rs:384:5:390:5 | trait MyTrait |
| main.rs:388:13:388:16 | self | &T.S | main.rs:384:19:384:19 | S |
| main.rs:388:22:388:26 | value | | main.rs:384:19:384:19 | S |
| main.rs:393:16:393:24 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:393:16:393:24 | SelfParam | &T | main.rs:378:5:382:5 | enum MyOption |
| main.rs:393:16:393:24 | SelfParam | &T.T | main.rs:392:10:392:10 | T |
| main.rs:393:27:393:31 | value | | main.rs:392:10:392:10 | T |
| main.rs:397:26:399:9 | { ... } | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:397:26:399:9 | { ... } | T | main.rs:396:10:396:10 | T |
| main.rs:398:13:398:30 | ...::MyNone(...) | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:398:13:398:30 | ...::MyNone(...) | T | main.rs:396:10:396:10 | T |
| main.rs:403:20:403:23 | SelfParam | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:403:20:403:23 | SelfParam | T | main.rs:378:5:382:5 | enum MyOption |
| main.rs:403:20:403:23 | SelfParam | T.T | main.rs:402:10:402:10 | T |
| main.rs:403:41:408:9 | { ... } | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:403:41:408:9 | { ... } | T | main.rs:402:10:402:10 | T |
| main.rs:404:13:407:13 | match self { ... } | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:404:13:407:13 | match self { ... } | T | main.rs:402:10:402:10 | T |
| main.rs:404:19:404:22 | self | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:404:19:404:22 | self | T | main.rs:378:5:382:5 | enum MyOption |
| main.rs:404:19:404:22 | self | T.T | main.rs:402:10:402:10 | T |
| main.rs:405:39:405:56 | ...::MyNone(...) | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:415:13:415:14 | x1 | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:415:18:415:37 | ...::new(...) | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:416:26:416:27 | x1 | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:418:13:418:18 | mut x2 | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:418:13:418:18 | mut x2 | T | main.rs:411:5:412:13 | struct S |
| main.rs:418:22:418:36 | ...::new(...) | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:418:22:418:36 | ...::new(...) | T | main.rs:411:5:412:13 | struct S |
| main.rs:419:9:419:10 | x2 | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:419:9:419:10 | x2 | T | main.rs:411:5:412:13 | struct S |
| main.rs:419:16:419:16 | S | | main.rs:411:5:412:13 | struct S |
| main.rs:420:26:420:27 | x2 | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:420:26:420:27 | x2 | T | main.rs:411:5:412:13 | struct S |
| main.rs:422:13:422:18 | mut x3 | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:422:13:422:18 | mut x3 | | main.rs:384:5:390:5 | trait MyTrait |
| main.rs:422:13:422:18 | mut x3 | S | main.rs:411:5:412:13 | struct S |
| main.rs:422:22:422:36 | ...::new(...) | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:422:22:422:36 | ...::new(...) | | main.rs:384:5:390:5 | trait MyTrait |
| main.rs:422:22:422:36 | ...::new(...) | S | main.rs:411:5:412:13 | struct S |
| main.rs:423:9:423:10 | x3 | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:423:9:423:10 | x3 | | main.rs:384:5:390:5 | trait MyTrait |
| main.rs:423:9:423:10 | x3 | S | main.rs:411:5:412:13 | struct S |
| main.rs:423:21:423:21 | S | | main.rs:411:5:412:13 | struct S |
| main.rs:424:26:424:27 | x3 | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:424:26:424:27 | x3 | | main.rs:384:5:390:5 | trait MyTrait |
| main.rs:424:26:424:27 | x3 | S | main.rs:411:5:412:13 | struct S |
| main.rs:426:13:426:18 | mut x4 | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:426:13:426:18 | mut x4 | T | main.rs:411:5:412:13 | struct S |
| main.rs:426:22:426:36 | ...::new(...) | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:426:22:426:36 | ...::new(...) | T | main.rs:411:5:412:13 | struct S |
| main.rs:427:23:427:29 | &mut x4 | | file://:0:0:0:0 | & |
| main.rs:427:23:427:29 | &mut x4 | &T | main.rs:378:5:382:5 | enum MyOption |
| main.rs:427:23:427:29 | &mut x4 | &T.T | main.rs:411:5:412:13 | struct S |
| main.rs:427:28:427:29 | x4 | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:427:28:427:29 | x4 | T | main.rs:411:5:412:13 | struct S |
| main.rs:427:32:427:32 | S | | main.rs:411:5:412:13 | struct S |
| main.rs:428:26:428:27 | x4 | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:428:26:428:27 | x4 | T | main.rs:411:5:412:13 | struct S |
| main.rs:430:13:430:14 | x5 | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:430:13:430:14 | x5 | T | main.rs:378:5:382:5 | enum MyOption |
| main.rs:430:13:430:14 | x5 | T.T | main.rs:411:5:412:13 | struct S |
| main.rs:430:18:430:58 | ...::MySome(...) | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:430:18:430:58 | ...::MySome(...) | T | main.rs:378:5:382:5 | enum MyOption |
| main.rs:430:18:430:58 | ...::MySome(...) | T.T | main.rs:411:5:412:13 | struct S |
| main.rs:430:35:430:57 | ...::MyNone(...) | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:430:35:430:57 | ...::MyNone(...) | T | main.rs:411:5:412:13 | struct S |
| main.rs:431:26:431:27 | x5 | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:431:26:431:27 | x5 | T | main.rs:378:5:382:5 | enum MyOption |
| main.rs:431:26:431:27 | x5 | T.T | main.rs:411:5:412:13 | struct S |
| main.rs:433:13:433:14 | x6 | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:433:13:433:14 | x6 | T | main.rs:378:5:382:5 | enum MyOption |
| main.rs:433:13:433:14 | x6 | T.T | main.rs:411:5:412:13 | struct S |
| main.rs:433:18:433:58 | ...::MySome(...) | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:433:18:433:58 | ...::MySome(...) | T | main.rs:378:5:382:5 | enum MyOption |
| main.rs:433:18:433:58 | ...::MySome(...) | T.T | main.rs:411:5:412:13 | struct S |
| main.rs:433:35:433:57 | ...::MyNone(...) | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:433:35:433:57 | ...::MyNone(...) | T | main.rs:411:5:412:13 | struct S |
| main.rs:434:26:434:61 | ...::flatten(...) | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:434:26:434:61 | ...::flatten(...) | T | main.rs:411:5:412:13 | struct S |
| main.rs:434:59:434:60 | x6 | | main.rs:378:5:382:5 | enum MyOption |
| main.rs:434:59:434:60 | x6 | T | main.rs:378:5:382:5 | enum MyOption |
| main.rs:434:59:434:60 | x6 | T.T | main.rs:411:5:412:13 | struct S |
| main.rs:447:15:447:18 | SelfParam | | main.rs:440:5:441:19 | struct S |
| main.rs:447:15:447:18 | SelfParam | T | main.rs:446:10:446:10 | T |
| main.rs:447:26:449:9 | { ... } | | main.rs:446:10:446:10 | T |
| main.rs:448:13:448:16 | self | | main.rs:440:5:441:19 | struct S |
| main.rs:448:13:448:16 | self | T | main.rs:446:10:446:10 | T |
| main.rs:448:13:448:18 | self.0 | | main.rs:446:10:446:10 | T |
| main.rs:451:15:451:19 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:451:15:451:19 | SelfParam | &T | main.rs:440:5:441:19 | struct S |
| main.rs:451:15:451:19 | SelfParam | &T.T | main.rs:446:10:446:10 | T |
| main.rs:451:28:453:9 | { ... } | | file://:0:0:0:0 | & |
| main.rs:451:28:453:9 | { ... } | &T | main.rs:446:10:446:10 | T |
| main.rs:452:13:452:19 | &... | | file://:0:0:0:0 | & |
| main.rs:452:13:452:19 | &... | &T | main.rs:446:10:446:10 | T |
| main.rs:452:14:452:17 | self | | file://:0:0:0:0 | & |
| main.rs:452:14:452:17 | self | &T | main.rs:440:5:441:19 | struct S |
| main.rs:452:14:452:17 | self | &T.T | main.rs:446:10:446:10 | T |
| main.rs:452:14:452:19 | self.0 | | main.rs:446:10:446:10 | T |
| main.rs:455:15:455:25 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:455:15:455:25 | SelfParam | &T | main.rs:440:5:441:19 | struct S |
| main.rs:455:15:455:25 | SelfParam | &T.T | main.rs:446:10:446:10 | T |
| main.rs:455:34:457:9 | { ... } | | file://:0:0:0:0 | & |
| main.rs:455:34:457:9 | { ... } | &T | main.rs:446:10:446:10 | T |
| main.rs:456:13:456:19 | &... | | file://:0:0:0:0 | & |
| main.rs:456:13:456:19 | &... | &T | main.rs:446:10:446:10 | T |
| main.rs:456:14:456:17 | self | | file://:0:0:0:0 | & |
| main.rs:456:14:456:17 | self | &T | main.rs:440:5:441:19 | struct S |
| main.rs:456:14:456:17 | self | &T.T | main.rs:446:10:446:10 | T |
| main.rs:456:14:456:19 | self.0 | | main.rs:446:10:446:10 | T |
| main.rs:461:13:461:14 | x1 | | main.rs:440:5:441:19 | struct S |
| main.rs:461:13:461:14 | x1 | T | main.rs:443:5:444:14 | struct S2 |
| main.rs:461:18:461:22 | S(...) | | main.rs:440:5:441:19 | struct S |
| main.rs:461:18:461:22 | S(...) | T | main.rs:443:5:444:14 | struct S2 |
| main.rs:461:20:461:21 | S2 | | main.rs:443:5:444:14 | struct S2 |
| main.rs:462:26:462:27 | x1 | | main.rs:440:5:441:19 | struct S |
| main.rs:462:26:462:27 | x1 | T | main.rs:443:5:444:14 | struct S2 |
| main.rs:462:26:462:32 | x1.m1(...) | | main.rs:443:5:444:14 | struct S2 |
| main.rs:464:13:464:14 | x2 | | main.rs:440:5:441:19 | struct S |
| main.rs:464:13:464:14 | x2 | T | main.rs:443:5:444:14 | struct S2 |
| main.rs:464:18:464:22 | S(...) | | main.rs:440:5:441:19 | struct S |
| main.rs:464:18:464:22 | S(...) | T | main.rs:443:5:444:14 | struct S2 |
| main.rs:464:20:464:21 | S2 | | main.rs:443:5:444:14 | struct S2 |
| main.rs:466:26:466:27 | x2 | | main.rs:440:5:441:19 | struct S |
| main.rs:466:26:466:27 | x2 | T | main.rs:443:5:444:14 | struct S2 |
| main.rs:466:26:466:32 | x2.m2(...) | | file://:0:0:0:0 | & |
| main.rs:466:26:466:32 | x2.m2(...) | &T | main.rs:443:5:444:14 | struct S2 |
| main.rs:467:26:467:27 | x2 | | main.rs:440:5:441:19 | struct S |
| main.rs:467:26:467:27 | x2 | T | main.rs:443:5:444:14 | struct S2 |
| main.rs:467:26:467:32 | x2.m3(...) | | file://:0:0:0:0 | & |
| main.rs:467:26:467:32 | x2.m3(...) | &T | main.rs:443:5:444:14 | struct S2 |
| main.rs:469:13:469:14 | x3 | | main.rs:440:5:441:19 | struct S |
| main.rs:469:13:469:14 | x3 | T | main.rs:443:5:444:14 | struct S2 |
| main.rs:469:18:469:22 | S(...) | | main.rs:440:5:441:19 | struct S |
| main.rs:469:18:469:22 | S(...) | T | main.rs:443:5:444:14 | struct S2 |
| main.rs:469:20:469:21 | S2 | | main.rs:443:5:444:14 | struct S2 |
| main.rs:471:26:471:41 | ...::m2(...) | | file://:0:0:0:0 | & |
| main.rs:471:26:471:41 | ...::m2(...) | &T | main.rs:443:5:444:14 | struct S2 |
| main.rs:471:38:471:40 | &x3 | | file://:0:0:0:0 | & |
| main.rs:471:38:471:40 | &x3 | &T | main.rs:440:5:441:19 | struct S |
| main.rs:471:38:471:40 | &x3 | &T.T | main.rs:443:5:444:14 | struct S2 |
| main.rs:471:39:471:40 | x3 | | main.rs:440:5:441:19 | struct S |
| main.rs:471:39:471:40 | x3 | T | main.rs:443:5:444:14 | struct S2 |
| main.rs:472:26:472:41 | ...::m3(...) | | file://:0:0:0:0 | & |
| main.rs:472:26:472:41 | ...::m3(...) | &T | main.rs:443:5:444:14 | struct S2 |
| main.rs:472:38:472:40 | &x3 | | file://:0:0:0:0 | & |
| main.rs:472:38:472:40 | &x3 | &T | main.rs:440:5:441:19 | struct S |
| main.rs:472:38:472:40 | &x3 | &T.T | main.rs:443:5:444:14 | struct S2 |
| main.rs:472:39:472:40 | x3 | | main.rs:440:5:441:19 | struct S |
| main.rs:472:39:472:40 | x3 | T | main.rs:443:5:444:14 | struct S2 |
| main.rs:474:13:474:14 | x4 | | file://:0:0:0:0 | & |
| main.rs:474:13:474:14 | x4 | &T | main.rs:440:5:441:19 | struct S |
| main.rs:474:13:474:14 | x4 | &T.T | main.rs:443:5:444:14 | struct S2 |
| main.rs:474:18:474:23 | &... | | file://:0:0:0:0 | & |
| main.rs:474:18:474:23 | &... | &T | main.rs:440:5:441:19 | struct S |
| main.rs:474:18:474:23 | &... | &T.T | main.rs:443:5:444:14 | struct S2 |
| main.rs:474:19:474:23 | S(...) | | main.rs:440:5:441:19 | struct S |
| main.rs:474:19:474:23 | S(...) | T | main.rs:443:5:444:14 | struct S2 |
| main.rs:474:21:474:22 | S2 | | main.rs:443:5:444:14 | struct S2 |
| main.rs:476:26:476:27 | x4 | | file://:0:0:0:0 | & |
| main.rs:476:26:476:27 | x4 | &T | main.rs:440:5:441:19 | struct S |
| main.rs:476:26:476:27 | x4 | &T.T | main.rs:443:5:444:14 | struct S2 |
| main.rs:476:26:476:32 | x4.m2(...) | | file://:0:0:0:0 | & |
| main.rs:476:26:476:32 | x4.m2(...) | &T | main.rs:443:5:444:14 | struct S2 |
| main.rs:477:26:477:27 | x4 | | file://:0:0:0:0 | & |
| main.rs:477:26:477:27 | x4 | &T | main.rs:440:5:441:19 | struct S |
| main.rs:477:26:477:27 | x4 | &T.T | main.rs:443:5:444:14 | struct S2 |
| main.rs:477:26:477:32 | x4.m3(...) | | file://:0:0:0:0 | & |
| main.rs:477:26:477:32 | x4.m3(...) | &T | main.rs:443:5:444:14 | struct S2 |
| main.rs:479:13:479:14 | x5 | | file://:0:0:0:0 | & |
| main.rs:479:13:479:14 | x5 | &T | main.rs:440:5:441:19 | struct S |
| main.rs:479:13:479:14 | x5 | &T.T | main.rs:443:5:444:14 | struct S2 |
| main.rs:479:18:479:23 | &... | | file://:0:0:0:0 | & |
| main.rs:479:18:479:23 | &... | &T | main.rs:440:5:441:19 | struct S |
| main.rs:479:18:479:23 | &... | &T.T | main.rs:443:5:444:14 | struct S2 |
| main.rs:479:19:479:23 | S(...) | | main.rs:440:5:441:19 | struct S |
| main.rs:479:19:479:23 | S(...) | T | main.rs:443:5:444:14 | struct S2 |
| main.rs:479:21:479:22 | S2 | | main.rs:443:5:444:14 | struct S2 |
| main.rs:481:26:481:27 | x5 | | file://:0:0:0:0 | & |
| main.rs:481:26:481:27 | x5 | &T | main.rs:440:5:441:19 | struct S |
| main.rs:481:26:481:27 | x5 | &T.T | main.rs:443:5:444:14 | struct S2 |
| main.rs:481:26:481:32 | x5.m1(...) | | main.rs:443:5:444:14 | struct S2 |
| main.rs:482:26:482:27 | x5 | | file://:0:0:0:0 | & |
| main.rs:482:26:482:27 | x5 | &T | main.rs:440:5:441:19 | struct S |
| main.rs:482:26:482:27 | x5 | &T.T | main.rs:443:5:444:14 | struct S2 |
| main.rs:482:26:482:29 | x5.0 | | main.rs:443:5:444:14 | struct S2 |
| main.rs:484:13:484:14 | x6 | | file://:0:0:0:0 | & |
| main.rs:484:13:484:14 | x6 | &T | main.rs:440:5:441:19 | struct S |
| main.rs:484:13:484:14 | x6 | &T.T | main.rs:443:5:444:14 | struct S2 |
| main.rs:484:18:484:23 | &... | | file://:0:0:0:0 | & |
| main.rs:484:18:484:23 | &... | &T | main.rs:440:5:441:19 | struct S |
| main.rs:484:18:484:23 | &... | &T.T | main.rs:443:5:444:14 | struct S2 |
| main.rs:484:19:484:23 | S(...) | | main.rs:440:5:441:19 | struct S |
| main.rs:484:19:484:23 | S(...) | T | main.rs:443:5:444:14 | struct S2 |
| main.rs:484:21:484:22 | S2 | | main.rs:443:5:444:14 | struct S2 |
| main.rs:486:26:486:30 | (...) | | main.rs:440:5:441:19 | struct S |
| main.rs:486:26:486:30 | (...) | T | main.rs:443:5:444:14 | struct S2 |
| main.rs:486:26:486:35 | ... .m1(...) | | main.rs:443:5:444:14 | struct S2 |
| main.rs:486:27:486:29 | * ... | | main.rs:440:5:441:19 | struct S |
| main.rs:486:27:486:29 | * ... | T | main.rs:443:5:444:14 | struct S2 |
| main.rs:486:28:486:29 | x6 | | file://:0:0:0:0 | & |
| main.rs:486:28:486:29 | x6 | &T | main.rs:440:5:441:19 | struct S |
| main.rs:486:28:486:29 | x6 | &T.T | main.rs:443:5:444:14 | struct S2 |
| main.rs:492:16:492:20 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:492:16:492:20 | SelfParam | &T | main.rs:491:5:497:5 | trait MyTrait |
| main.rs:494:16:494:20 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:494:16:494:20 | SelfParam | &T | main.rs:491:5:497:5 | trait MyTrait |
| main.rs:494:32:496:9 | { ... } | | file://:0:0:0:0 | & |
| main.rs:494:32:496:9 | { ... } | &T | main.rs:491:5:497:5 | trait MyTrait |
| main.rs:495:13:495:16 | self | | file://:0:0:0:0 | & |
| main.rs:495:13:495:16 | self | &T | main.rs:491:5:497:5 | trait MyTrait |
| main.rs:495:13:495:22 | self.foo(...) | | file://:0:0:0:0 | & |
| main.rs:495:13:495:22 | self.foo(...) | &T | main.rs:491:5:497:5 | trait MyTrait |
| main.rs:502:16:502:20 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:502:16:502:20 | SelfParam | &T | main.rs:499:5:499:20 | struct MyStruct |
| main.rs:502:36:504:9 | { ... } | | file://:0:0:0:0 | & |
| main.rs:502:36:504:9 | { ... } | &T | main.rs:499:5:499:20 | struct MyStruct |
| main.rs:503:13:503:16 | self | | file://:0:0:0:0 | & |
| main.rs:503:13:503:16 | self | &T | main.rs:499:5:499:20 | struct MyStruct |
| main.rs:508:13:508:13 | x | | main.rs:491:5:497:5 | trait MyTrait |
| main.rs:508:13:508:13 | x | | main.rs:499:5:499:20 | struct MyStruct |
| main.rs:508:17:508:24 | MyStruct | | main.rs:491:5:497:5 | trait MyTrait |
| main.rs:508:17:508:24 | MyStruct | | main.rs:499:5:499:20 | struct MyStruct |
| main.rs:509:9:509:9 | x | | main.rs:491:5:497:5 | trait MyTrait |
| main.rs:509:9:509:9 | x | | main.rs:499:5:499:20 | struct MyStruct |
| main.rs:509:9:509:15 | x.bar(...) | | file://:0:0:0:0 | & |
| main.rs:509:9:509:15 | x.bar(...) | &T | main.rs:491:5:497:5 | trait MyTrait |
| main.rs:509:9:509:15 | x.bar(...) | &T | main.rs:499:5:499:20 | struct MyStruct |
| main.rs:519:16:519:20 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:519:16:519:20 | SelfParam | &T | main.rs:516:5:516:26 | struct MyStruct |
| main.rs:519:16:519:20 | SelfParam | &T.T | main.rs:518:10:518:10 | T |
| main.rs:519:32:521:9 | { ... } | | file://:0:0:0:0 | & |
| main.rs:519:32:521:9 | { ... } | &T | main.rs:516:5:516:26 | struct MyStruct |
| main.rs:519:32:521:9 | { ... } | &T.T | main.rs:518:10:518:10 | T |
| main.rs:520:13:520:16 | self | | file://:0:0:0:0 | & |
| main.rs:520:13:520:16 | self | &T | main.rs:516:5:516:26 | struct MyStruct |
| main.rs:520:13:520:16 | self | &T.T | main.rs:518:10:518:10 | T |
| main.rs:525:13:525:13 | x | | main.rs:516:5:516:26 | struct MyStruct |
| main.rs:525:13:525:13 | x | T | main.rs:514:5:514:13 | struct S |
| main.rs:525:17:525:27 | MyStruct(...) | | main.rs:516:5:516:26 | struct MyStruct |
| main.rs:525:17:525:27 | MyStruct(...) | T | main.rs:514:5:514:13 | struct S |
| main.rs:525:26:525:26 | S | | main.rs:514:5:514:13 | struct S |
| main.rs:526:9:526:9 | x | | main.rs:516:5:516:26 | struct MyStruct |
| main.rs:526:9:526:9 | x | T | main.rs:514:5:514:13 | struct S |
| main.rs:526:9:526:15 | x.foo(...) | | file://:0:0:0:0 | & |
| main.rs:526:9:526:15 | x.foo(...) | &T | main.rs:516:5:516:26 | struct MyStruct |
| main.rs:526:9:526:15 | x.foo(...) | &T.T | main.rs:514:5:514:13 | struct S |
| main.rs:534:15:534:19 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:534:15:534:19 | SelfParam | &T | main.rs:531:5:531:13 | struct S |
| main.rs:534:31:536:9 | { ... } | | file://:0:0:0:0 | & |
| main.rs:534:31:536:9 | { ... } | &T | main.rs:531:5:531:13 | struct S |
| main.rs:535:13:535:19 | &... | | file://:0:0:0:0 | & |
| main.rs:535:13:535:19 | &... | &T | main.rs:531:5:531:13 | struct S |
| main.rs:535:14:535:19 | &... | | file://:0:0:0:0 | & |
| main.rs:535:14:535:19 | &... | &T | main.rs:531:5:531:13 | struct S |
| main.rs:535:15:535:19 | &self | | file://:0:0:0:0 | & |
| main.rs:535:15:535:19 | &self | &T | main.rs:531:5:531:13 | struct S |
| main.rs:535:16:535:19 | self | | file://:0:0:0:0 | & |
| main.rs:535:16:535:19 | self | &T | main.rs:531:5:531:13 | struct S |
| main.rs:538:15:538:25 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:538:15:538:25 | SelfParam | &T | main.rs:531:5:531:13 | struct S |
| main.rs:538:37:540:9 | { ... } | | file://:0:0:0:0 | & |
| main.rs:538:37:540:9 | { ... } | &T | main.rs:531:5:531:13 | struct S |
| main.rs:539:13:539:19 | &... | | file://:0:0:0:0 | & |
| main.rs:539:13:539:19 | &... | &T | main.rs:531:5:531:13 | struct S |
| main.rs:539:14:539:19 | &... | | file://:0:0:0:0 | & |
| main.rs:539:14:539:19 | &... | &T | main.rs:531:5:531:13 | struct S |
| main.rs:539:15:539:19 | &self | | file://:0:0:0:0 | & |
| main.rs:539:15:539:19 | &self | &T | main.rs:531:5:531:13 | struct S |
| main.rs:539:16:539:19 | self | | file://:0:0:0:0 | & |
| main.rs:539:16:539:19 | self | &T | main.rs:531:5:531:13 | struct S |
| main.rs:542:15:542:15 | x | | file://:0:0:0:0 | & |
| main.rs:542:15:542:15 | x | &T | main.rs:531:5:531:13 | struct S |
| main.rs:542:34:544:9 | { ... } | | file://:0:0:0:0 | & |
| main.rs:542:34:544:9 | { ... } | &T | main.rs:531:5:531:13 | struct S |
| main.rs:543:13:543:13 | x | | file://:0:0:0:0 | & |
| main.rs:543:13:543:13 | x | &T | main.rs:531:5:531:13 | struct S |
| main.rs:546:15:546:15 | x | | file://:0:0:0:0 | & |
| main.rs:546:15:546:15 | x | &T | main.rs:531:5:531:13 | struct S |
| main.rs:546:34:548:9 | { ... } | | file://:0:0:0:0 | & |
| main.rs:546:34:548:9 | { ... } | &T | main.rs:531:5:531:13 | struct S |
| main.rs:547:13:547:16 | &... | | file://:0:0:0:0 | & |
| main.rs:547:13:547:16 | &... | &T | main.rs:531:5:531:13 | struct S |
| main.rs:547:14:547:16 | &... | | file://:0:0:0:0 | & |
| main.rs:547:14:547:16 | &... | &T | main.rs:531:5:531:13 | struct S |
| main.rs:547:15:547:16 | &x | | file://:0:0:0:0 | & |
| main.rs:547:15:547:16 | &x | &T | main.rs:531:5:531:13 | struct S |
| main.rs:547:16:547:16 | x | | file://:0:0:0:0 | & |
| main.rs:547:16:547:16 | x | &T | main.rs:531:5:531:13 | struct S |
| main.rs:552:13:552:13 | x | | main.rs:531:5:531:13 | struct S |
| main.rs:552:17:552:20 | S {...} | | main.rs:531:5:531:13 | struct S |
| main.rs:553:9:553:9 | x | | main.rs:531:5:531:13 | struct S |
| main.rs:553:9:553:14 | x.f1(...) | | file://:0:0:0:0 | & |
| main.rs:553:9:553:14 | x.f1(...) | &T | main.rs:531:5:531:13 | struct S |
| main.rs:554:9:554:9 | x | | main.rs:531:5:531:13 | struct S |
| main.rs:554:9:554:14 | x.f2(...) | | file://:0:0:0:0 | & |
| main.rs:554:9:554:14 | x.f2(...) | &T | main.rs:531:5:531:13 | struct S |
| main.rs:555:9:555:17 | ...::f3(...) | | file://:0:0:0:0 | & |
| main.rs:555:9:555:17 | ...::f3(...) | &T | main.rs:531:5:531:13 | struct S |
| main.rs:555:15:555:16 | &x | | file://:0:0:0:0 | & |
| main.rs:555:15:555:16 | &x | &T | main.rs:531:5:531:13 | struct S |
| main.rs:555:16:555:16 | x | | main.rs:531:5:531:13 | struct S |
| main.rs:560:5:560:11 | ...::f(...) | | main.rs:2:5:2:21 | struct Foo |
| main.rs:561:5:561:33 | ...::g(...) | | main.rs:2:5:2:21 | struct Foo |
| main.rs:561:11:561:20 | ...::Foo {...} | | main.rs:2:5:2:21 | struct Foo |
| main.rs:561:23:561:32 | ...::Foo {...} | | main.rs:2:5:2:21 | struct Foo |
resolveMethodCallExpr
| main.rs:23:9:23:14 | x.m1(...) | main.rs:5:9:7:9 | fn m1 |
| main.rs:24:9:24:14 | y.m2(...) | main.rs:9:9:11:9 | fn m2 |
| main.rs:67:26:67:31 | x.m2(...) | main.rs:52:9:54:9 | fn m2 |
| main.rs:68:26:68:31 | y.m2(...) | main.rs:52:9:54:9 | fn m2 |
| main.rs:95:9:95:14 | x.m1(...) | main.rs:84:9:84:25 | fn m1 |
| main.rs:143:13:143:21 | self.m1(...) | main.rs:137:9:137:25 | fn m1 |
| main.rs:148:9:148:14 | x.m1(...) | main.rs:137:9:137:25 | fn m1 |
| main.rs:161:26:161:31 | x.m1(...) | main.rs:152:9:154:9 | fn m1 |
| main.rs:162:26:162:31 | y.m1(...) | main.rs:152:9:154:9 | fn m1 |
| main.rs:167:26:167:31 | x.m2(...) | main.rs:139:9:144:9 | fn m2 |
| main.rs:168:26:168:31 | y.m2(...) | main.rs:139:9:144:9 | fn m2 |
| main.rs:206:26:206:31 | x.m1(...) | main.rs:199:9:201:9 | fn m1 |
| main.rs:209:26:209:31 | x.m2(...) | main.rs:184:9:190:9 | fn m2 |
| main.rs:238:26:238:31 | x.m1(...) | main.rs:226:9:231:9 | fn m1 |
| main.rs:239:26:239:31 | y.m1(...) | main.rs:226:9:231:9 | fn m1 |
| main.rs:269:17:269:25 | self.m1(...) | main.rs:260:9:260:25 | fn m1 |
| main.rs:282:17:282:25 | self.m2(...) | main.rs:264:9:273:9 | fn m2 |
| main.rs:311:26:311:31 | x.m1(...) | main.rs:290:9:292:9 | fn m1 |
| main.rs:312:26:312:31 | y.m1(...) | main.rs:290:9:292:9 | fn m1 |
| main.rs:317:26:317:31 | x.m2(...) | main.rs:264:9:273:9 | fn m2 |
| main.rs:318:26:318:31 | y.m2(...) | main.rs:264:9:273:9 | fn m2 |
| main.rs:323:26:323:31 | x.m3(...) | main.rs:277:9:286:9 | fn m3 |
| main.rs:324:26:324:31 | y.m3(...) | main.rs:277:9:286:9 | fn m3 |
| main.rs:388:13:388:27 | self.set(...) | main.rs:385:9:385:36 | fn set |
| main.rs:419:9:419:17 | x2.set(...) | main.rs:393:9:393:38 | fn set |
| main.rs:423:9:423:22 | x3.call_set(...) | main.rs:387:9:389:9 | fn call_set |
| main.rs:462:26:462:32 | x1.m1(...) | main.rs:447:9:449:9 | fn m1 |
| main.rs:466:26:466:32 | x2.m2(...) | main.rs:451:9:453:9 | fn m2 |
| main.rs:467:26:467:32 | x2.m3(...) | main.rs:455:9:457:9 | fn m3 |
| main.rs:476:26:476:32 | x4.m2(...) | main.rs:451:9:453:9 | fn m2 |
| main.rs:477:26:477:32 | x4.m3(...) | main.rs:455:9:457:9 | fn m3 |
| main.rs:481:26:481:32 | x5.m1(...) | main.rs:447:9:449:9 | fn m1 |
| main.rs:486:26:486:35 | ... .m1(...) | main.rs:447:9:449:9 | fn m1 |
| main.rs:495:13:495:22 | self.foo(...) | main.rs:492:9:492:31 | fn foo |
| main.rs:509:9:509:15 | x.bar(...) | main.rs:494:9:496:9 | fn bar |
| main.rs:526:9:526:15 | x.foo(...) | main.rs:519:9:521:9 | fn foo |
| main.rs:553:9:553:14 | x.f1(...) | main.rs:534:9:536:9 | fn f1 |
| main.rs:554:9:554:14 | x.f2(...) | main.rs:538:9:540:9 | fn f2 |
resolveFieldExpr
| main.rs:41:13:41:18 | self.a | main.rs:31:9:31:12 | RecordField |
| main.rs:47:23:47:28 | self.a | main.rs:31:9:31:12 | RecordField |
| main.rs:53:13:53:18 | self.a | main.rs:31:9:31:12 | RecordField |
| main.rs:100:13:100:18 | self.a | main.rs:75:9:75:12 | RecordField |
| main.rs:106:23:106:28 | self.a | main.rs:75:9:75:12 | RecordField |
| main.rs:153:13:153:18 | self.a | main.rs:128:9:128:12 | RecordField |
| main.rs:282:17:282:27 | ... .a | main.rs:246:9:246:12 | RecordField |
| main.rs:284:17:284:32 | ... .a | main.rs:246:9:246:12 | RecordField |
| main.rs:291:13:291:18 | self.a | main.rs:246:9:246:12 | RecordField |
| main.rs:299:26:299:31 | self.a | main.rs:251:9:251:12 | RecordField |
| main.rs:448:13:448:18 | self.0 | main.rs:441:17:441:17 | TupleField |
| main.rs:452:14:452:19 | self.0 | main.rs:441:17:441:17 | TupleField |
| main.rs:456:14:456:19 | self.0 | main.rs:441:17:441:17 | TupleField |
| main.rs:482:26:482:29 | x5.0 | main.rs:441:17:441:17 | TupleField |

View File

@@ -0,0 +1,18 @@
import rust
import codeql.rust.internal.TypeInference as TypeInference
import TypeInference
import utils.test.InlineExpectationsTest
query predicate inferType(AstNode n, TypePath path, Type t) {
t = TypeInference::inferType(n, path)
}
query predicate resolveMethodCallExpr(MethodCallExpr mce, Function f) {
f = resolveMethodCallExpr(mce)
}
query predicate resolveFieldExpr(FieldExpr fe, AstNode target) {
target = resolveRecordFieldExpr(fe)
or
target = resolveTupleFieldExpr(fe)
}

View File

@@ -1,7 +1,6 @@
| Multiple children | 0 |
| Multiple locations | 0 |
| Multiple parents | 0 |
| Multiple path resolutions | 0 |
| Multiple positions | 0 |
| Multiple primary QL classes | 0 |
| Multiple toStrings | 0 |

View File

@@ -8,6 +8,7 @@
| Files extracted - without errors % | 57 |
| Inconsistencies - AST | 0 |
| Inconsistencies - CFG | 0 |
| Inconsistencies - Path resolution | 0 |
| Inconsistencies - data flow | 0 |
| Lines of code extracted | 60 |
| Lines of user code extracted | 60 |