| Age | Commit message (Collapse) | Author | Lines | |
|---|---|---|---|---|
| 2022-01-29 | Rollup merge of #92274 - woppopo:const_deallocate, r=oli-obk | Matthias Krüger | -0/+23 | |
| Add `intrinsics::const_deallocate` Tracking issue: #79597 Related: #91884 This allows deallocation of a memory allocated by `intrinsics::const_allocate`. At the moment, this can be only used to reduce memory usage, but in the future this may be useful to detect memory leaks (If an allocated memory remains after evaluation, raise an error...?). | ||||
| 2022-01-28 | update cfg(bootstrap)s | Pietro Albini | -3/+0 | |
| 2022-01-28 | Add a test case for using NonNull::new in const context | woppopo | -0/+17 | |
| 2022-01-28 | Fix wrong assumption in `DecodeUtf16::size_hint` | Maybe Waffle | -1/+2 | |
| `self.buf` can contain a surrogate, but only a leading one. | ||||
| 2022-01-28 | test_const_allocate_at_runtime | woppopo | -1/+10 | |
| 2022-01-27 | Add a test for `char::DecodeUtf16::size_hint` | Maybe Waffle | -0/+25 | |
| 2022-01-26 | `const_deallocate`: Don't deallocate memory allocated in an another const. ↵ | woppopo | -0/+14 | |
| Does nothing at runtime. `const_allocate`: Returns a null pointer at runtime. | ||||
| 2022-01-23 | Rollup merge of #91122 - dtolnay:not, r=m-ou-se | Matthias Krüger | -0/+6 | |
| impl Not for ! The lack of this impl caused trouble for me in some degenerate cases of macro-generated code of the form `if !$cond {...}`, even without `feature(never_type)` on a stable compiler. Namely if `$cond` contains a `return` or `break` or similar diverging expression, which would otherwise be perfectly legal in boolean position, the code previously failed to compile with: ```console error[E0600]: cannot apply unary operator `!` to type `!` --> library/core/tests/ops.rs:239:8 | 239 | if !return () {} | ^^^^^^^^^^ cannot apply unary operator `!` ``` | ||||
| 2022-01-15 | Rollup merge of #92747 - swenson:bignum-bit-length-optimization, r=scottmcm | Matthias Krüger | -0/+35 | |
| Simplification of BigNum::bit_length As indicated in the comment, the BigNum::bit_length function could be optimized by using CLZ, which is often a single instruction instead a loop. I think the code is also simpler now without the loop. I added some additional tests for Big8x3 and Big32x40 to ensure that there were no regressions. | ||||
| 2022-01-14 | Rollup merge of #92768 - ojeda:stabilize-maybe_uninit_extra, r=Mark-Simulacrum | Matthias Krüger | -1/+1 | |
| Partially stabilize `maybe_uninit_extra` This covers: ```rust impl<T> MaybeUninit<T> { pub unsafe fn assume_init_read(&self) -> T { ... } pub unsafe fn assume_init_drop(&mut self) { ... } } ``` It does not cover the const-ness of `write` under `const_maybe_uninit_write` nor the const-ness of `assume_init_read` (this commit adds `const_maybe_uninit_assume_init_read` for that). FCP: https://github.com/rust-lang/rust/issues/63567#issuecomment-958590287. Signed-off-by: Miguel Ojeda <ojeda@kernel.org> | ||||
| 2022-01-11 | Partially stabilize `maybe_uninit_extra` | Miguel Ojeda | -1/+1 | |
| This covers: impl<T> MaybeUninit<T> { pub unsafe fn assume_init_read(&self) -> T { ... } pub unsafe fn assume_init_drop(&mut self) { ... } } It does not cover the const-ness of `write` under `const_maybe_uninit_write` nor the const-ness of `assume_init_read` (this commit adds `const_maybe_uninit_assume_init_read` for that). FCP: https://github.com/rust-lang/rust/issues/63567#issuecomment-958590287. Signed-off-by: Miguel Ojeda <ojeda@kernel.org> | ||||
| 2022-01-10 | Simplification of BigNum::bit_length | Christopher Swenson | -0/+35 | |
| As indicated in the comment, the BigNum::bit_length function could be optimized by using CLZ, which is often a single instruction instead a loop. I think the code is also simpler now without the loop. I added some additional tests for Big8x3 and Big32x40 to ensure that there were no regressions. | ||||
| 2022-01-09 | eplace usages of vec![].into_iter with [].into_iter | Lucas Kent | -10/+10 | |
| 2021-12-24 | Auto merge of #92226 - woppopo:const_black_box, r=joshtriplett | bors | -0/+19 | |
| Constify `core::intrinsics::black_box` and `core::hint::black_box`. `core::intrinsics::black_box` is already constified, but it wasn't marked as const (see: https://github.com/rust-lang/rust/blob/master/compiler/rustc_const_eval/src/interpret/intrinsics.rs#L471). Tracking issue: None | ||||
| 2021-12-23 | Rollup merge of #92121 - RalfJung:miri-core-test, r=kennytm | Matthias Krüger | -0/+1 | |
| disable test with self-referential generator on Miri Running the libcore test suite in Miri currently fails due to the known incompatibility of self-referential generators with Miri's aliasing checks (https://github.com/rust-lang/unsafe-code-guidelines/issues/148). So let's disable that test in Miri for now. | ||||
| 2021-12-23 | Constify `core::intrinsics::black_box` | woppopo | -0/+19 | |
| 2021-12-23 | Rollup merge of #88858 - spektom:to_lower_upper_rev, r=dtolnay | Matthias Krüger | -0/+6 | |
| Allow reverse iteration of lowercase'd/uppercase'd chars The PR implements `DoubleEndedIterator` trait for `ToLowercase` and `ToUppercase`. This enables reverse iteration of lowercase/uppercase variants of character sequences. One of use cases: determining whether a char sequence is a suffix of another one. Example: ```rust fn endswith_ignore_case(s1: &str, s2: &str) -> bool { for eob in s1 .chars() .flat_map(|c| c.to_lowercase()) .rev() .zip_longest(s2.chars().flat_map(|c| c.to_lowercase()).rev()) { match eob { EitherOrBoth::Both(c1, c2) => { if c1 != c2 { return false; } } EitherOrBoth::Left(_) => return true, EitherOrBoth::Right(_) => return false, } } true } ``` | ||||
| 2021-12-20 | disable test with self-referential generator on Miri | Ralf Jung | -0/+1 | |
| 2021-12-19 | Rollup merge of #91141 - jhpratt:int_roundings, r=joshtriplett | Matthias Krüger | -22/+22 | |
| Revert "Temporarily rename int_roundings functions to avoid conflicts" This reverts commit 3ece63b64e192146fcdd1724e25856a93d7626aa. This should be okay because #90329 has been merged. r? `@joshtriplett` | ||||
| 2021-12-18 | Auto merge of #92062 - matthiaskrgr:rollup-en3p4sb, r=matthiaskrgr | bors | -0/+33 | |
| Rollup of 7 pull requests Successful merges: - #91439 (Mark defaulted `PartialEq`/`PartialOrd` methods as const) - #91516 (Improve suggestion to change struct field to &mut) - #91896 (Remove `in_band_lifetimes` for `rustc_passes`) - #91909 (:arrow_up: rust-analyzer) - #91922 (Remove `in_band_lifetimes` from `rustc_mir_dataflow`) - #92025 (Revert "socket ancillary data implementation for dragonflybsd.") - #92030 (Update stdlib to the 2021 edition) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup | ||||
| 2021-12-18 | Rollup merge of #91439 - ecstatic-morse:const-cmp-trait-default-methods, ↵ | Matthias Krüger | -0/+33 | |
| r=oli-obk Mark defaulted `PartialEq`/`PartialOrd` methods as const WIthout it, `const` impls of these traits are unpleasant to write. I think this kind of change is allowed now. although it looks like it might require some Miri tweaks. Let's find out. r? ```@fee1-dead``` | ||||
| 2021-12-18 | Rollup merge of #91928 - fee1-dead:constification1, r=oli-obk | Matthias Krüger | -10/+90 | |
| Constify (most) `Option` methods r? ``@oli-obk`` | ||||
| 2021-12-17 | Auto merge of #91838 - scottmcm:array-slice-eq-via-arrays-not-slices, r=dtolnay | bors | -0/+44 | |
| Do array-slice equality via array equality, rather than always via slices ~~Draft because it needs a rebase after #91766 eventually gets through bors.~~ This enables the optimizations from #85828 to be used for array-to-slice comparisons too, not just array-to-array. For example, <https://play.rust-lang.org/?version=nightly&mode=release&edition=2021&gist=5f9ba69b3d5825a782f897c830d3a6aa> ```rust pub fn demo(x: &[u8], y: [u8; 4]) -> bool { *x == y } ``` Currently writes the array to stack for no reason: ```nasm sub rsp, 4 mov dword ptr [rsp], edx cmp rsi, 4 jne .LBB0_1 mov eax, dword ptr [rdi] cmp eax, dword ptr [rsp] sete al add rsp, 4 ret .LBB0_1: xor eax, eax add rsp, 4 ret ``` Whereas with the change in this PR it just compares it directly: ```nasm cmp rsi, 4 jne .LBB1_1 cmp dword ptr [rdi], edx sete al ret .LBB1_1: xor eax, eax ret ``` | ||||
| 2021-12-17 | Constify (most) `Option` methods | Deadbeef | -10/+90 | |
| 2021-12-16 | Disable test on bootstrap compiler | Dylan MacKenzie | -20/+25 | |
| 2021-12-16 | Test const impl of `cmp` traits | Dylan MacKenzie | -0/+28 | |
| 2021-12-17 | Implement data and vtable getters for `RawWaker` | oxalica | -0/+24 | |
| 2021-12-15 | Rollup merge of #91918 - ↵ | Matthias Krüger | -0/+15 | |
| fee1-dead:constification0-the-great-constification-begins, r=oli-obk Constify `bool::then{,_some}` Note on `~const Drop`: it has no effect when called from runtime functions, when called from const contexts, the trait system ensures that the type can be dropped in const contexts. | ||||
| 2021-12-14 | Do array-slice equality via arrays, rather than always via slices | Scott McMurray | -0/+44 | |
| This'll still go via slices eventually for large arrays, but this way slice comparisons to short arrays can use the same memcmp-avoidance tricks. Added some tests for all the combinations to make sure I didn't accidentally infinitely-recurse something. | ||||
| 2021-12-15 | Constify `bool::then{,_some}` | Deadbeef | -0/+15 | |
| 2021-12-14 | Fix a bunch of typos | Frank Steffahn | -1/+1 | |
| 2021-12-13 | Auto merge of #91841 - matthiaskrgr:rollup-zlhsg5a, r=matthiaskrgr | bors | -1/+27 | |
| Rollup of 5 pull requests Successful merges: - #91086 (Implement `TryFrom<&'_ mut [T]>` for `[T; N]`) - #91091 (Stabilize `ControlFlow::{is_break, is_continue}`) - #91749 (BTree: improve public descriptions and comments) - #91819 (rustbot: Add autolabeling for `T-compiler`) - #91824 (Make `(*mut T)::write_bytes` `const`) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup | ||||
| 2021-12-13 | Rollup merge of #91824 - woppopo:const_ptr_write_bytes, r=oli-obk | Matthias Krüger | -0/+15 | |
| Make `(*mut T)::write_bytes` `const` Tracking issue: #86302 | ||||
| 2021-12-13 | Rollup merge of #91086 - rhysd:issue-91085, r=m-ou-se | Matthias Krüger | -1/+12 | |
| Implement `TryFrom<&'_ mut [T]>` for `[T; N]` Fixes #91085. | ||||
| 2021-12-12 | Make `(*mut T)::write_bytes` `const` | woppopo | -0/+15 | |
| 2021-12-12 | Revert "Auto merge of #89450 - usbalbin:const_try_revert, r=oli-obk" | Deadbeef | -1/+18 | |
| This reverts commit a8387aef8c378a771686878062e544af4d5e2245, reversing changes made to 6e1211081239be62a5d0bb3bbcb29a9f14621c81. | ||||
| 2021-12-11 | Rollup merge of #90081 - woppopo:const_write_bytes, r=oli-obk | Matthias Krüger | -0/+30 | |
| Make `intrinsics::write_bytes` const This is required to constify `MaybeUninit::zeroed` and `(*mut T)::write_bytes`. Tracking issue: #86302 | ||||
| 2021-12-11 | Rollup merge of #91721 - danielhenrymantilla:patch-1, r=joshtriplett | Matthias Krüger | -0/+35 | |
| Minor improvements to `future::join!`'s implementation This is a follow-up from #91645, regarding [some remarks I made](https://rust-lang.zulipchat.com/#narrow/stream/187312-wg-async-foundations/topic/join!/near/264293660). Mainly: - it hides the recursive munching through a private `macro`, to avoid leaking such details (a corollary is getting rid of the need to use ``@`` to disambiguate); - it uses a `match` binding, _outside_ the `async move` block, to better match the semantics from function-like syntax; - it pre-pins the future before calling into `poll_fn`, since `poll_fn`, alone, cannot guarantee that its capture does not move (to clarify: I believe the previous code was sound, thanks to the outer layer of `async`. But I find it clearer / more robust to refactorings this way 🙂). - it uses `@ibraheemdev's` very neat `.ready()?`; - it renames `Took` to `Taken` for consistency with `Done` (tiny nit 😄). ~~TODO~~Done: - [x] Add unit tests to enforce the function-like `:value` semantics are respected. r? `@nrc` | ||||
| 2021-12-10 | Add rsplit_array variants to slices and arrays | Jethro Beekman | -0/+66 | |
| 2021-12-10 | Update library/core/tests/future.rs | Josh Triplett | -1/+1 | |
| Co-authored-by: Daniel Henry-Mantilla <daniel.henry.mantilla@gmail.com> | ||||
| 2021-12-09 | Add tests asserting the function-like semantics of `join!()` | Daniel Henry-Mantilla | -0/+35 | |
| 2021-12-09 | Rollup merge of #91645 - ibraheemdev:future-join, r=joshtriplett | Matthias Krüger | -0/+88 | |
| Implement `core::future::join!` `join!` polls multiple futures concurrently and returns their outputs. ```rust async fn run() { let (a, b) = join!(async { 0 }, async { 1 }); } ``` cc `@rust-lang/wg-async-foundations` | ||||
| 2021-12-08 | remove implicit .await from `core::future::join` | Ibraheem Ahmed | -4/+13 | |
| 2021-12-08 | Auto merge of #91512 - scottmcm:array-intoiter-advance, r=Mark-Simulacrum | bors | -0/+106 | |
| Override `Iterator::advance(_back)_by` for `array::IntoIter` Because I happened to notice that `nth` is currently getting codegen'd as a loop even for `Copy` types: <https://rust.godbolt.org/z/fPqv7Gvs7> <details> <summary>LLVM before and after</summary> Rust: ```rust #[no_mangle] pub fn array_intoiter_nth(it: &mut std::array::IntoIter<i32, 100>, n: usize) -> Option<i32> { it.nth(n) } ``` Current nightly: ```llvmir define { i32, i32 } `@array_intoiter_nth(%"core::array::iter::IntoIter<i32,` 100_usize>"* noalias nocapture align 8 dereferenceable(416) %it, i64 %n) unnamed_addr #0 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* `@rust_eh_personality` !dbg !6 { start: %_3.i.i.i4.i.i = getelementptr inbounds %"core::array::iter::IntoIter<i32, 100_usize>", %"core::array::iter::IntoIter<i32, 100_usize>"* %it, i64 0, i32 0, i32 0 %_4.i.i.i5.i.i = getelementptr inbounds %"core::array::iter::IntoIter<i32, 100_usize>", %"core::array::iter::IntoIter<i32, 100_usize>"* %it, i64 0, i32 0, i32 1 %_4.i.i.i.i.i.i = load i64, i64* %_4.i.i.i5.i.i, align 8, !alias.scope !10 %.not.i.i = icmp eq i64 %n, 0, !dbg !15 %_3.i.i.i.i.pre.i = load i64, i64* %_3.i.i.i4.i.i, align 8, !dbg !40, !alias.scope !41 br i1 %.not.i.i, label %bb4.i, label %bb4.preheader.i.i, !dbg !42 bb4.preheader.i.i: ; preds = %start %umax.i = tail call i64 `@llvm.umax.i64(i64` %_3.i.i.i.i.pre.i, i64 %_4.i.i.i.i.i.i) #3, !dbg !43 %0 = sub i64 %umax.i, %_3.i.i.i.i.pre.i, !dbg !43 br label %bb4.i.i, !dbg !43 bb4.i.i: ; preds = %bb3.i.i.i.i, %bb4.preheader.i.i %_3.i.i.i.i.i.i = phi i64 [ %2, %bb3.i.i.i.i ], [ %_3.i.i.i.i.pre.i, %bb4.preheader.i.i ], !dbg !52 %iter.sroa.0.016.i.i = phi i64 [ %1, %bb3.i.i.i.i ], [ 0, %bb4.preheader.i.i ] %1 = add nuw i64 %iter.sroa.0.016.i.i, 1, !dbg !54 %exitcond.not.i = icmp eq i64 %iter.sroa.0.016.i.i, %0, !dbg !52 br i1 %exitcond.not.i, label %core::iter::traits::iterator::Iterator::nth.exit, label %bb3.i.i.i.i, !dbg !43 bb3.i.i.i.i: ; preds = %bb4.i.i %2 = add nuw i64 %_3.i.i.i.i.i.i, 1, !dbg !63 store i64 %2, i64* %_3.i.i.i4.i.i, align 8, !dbg !66, !alias.scope !75 %exitcond.not.i.i = icmp eq i64 %1, %n, !dbg !15 br i1 %exitcond.not.i.i, label %bb4.i, label %bb4.i.i, !dbg !42 bb4.i: ; preds = %bb3.i.i.i.i, %start %_3.i.i.i.i.i = phi i64 [ %_3.i.i.i.i.pre.i, %start ], [ %2, %bb3.i.i.i.i ], !dbg !84 %3 = icmp ult i64 %_3.i.i.i.i.i, %_4.i.i.i.i.i.i, !dbg !84 br i1 %3, label %bb3.i.i.i, label %core::iter::traits::iterator::Iterator::nth.exit, !dbg !89 bb3.i.i.i: ; preds = %bb4.i %4 = add nuw i64 %_3.i.i.i.i.i, 1, !dbg !90 store i64 %4, i64* %_3.i.i.i4.i.i, align 8, !dbg !93, !alias.scope !96 %5 = getelementptr inbounds %"core::array::iter::IntoIter<i32, 100_usize>", %"core::array::iter::IntoIter<i32, 100_usize>"* %it, i64 0, i32 1, i64 %_3.i.i.i.i.i, !dbg !105 %6 = load i32, i32* %5, align 4, !dbg !131, !alias.scope !141, !noalias !144 br label %core::iter::traits::iterator::Iterator::nth.exit, !dbg !149 core::iter::traits::iterator::Iterator::nth.exit: ; preds = %bb4.i.i, %bb4.i, %bb3.i.i.i %.sroa.3.0.i = phi i32 [ %6, %bb3.i.i.i ], [ undef, %bb4.i ], [ undef, %bb4.i.i ], !dbg !40 %.sroa.0.0.i = phi i32 [ 1, %bb3.i.i.i ], [ 0, %bb4.i ], [ 0, %bb4.i.i ], !dbg !40 %7 = insertvalue { i32, i32 } undef, i32 %.sroa.0.0.i, 0, !dbg !150 %8 = insertvalue { i32, i32 } %7, i32 %.sroa.3.0.i, 1, !dbg !150 ret { i32, i32 } %8, !dbg !151 } ``` With this PR: ```llvmir define { i32, i32 } `@array_intoiter_nth(%"core::array::iter::IntoIter<i32,` 100_usize>"* noalias nocapture align 8 dereferenceable(416) %it, i64 %n) unnamed_addr #0 personality i32 (...)* `@__CxxFrameHandler3` { start: %0 = getelementptr inbounds %"core::array::iter::IntoIter<i32, 100_usize>", %"core::array::iter::IntoIter<i32, 100_usize>"* %it, i64 0, i32 0, i32 1 %_2.i.i.i.i = load i64, i64* %0, align 8, !alias.scope !6, !noalias !13 %1 = getelementptr inbounds %"core::array::iter::IntoIter<i32, 100_usize>", %"core::array::iter::IntoIter<i32, 100_usize>"* %it, i64 0, i32 0, i32 0 %_3.i.i.i.i = load i64, i64* %1, align 8, !alias.scope !16 %2 = sub i64 %_2.i.i.i.i, %_3.i.i.i.i %3 = icmp ult i64 %2, %n %.0.sroa.speculated.i.i.i.i.i = select i1 %3, i64 %2, i64 %n %_10.i.i = add i64 %.0.sroa.speculated.i.i.i.i.i, %_3.i.i.i.i store i64 %_10.i.i, i64* %1, align 8, !alias.scope !16 %.not.i = xor i1 %3, true %4 = icmp ult i64 %_10.i.i, %_2.i.i.i.i %or.cond.i = select i1 %.not.i, i1 %4, i1 false br i1 %or.cond.i, label %bb3.i.i.i, label %_ZN4core4iter6traits8iterator8Iterator3nth17hcbc727011e9e2a3bE.exit bb3.i.i.i: ; preds = %start %5 = add nuw i64 %_10.i.i, 1 store i64 %5, i64* %1, align 8, !alias.scope !17 %6 = getelementptr inbounds %"core::array::iter::IntoIter<i32, 100_usize>", %"core::array::iter::IntoIter<i32, 100_usize>"* %it, i64 0, i32 1, i64 %_10.i.i %7 = load i32, i32* %6, align 4, !alias.scope !26, !noalias !29 br label %_ZN4core4iter6traits8iterator8Iterator3nth17hcbc727011e9e2a3bE.exit _ZN4core4iter6traits8iterator8Iterator3nth17hcbc727011e9e2a3bE.exit: ; preds = %start, %bb3.i.i.i %.sroa.3.0.i = phi i32 [ undef, %start ], [ %7, %bb3.i.i.i ] %.sroa.0.0.i = phi i32 [ 0, %start ], [ 1, %bb3.i.i.i ] %8 = insertvalue { i32, i32 } undef, i32 %.sroa.0.0.i, 0 %9 = insertvalue { i32, i32 } %8, i32 %.sroa.3.0.i, 1 ret { i32, i32 } %9 } ``` </details> | ||||
| 2021-12-07 | add tests for `core::future::join` | Ibraheem Ahmed | -0/+79 | |
| 2021-12-08 | Auto merge of #91484 - workingjubilee:simd-remove-autosplats, r=Mark-Simulacrum | bors | -1/+1 | |
| Sync portable-simd to remove autosplats This PR syncs portable-simd in up to https://github.com/rust-lang/portable-simd/commit/a8385522ade6f67853edac730b5bf164ddb298fd in order to address the type inference breakages documented on nightly in https://github.com/rust-lang/rust/issues/90904 by removing the vector + scalar binary operations (called "autosplats", "broadcasting", or "rank promotion", depending on who you ask) that allow `{scalar} + &'_ {scalar}` to fail in some cases, because it becomes possible the programmer may have meant `{scalar} + &'_ {vector}`. A few quality-of-life improvements make their way in as well: - Lane counts can now go to 64, as LLVM seems to have fixed their miscompilation for those. - `{i,u}8x64` to `__m512i` is now available. - a bunch of `#[must_use]` notes appear throughout the module. - Some implementations, mostly instances of `impl core::ops::{Op}<Simd> for Simd` that aren't `{vector} + {vector}` (e.g. `{vector} + &'_ {vector}`), leverage some generics and `where` bounds now to make them easier to understand by reducing a dozen implementations into one (and make it possible for people to open the docs on less burly devices). - And some internal-only improvements. None of these changes should affect a beta backport, only actual users of `core::simd` (and most aren't even visible in the programmatic sense), though I can extract an even more minimal changeset for beta if necessary. It seemed simpler to just keep moving forward. | ||||
| 2021-12-04 | Use IntoIterator for array impl everywhere. | Mara Bos | -6/+5 | |
| 2021-12-03 | Override `Iterator::advance(_back)_by` for `array::IntoIter` | Scott McMurray | -0/+106 | |
| Because I happened to notice that `nth` is currently getting codegen'd as a loop even for `Copy` types: <https://rust.godbolt.org/z/fPqv7Gvs7> | ||||
| 2021-12-04 | Add a `try_reduce` method to the Iterator trait | kit | -0/+29 | |
| 2021-12-03 | Auto merge of #91286 - scottmcm:residual-trait, r=joshtriplett | bors | -1/+1 | |
| Make `array::{try_from_fn, try_map}` and `Iterator::try_find` generic over `Try` Fixes #85115 This only updates unstable functions. `array::try_map` didn't actually exist before; this adds it under the still-open tracking issue #79711 from the old PR #79713. Tracking issue for the new trait: #91285 This would also solve the return type question in for the proposed `Iterator::try_reduce` in #87054 | ||||
