Commit ee0dd7a
authored
This PR improves the flow typing for returning and exceptions.
The `NotNullInfo` is defined as following now:
```scala
case class NotNullInfo(asserted: Set[TermRef] | Null, retracted: Set[TermRef]):
```
* `retracted` contains variable references that are ever assigned to
null;
* if `asserted` is not `null`, it contains `val` or `var` references
that are known to be not null, after the tree finishes executing
normally (non-exceptionally);
* if `asserted` is `null`, the tree is know to terminate, by throwing,
returning, or calling a function with `Nothing` type. Hence, it acts
like a universal set.
`alt` is defined as `<a1,r1>.alt(<a2,r2>) = <a1 intersect a2, r1 union
r2>`.
The difficult part is the `try ... catch ... finally ...`. We don't know
at which point an exception is thrown in the body, and the catch cases
may be not exhaustive, we have to collect any reference that is once
retracted.
Fix #21619
File tree
9 files changed
+257
-78
lines changed- compiler/src/dotty/tools/dotc
- core
- typer
- tests/explicit-nulls
- neg
- pos
- unsafe-common
9 files changed
+257
-78
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
777 | 777 | | |
778 | 778 | | |
779 | 779 | | |
780 | | - | |
| 780 | + | |
781 | 781 | | |
782 | 782 | | |
783 | | - | |
| 783 | + | |
784 | 784 | | |
785 | 785 | | |
786 | | - | |
| 786 | + | |
787 | 787 | | |
788 | 788 | | |
789 | 789 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1134 | 1134 | | |
1135 | 1135 | | |
1136 | 1136 | | |
1137 | | - | |
| 1137 | + | |
1138 | 1138 | | |
1139 | 1139 | | |
1140 | 1140 | | |
| |||
1208 | 1208 | | |
1209 | 1209 | | |
1210 | 1210 | | |
| 1211 | + | |
| 1212 | + | |
| 1213 | + | |
| 1214 | + | |
| 1215 | + | |
1211 | 1216 | | |
1212 | 1217 | | |
1213 | 1218 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
55 | | - | |
56 | | - | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
57 | 60 | | |
58 | | - | |
59 | | - | |
60 | | - | |
| 61 | + | |
61 | 62 | | |
62 | 63 | | |
63 | 64 | | |
64 | 65 | | |
| 66 | + | |
| 67 | + | |
65 | 68 | | |
66 | 69 | | |
67 | 70 | | |
68 | 71 | | |
69 | | - | |
70 | | - | |
71 | | - | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
72 | 78 | | |
73 | 79 | | |
74 | | - | |
| 80 | + | |
75 | 81 | | |
76 | 82 | | |
77 | | - | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
78 | 90 | | |
79 | 91 | | |
80 | 92 | | |
81 | | - | |
82 | | - | |
| 93 | + | |
| 94 | + | |
83 | 95 | | |
84 | 96 | | |
85 | 97 | | |
| |||
223 | 235 | | |
224 | 236 | | |
225 | 237 | | |
226 | | - | |
| 238 | + | |
227 | 239 | | |
228 | 240 | | |
229 | 241 | | |
| |||
233 | 245 | | |
234 | 246 | | |
235 | 247 | | |
236 | | - | |
237 | | - | |
238 | | - | |
239 | | - | |
| 248 | + | |
240 | 249 | | |
241 | 250 | | |
242 | 251 | | |
243 | 252 | | |
244 | | - | |
245 | | - | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
246 | 257 | | |
247 | 258 | | |
248 | 259 | | |
| |||
304 | 315 | | |
305 | 316 | | |
306 | 317 | | |
307 | | - | |
308 | | - | |
| 318 | + | |
| 319 | + | |
309 | 320 | | |
310 | 321 | | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
311 | 336 | | |
312 | 337 | | |
313 | | - | |
314 | | - | |
315 | | - | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
316 | 347 | | |
317 | 348 | | |
318 | 349 | | |
| |||
393 | 424 | | |
394 | 425 | | |
395 | 426 | | |
396 | | - | |
397 | | - | |
398 | | - | |
399 | | - | |
400 | | - | |
401 | | - | |
402 | | - | |
403 | | - | |
404 | | - | |
405 | | - | |
406 | | - | |
407 | | - | |
408 | | - | |
409 | | - | |
410 | | - | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
411 | 444 | | |
412 | 445 | | |
413 | 446 | | |
| |||
515 | 548 | | |
516 | 549 | | |
517 | 550 | | |
518 | | - | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
519 | 555 | | |
520 | 556 | | |
521 | 557 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1201 | 1201 | | |
1202 | 1202 | | |
1203 | 1203 | | |
1204 | | - | |
1205 | 1204 | | |
1206 | 1205 | | |
1207 | 1206 | | |
| |||
1551 | 1550 | | |
1552 | 1551 | | |
1553 | 1552 | | |
1554 | | - | |
1555 | | - | |
1556 | | - | |
1557 | | - | |
1558 | | - | |
| 1553 | + | |
1559 | 1554 | | |
1560 | 1555 | | |
1561 | 1556 | | |
| |||
2139 | 2134 | | |
2140 | 2135 | | |
2141 | 2136 | | |
2142 | | - | |
2143 | | - | |
2144 | | - | |
| 2137 | + | |
| 2138 | + | |
2145 | 2139 | | |
2146 | 2140 | | |
2147 | 2141 | | |
2148 | 2142 | | |
2149 | 2143 | | |
2150 | 2144 | | |
2151 | | - | |
2152 | | - | |
2153 | | - | |
| 2145 | + | |
| 2146 | + | |
2154 | 2147 | | |
2155 | 2148 | | |
| 2149 | + | |
| 2150 | + | |
| 2151 | + | |
| 2152 | + | |
| 2153 | + | |
| 2154 | + | |
| 2155 | + | |
2156 | 2156 | | |
2157 | 2157 | | |
2158 | 2158 | | |
| |||
2241 | 2241 | | |
2242 | 2242 | | |
2243 | 2243 | | |
2244 | | - | |
| 2244 | + | |
2245 | 2245 | | |
2246 | 2246 | | |
2247 | 2247 | | |
| |||
2291 | 2291 | | |
2292 | 2292 | | |
2293 | 2293 | | |
2294 | | - | |
| 2294 | + | |
2295 | 2295 | | |
2296 | 2296 | | |
2297 | 2297 | | |
| |||
2332 | 2332 | | |
2333 | 2333 | | |
2334 | 2334 | | |
2335 | | - | |
| 2335 | + | |
| 2336 | + | |
2336 | 2337 | | |
2337 | 2338 | | |
2338 | 2339 | | |
| |||
2344 | 2345 | | |
2345 | 2346 | | |
2346 | 2347 | | |
2347 | | - | |
| 2348 | + | |
| 2349 | + | |
| 2350 | + | |
| 2351 | + | |
| 2352 | + | |
| 2353 | + | |
2348 | 2354 | | |
2349 | 2355 | | |
2350 | 2356 | | |
2351 | 2357 | | |
2352 | 2358 | | |
2353 | | - | |
2354 | | - | |
2355 | | - | |
2356 | | - | |
2357 | | - | |
2358 | | - | |
| 2359 | + | |
| 2360 | + | |
| 2361 | + | |
| 2362 | + | |
| 2363 | + | |
| 2364 | + | |
| 2365 | + | |
| 2366 | + | |
| 2367 | + | |
2359 | 2368 | | |
2360 | 2369 | | |
2361 | 2370 | | |
| |||
2369 | 2378 | | |
2370 | 2379 | | |
2371 | 2380 | | |
2372 | | - | |
| 2381 | + | |
2373 | 2382 | | |
2374 | 2383 | | |
2375 | 2384 | | |
2376 | | - | |
| 2385 | + | |
2377 | 2386 | | |
2378 | 2387 | | |
2379 | 2388 | | |
2380 | | - | |
| 2389 | + | |
2381 | 2390 | | |
2382 | 2391 | | |
2383 | 2392 | | |
| |||
2842 | 2851 | | |
2843 | 2852 | | |
2844 | 2853 | | |
| 2854 | + | |
| 2855 | + | |
2845 | 2856 | | |
2846 | 2857 | | |
2847 | 2858 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
21 | 39 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
35 | | - | |
36 | | - | |
37 | | - | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
38 | 38 | | |
39 | 39 | | |
40 | 40 | | |
| |||
0 commit comments