Commit 5702cfa
authored
Rollup merge of rust-lang#80764 - CAD97:weak-unsized-as-ptr-again, r=RalfJung
Re-stabilize Weak::as_ptr and friends for unsized T
As per [T-lang consensus](https://hackmd.io/7r3_is6uTz-163fsOV8Vfg), this uses a branch to handle the dangling case. The discussed optimization of only doing the branch in the T: ?Sized case is left for a followup patch, as doing so is not trivial (as it requires specialization) and not _obviously_ better (as it requires using `wrapping_offset` rather than `offset` more).
<details><summary>Basically said optimization</summary>
Specialize on `T: Sized`:
```rust
fn as_ptr(&self) -> *const T {
if [ T is Sized ] || !is_dangling(ptr) {
(ptr as *mut T).set_ptr_value( (ptr as *mut u8).wrapping_offset(data_offset) )
} else {
ptr::null()
}
}
fn from_raw(*const T) -> Self {
if [ T is Sized ] || !ptr.is_null() {
let ptr = (ptr as *mut RcBox).set_ptr_value( (ptr as *mut u8).wrapping_offset(-data_offset) );
Weak { ptr }
} else {
Weak::new()
}
}
```
(but with more `set_ptr_value` to avoid `Sized` restrictions and maintain metadata.)
Written in this fashion, this is not a correctness-critical specialization (i.e. so long as `[ T is Sized ]` is false for unsized `T`, it can be `rand()` for sized `T` without breaking correctness), but it's still touchy, so I'd rather do it in another PR with separate review.
---
</details>
This effectively reverts rust-lang#80422 and re-establishes rust-lang#74160. T-libs [previously signed off](rust-lang#74160 (comment)) on this stable API change in rust-lang#74160.5 files changed
+153
-95
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
120 | 120 | | |
121 | 121 | | |
122 | 122 | | |
| 123 | + | |
123 | 124 | | |
124 | 125 | | |
125 | 126 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
829 | 829 | | |
830 | 830 | | |
831 | 831 | | |
832 | | - | |
833 | | - | |
| 832 | + | |
| 833 | + | |
834 | 834 | | |
835 | 835 | | |
836 | 836 | | |
| |||
850 | 850 | | |
851 | 851 | | |
852 | 852 | | |
853 | | - | |
| 853 | + | |
854 | 854 | | |
855 | 855 | | |
856 | 856 | | |
| |||
1164 | 1164 | | |
1165 | 1165 | | |
1166 | 1166 | | |
1167 | | - | |
| 1167 | + | |
1168 | 1168 | | |
1169 | 1169 | | |
1170 | 1170 | | |
| |||
1203 | 1203 | | |
1204 | 1204 | | |
1205 | 1205 | | |
1206 | | - | |
1207 | | - | |
1208 | | - | |
1209 | | - | |
1210 | | - | |
1211 | | - | |
1212 | | - | |
1213 | | - | |
1214 | | - | |
1215 | | - | |
1216 | | - | |
1217 | | - | |
1218 | 1206 | | |
1219 | | - | |
1220 | 1207 | | |
1221 | 1208 | | |
1222 | 1209 | | |
| |||
1860 | 1847 | | |
1861 | 1848 | | |
1862 | 1849 | | |
1863 | | - | |
1864 | | - | |
| 1850 | + | |
| 1851 | + | |
1865 | 1852 | | |
1866 | 1853 | | |
1867 | 1854 | | |
| |||
1872 | 1859 | | |
1873 | 1860 | | |
1874 | 1861 | | |
1875 | | - | |
| 1862 | + | |
1876 | 1863 | | |
1877 | 1864 | | |
1878 | 1865 | | |
| |||
1902 | 1889 | | |
1903 | 1890 | | |
1904 | 1891 | | |
1905 | | - | |
1906 | | - | |
1907 | | - | |
1908 | | - | |
1909 | | - | |
1910 | | - | |
1911 | | - | |
1912 | | - | |
1913 | | - | |
| 1892 | + | |
| 1893 | + | |
| 1894 | + | |
| 1895 | + | |
| 1896 | + | |
| 1897 | + | |
| 1898 | + | |
| 1899 | + | |
| 1900 | + | |
1914 | 1901 | | |
1915 | 1902 | | |
1916 | 1903 | | |
| |||
1992 | 1979 | | |
1993 | 1980 | | |
1994 | 1981 | | |
1995 | | - | |
1996 | 1982 | | |
1997 | | - | |
1998 | 1983 | | |
1999 | | - | |
2000 | | - | |
2001 | | - | |
2002 | | - | |
| 1984 | + | |
| 1985 | + | |
| 1986 | + | |
| 1987 | + | |
| 1988 | + | |
| 1989 | + | |
| 1990 | + | |
| 1991 | + | |
| 1992 | + | |
| 1993 | + | |
2003 | 1994 | | |
2004 | 1995 | | |
2005 | 1996 | | |
2006 | 1997 | | |
2007 | 1998 | | |
2008 | | - | |
2009 | 1999 | | |
2010 | | - | |
2011 | 2000 | | |
2012 | 2001 | | |
2013 | 2002 | | |
| |||
2070 | 2059 | | |
2071 | 2060 | | |
2072 | 2061 | | |
2073 | | - | |
| 2062 | + | |
2074 | 2063 | | |
2075 | 2064 | | |
2076 | 2065 | | |
| |||
2325 | 2314 | | |
2326 | 2315 | | |
2327 | 2316 | | |
2328 | | - | |
2329 | | - | |
| 2317 | + | |
2330 | 2318 | | |
2331 | 2319 | | |
2332 | 2320 | | |
2333 | | - | |
2334 | | - | |
2335 | | - | |
2336 | | - | |
2337 | | - | |
| 2321 | + | |
| 2322 | + | |
2338 | 2323 | | |
2339 | | - | |
2340 | | - | |
2341 | | - | |
2342 | | - | |
| 2324 | + | |
| 2325 | + | |
| 2326 | + | |
| 2327 | + | |
| 2328 | + | |
| 2329 | + | |
2343 | 2330 | | |
2344 | 2331 | | |
2345 | 2332 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
208 | 208 | | |
209 | 209 | | |
210 | 210 | | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
211 | 235 | | |
212 | 236 | | |
213 | 237 | | |
| |||
294 | 318 | | |
295 | 319 | | |
296 | 320 | | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
297 | 338 | | |
298 | 339 | | |
299 | 340 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
846 | 846 | | |
847 | 847 | | |
848 | 848 | | |
849 | | - | |
850 | | - | |
| 849 | + | |
851 | 850 | | |
852 | 851 | | |
853 | 852 | | |
| |||
888 | 887 | | |
889 | 888 | | |
890 | 889 | | |
891 | | - | |
| 890 | + | |
892 | 891 | | |
893 | 892 | | |
894 | 893 | | |
| |||
1131 | 1130 | | |
1132 | 1131 | | |
1133 | 1132 | | |
1134 | | - | |
| 1133 | + | |
1135 | 1134 | | |
1136 | 1135 | | |
1137 | 1136 | | |
| |||
1170 | 1169 | | |
1171 | 1170 | | |
1172 | 1171 | | |
1173 | | - | |
1174 | | - | |
1175 | | - | |
1176 | | - | |
1177 | | - | |
1178 | | - | |
1179 | | - | |
1180 | | - | |
1181 | | - | |
1182 | | - | |
1183 | | - | |
1184 | | - | |
1185 | 1172 | | |
1186 | | - | |
1187 | 1173 | | |
1188 | 1174 | | |
1189 | 1175 | | |
| |||
1653 | 1639 | | |
1654 | 1640 | | |
1655 | 1641 | | |
1656 | | - | |
| 1642 | + | |
1657 | 1643 | | |
1658 | 1644 | | |
1659 | 1645 | | |
| |||
1683 | 1669 | | |
1684 | 1670 | | |
1685 | 1671 | | |
1686 | | - | |
1687 | | - | |
1688 | | - | |
1689 | | - | |
1690 | | - | |
1691 | | - | |
1692 | | - | |
1693 | | - | |
1694 | | - | |
| 1672 | + | |
| 1673 | + | |
| 1674 | + | |
| 1675 | + | |
| 1676 | + | |
| 1677 | + | |
| 1678 | + | |
| 1679 | + | |
| 1680 | + | |
1695 | 1681 | | |
1696 | 1682 | | |
1697 | 1683 | | |
| |||
1773 | 1759 | | |
1774 | 1760 | | |
1775 | 1761 | | |
1776 | | - | |
1777 | 1762 | | |
1778 | | - | |
1779 | 1763 | | |
1780 | | - | |
1781 | | - | |
1782 | | - | |
1783 | | - | |
| 1764 | + | |
| 1765 | + | |
| 1766 | + | |
| 1767 | + | |
| 1768 | + | |
| 1769 | + | |
| 1770 | + | |
| 1771 | + | |
| 1772 | + | |
| 1773 | + | |
1784 | 1774 | | |
1785 | 1775 | | |
1786 | 1776 | | |
1787 | | - | |
| 1777 | + | |
1788 | 1778 | | |
1789 | 1779 | | |
1790 | 1780 | | |
| |||
1889 | 1879 | | |
1890 | 1880 | | |
1891 | 1881 | | |
1892 | | - | |
| 1882 | + | |
1893 | 1883 | | |
1894 | 1884 | | |
1895 | 1885 | | |
| |||
2469 | 2459 | | |
2470 | 2460 | | |
2471 | 2461 | | |
2472 | | - | |
2473 | | - | |
| 2462 | + | |
2474 | 2463 | | |
2475 | 2464 | | |
2476 | 2465 | | |
2477 | | - | |
2478 | | - | |
2479 | | - | |
2480 | | - | |
2481 | | - | |
| 2466 | + | |
| 2467 | + | |
2482 | 2468 | | |
2483 | | - | |
2484 | | - | |
2485 | | - | |
2486 | | - | |
| 2469 | + | |
| 2470 | + | |
| 2471 | + | |
| 2472 | + | |
| 2473 | + | |
| 2474 | + | |
2487 | 2475 | | |
2488 | 2476 | | |
2489 | 2477 | | |
| |||
0 commit comments