Commit 618297e
committed
Auto merge of #44884 - arielb1:pack-safe, r=<try>
[WIP] make accesses to fields of packed structs unsafe
To handle packed structs with destructors (which you'll think are a rare
case, but the `#[repr(packed)] struct Packed<T>(T);` pattern is
ever-popular, which requires handling packed structs with destructors to
avoid monomorphization-time errors), drops of subfields of packed
structs should drop a local move of the field instead of the original
one.
That's it, I think I'll use a strategy suggested by @Zoxc, where this mir
```
drop(packed_struct.field)
```
is replaced by
```
tmp0 = packed_struct.field;
drop tmp0
```
cc #27060 - this should deal with that issue after codegen of drop glue
is updated.
The new errors need to be changed to future-compatibility warnings, but
I'll rather do a crater run first with them as errors to assess the
impact.
cc @eddyb
Things which still need to be done for this:
- [ ] - handle `repr(packed)` structs in `derive` the same way I did in `Span`, and use derive there again
- [ ] - implement the "fix packed drops" pass and call it in both the MIR shim and validated MIR pipelines
- [ ] - do a crater run
- [ ] - convert the errors to compatibility warningsFile tree
10 files changed
+329
-82
lines changed- src
- librustc_mir/transform
- librustc_typeck/check
- librustdoc
- libsyntax_ext/deriving/generic
- test
- compile-fail
- run-pass
10 files changed
+329
-82
lines changedSome generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
| 15 | + | |
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
34 | 37 | | |
35 | 38 | | |
36 | 39 | | |
| |||
51 | 54 | | |
52 | 55 | | |
53 | 56 | | |
| 57 | + | |
54 | 58 | | |
55 | 59 | | |
56 | 60 | | |
| |||
130 | 134 | | |
131 | 135 | | |
132 | 136 | | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
133 | 145 | | |
134 | 146 | | |
135 | 147 | | |
| |||
143 | 155 | | |
144 | 156 | | |
145 | 157 | | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
146 | 161 | | |
147 | 162 | | |
148 | 163 | | |
149 | 164 | | |
150 | 165 | | |
151 | | - | |
152 | | - | |
153 | | - | |
154 | | - | |
155 | | - | |
156 | | - | |
157 | | - | |
158 | | - | |
159 | | - | |
160 | | - | |
161 | | - | |
162 | | - | |
163 | | - | |
164 | | - | |
165 | | - | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
166 | 185 | | |
167 | | - | |
| 186 | + | |
168 | 187 | | |
169 | | - | |
170 | | - | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
171 | 191 | | |
172 | 192 | | |
173 | 193 | | |
| |||
191 | 211 | | |
192 | 212 | | |
193 | 213 | | |
194 | | - | |
| 214 | + | |
195 | 215 | | |
| 216 | + | |
196 | 217 | | |
197 | 218 | | |
198 | 219 | | |
| |||
215 | 236 | | |
216 | 237 | | |
217 | 238 | | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
218 | 247 | | |
219 | 248 | | |
220 | 249 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
| 17 | + | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| |||
223 | 223 | | |
224 | 224 | | |
225 | 225 | | |
| 226 | + | |
| 227 | + | |
226 | 228 | | |
227 | 229 | | |
228 | | - | |
229 | | - | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
230 | 251 | | |
231 | 252 | | |
232 | 253 | | |
| |||
245 | 266 | | |
246 | 267 | | |
247 | 268 | | |
248 | | - | |
249 | 269 | | |
250 | 270 | | |
251 | 271 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
| 17 | + | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
393 | 393 | | |
394 | 394 | | |
395 | 395 | | |
396 | | - | |
| 396 | + | |
397 | 397 | | |
398 | 398 | | |
399 | 399 | | |
400 | 400 | | |
401 | 401 | | |
402 | 402 | | |
403 | 403 | | |
404 | | - | |
| 404 | + | |
405 | 405 | | |
406 | 406 | | |
407 | 407 | | |
408 | 408 | | |
409 | 409 | | |
410 | 410 | | |
411 | 411 | | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
412 | 417 | | |
413 | 418 | | |
414 | | - | |
| 419 | + | |
| 420 | + | |
415 | 421 | | |
416 | 422 | | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
417 | 429 | | |
418 | 430 | | |
419 | 431 | | |
420 | 432 | | |
421 | 433 | | |
422 | 434 | | |
423 | | - | |
| 435 | + | |
| 436 | + | |
424 | 437 | | |
425 | 438 | | |
426 | 439 | | |
| |||
674 | 687 | | |
675 | 688 | | |
676 | 689 | | |
677 | | - | |
| 690 | + | |
| 691 | + | |
678 | 692 | | |
679 | 693 | | |
680 | 694 | | |
| |||
700 | 714 | | |
701 | 715 | | |
702 | 716 | | |
703 | | - | |
| 717 | + | |
| 718 | + | |
704 | 719 | | |
705 | 720 | | |
706 | 721 | | |
| |||
957 | 972 | | |
958 | 973 | | |
959 | 974 | | |
| 975 | + | |
| 976 | + | |
| 977 | + | |
| 978 | + | |
| 979 | + | |
| 980 | + | |
| 981 | + | |
| 982 | + | |
| 983 | + | |
| 984 | + | |
| 985 | + | |
| 986 | + | |
| 987 | + | |
| 988 | + | |
| 989 | + | |
| 990 | + | |
960 | 991 | | |
961 | 992 | | |
962 | 993 | | |
963 | 994 | | |
964 | 995 | | |
965 | 996 | | |
966 | 997 | | |
967 | | - | |
| 998 | + | |
| 999 | + | |
968 | 1000 | | |
969 | 1001 | | |
970 | 1002 | | |
| |||
976 | 1008 | | |
977 | 1009 | | |
978 | 1010 | | |
979 | | - | |
| 1011 | + | |
| 1012 | + | |
980 | 1013 | | |
981 | 1014 | | |
982 | 1015 | | |
| |||
1139 | 1172 | | |
1140 | 1173 | | |
1141 | 1174 | | |
1142 | | - | |
1143 | 1175 | | |
1144 | 1176 | | |
1145 | 1177 | | |
| |||
1511 | 1543 | | |
1512 | 1544 | | |
1513 | 1545 | | |
1514 | | - | |
| 1546 | + | |
| 1547 | + | |
1515 | 1548 | | |
1516 | 1549 | | |
1517 | 1550 | | |
| 1551 | + | |
| 1552 | + | |
| 1553 | + | |
| 1554 | + | |
| 1555 | + | |
1518 | 1556 | | |
1519 | | - | |
| 1557 | + | |
1520 | 1558 | | |
1521 | 1559 | | |
1522 | 1560 | | |
| |||
1527 | 1565 | | |
1528 | 1566 | | |
1529 | 1567 | | |
1530 | | - | |
1531 | | - | |
| 1568 | + | |
| 1569 | + | |
| 1570 | + | |
| 1571 | + | |
1532 | 1572 | | |
1533 | 1573 | | |
1534 | 1574 | | |
| |||
1538 | 1578 | | |
1539 | 1579 | | |
1540 | 1580 | | |
1541 | | - | |
| 1581 | + | |
| 1582 | + | |
| 1583 | + | |
| 1584 | + | |
| 1585 | + | |
| 1586 | + | |
1542 | 1587 | | |
| 1588 | + | |
1543 | 1589 | | |
1544 | 1590 | | |
1545 | 1591 | | |
1546 | | - | |
| 1592 | + | |
1547 | 1593 | | |
1548 | 1594 | | |
1549 | 1595 | | |
| |||
1587 | 1633 | | |
1588 | 1634 | | |
1589 | 1635 | | |
1590 | | - | |
| 1636 | + | |
| 1637 | + | |
| 1638 | + | |
1591 | 1639 | | |
1592 | 1640 | | |
1593 | 1641 | | |
| |||
0 commit comments