Commit ee0dd7a
authored
Fix scala#21619: Refactor NotNullInfo to record every reference which is retracted once. (scala#21624)
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 scala#21619File 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