rust/library/core/src
bors b3ab80c119 Auto merge of #113175 - bryangarza:safe-transmute-rustc-coinductive, r=compiler-errors
Enable coinduction support for Safe Transmute

This patch adds the `#[rustc_coinductive]` annotation to `BikeshedIntrinsicFrom`, so that it's possible to compute transmutability for recursive types.

## Motivation
Safe Transmute currently already supports references (#110662). However, if a type is implemented recursively, it leads to an infinite loop when we try to check if transmutation is safe.

A couple simple examples that one might want to write, that are currently not possible to check transmutability for:
```rs
#[repr(C)] struct A(&'static B);
#[repr(C)] struct B(&'static A);
```

```rs
#[repr(C)]
enum IList<'a> { Nil, Cons(isize, &'a IList<'a>) }
#[repr(C)]
enum UList<'a> { Nil, Cons(usize, &'a UList<'a>) }
```

Previously, `@jswrenn` was considering writing a co-inductive solver from scratch, just for the `rustc_tranmsute` crate. Later on as I started working on Safe Transmute myself, I came across the `#[rustc_coinductive]` annotation, which is currently only being used for the `Sized` trait. Leveraging this trait actually solved the problem entirely, and it saves a lot of duplicate work that would have had to happen in `rustc_transmute`.
2023-07-11 13:48:59 +00:00
..
alloc Rollup merge of #107916 - reez12g:issue-107040, r=Amanieu 2023-05-30 12:57:38 +02:00
array Remove array_zip 2023-05-30 00:40:39 -07:00
ascii Add the basic ascii::Char type 2023-05-03 22:09:33 -07:00
async_iter use consistent terminology 2022-10-29 09:23:12 +02:00
cell replace version placeholders 2023-04-28 08:47:55 -07:00
char ascii::Char-ify the escaping code 2023-05-12 19:37:02 -07:00
cmp Merge two different equality specialization traits in core 2023-03-01 14:42:06 -08:00
convert Make rustc_on_unimplemented std-agnostic 2023-06-27 18:13:24 +08:00
ffi Add support for NetBSD/riscv64 aka. riscv64gc-unknown-netbsd. 2023-07-05 13:49:01 +00:00
fmt Mark internal functions and traits unsafe 2023-05-15 14:31:00 -04:00
future Rollup merge of #109970 - danielhenrymantilla:add-poll-fn-pin-clarifications, r=thomcc 2023-06-19 19:26:25 +02:00
hash Swap out CURRENT_RUSTC_VERSION to 1.71.0 2023-05-30 07:54:29 -04:00
intrinsics Documentation 2023-05-15 12:08:16 +02:00
iter Rollup merge of #113054 - Rageking8:make-rustc_on_unimplemented-std-agnostic, r=WaffleLapkin 2023-06-29 05:48:40 +02:00
macros Mention env! in option_env!'s docs 2023-06-14 18:29:08 +03:00
mem Enable co-induction support for Safe Transmute 2023-06-29 15:11:35 -07:00
net Alter Display for Ipv6Addr for IPv4-compatible addresses 2023-06-13 22:30:38 -04:00
num Auto merge of #112724 - scottmcm:simpler-unchecked-shifts, r=Mark-Simulacrum 2023-06-19 04:48:35 +00:00
ops Make rustc_on_unimplemented std-agnostic 2023-06-27 18:13:24 +08:00
panic Rollup merge of #108356 - gftea:master, r=workingjubilee 2023-05-15 17:12:44 +02:00
prelude Revert "Remove #[alloc_error_handler] from the compiler and library" 2023-04-25 00:08:35 +02:00
ptr Add diagnostic items for <*mut _>::is_null and <*const _>::is_null 2023-07-03 18:52:23 +02:00
slice Rollup merge of #113064 - marcospb19:add-note-in-vec-swap-docs, r=Mark-Simulacrum 2023-07-08 20:53:27 +02:00
str str docs: remove "Basic usage" text where not useful 2023-06-26 22:11:13 +02:00
sync replace version placeholders 2023-04-28 08:47:55 -07:00
task Auto merge of #96875 - SabrinaJewson:noop-waker, r=m-ou-se 2023-06-07 06:04:32 +00:00
unicode Apply changes to fix python linting errors 2023-06-16 20:56:01 -04:00
any.rs Fix typo 2023-06-07 21:27:51 -07:00
arch.rs move core::arch into separate file 2022-11-20 10:28:14 +01:00
ascii.rs ascii::Char-ify the escaping code 2023-05-12 19:37:02 -07:00
asserting.rs [RFC 2011] Library code 2022-05-22 07:18:32 -03:00
bool.rs core is now compilable 2023-04-16 07:20:26 +00:00
borrow.rs rm const traits in libcore 2023-04-16 06:49:27 +00:00
cell.rs Same for BorrowRef 2023-06-18 01:14:45 -07:00
clone.rs core is now compilable 2023-04-16 07:20:26 +00:00
cmp.rs Add #[inline] to functions that are never called 2023-05-07 12:41:37 +01:00
default.rs Remove default_free_fn feature 2023-07-08 12:10:12 +09:00
error.md Small round of typo fixes 2022-11-04 20:06:18 -07:00
error.rs Bump to latest beta 2023-03-15 08:55:22 -04:00
escape.rs ascii::Char-ify the escaping code 2023-05-12 19:37:02 -07:00
hint.rs Rollup merge of #108416 - pat-nel87:Issue-107957-black_box_docs, r=jyn514 2023-04-26 01:55:49 -05:00
internal_macros.rs rm const traits in libcore 2023-04-16 06:49:27 +00:00
intrinsics.rs Mark wrapped intrinsics as inline(always) 2023-06-30 12:07:21 +02:00
lib.rs Stabilize 'const_cstr_methods' 2023-06-01 17:39:18 -04:00
marker.rs Make rustc_on_unimplemented std-agnostic 2023-06-27 18:13:24 +08:00
option.rs Rollup merge of #109093 - Dante-Broggi:patch-2, r=joshtriplett 2023-06-04 13:21:25 +02:00
panic.rs Shorten lifetime of even more panic temporaries 2023-05-15 03:47:37 -07:00
panicking.rs Launch a non-unwinding panic for misaligned pointer deref 2023-06-16 09:20:33 -04:00
pin.rs Document Pin memory layout 2023-05-18 01:30:12 -04:00
primitive.rs mv std libs to library/ 2020-07-27 19:51:13 -05:00
primitive_docs.rs Extend unused_must_use to cover block exprs 2023-06-15 17:59:13 +08:00
result.rs replace version placeholders 2023-04-28 08:47:55 -07:00
time.rs Use fmt::Alignment instead of fmt::rt::v1::Alignment. 2023-04-20 18:03:47 +02:00
tuple.rs Impl ConstParamTy for tuples, make PartialStructuralEq a supertrait too 2023-06-01 18:21:42 +00:00
unit.rs Use implicit capture syntax in format_args 2022-03-10 10:23:40 -05:00