Skip to content
Closed
Changes from 3 commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
d561a84
Update tests
veera-sivarajan Mar 3, 2024
9aac0c9
Mention Register Size in `#[warn(asm_sub_register)]`
veera-sivarajan Mar 3, 2024
d3299af
transmute: caution against int2ptr transmutation
RalfJung Mar 12, 2024
1bde828
Improve style
veera-sivarajan Mar 13, 2024
982918f
Handle str literals written with `'` lexed as lifetime
estebank Mar 9, 2024
4a10b01
Use shorter span for existing `'` -> `"` structured suggestion
estebank Mar 9, 2024
999a0dc
review comment: `str` -> string in messages
estebank Mar 13, 2024
6f388ef
Extend test to trigger on 2015, 2018 and 2021 editions
estebank Mar 14, 2024
ea1883d
Silence redundant error on char literal that was meant to be a string…
estebank Mar 14, 2024
f4d30b1
fix rustdoc test
estebank Mar 17, 2024
f4adb1e
add notes on how to store 'ptr or int'
RalfJung Mar 14, 2024
2758435
Fix compile of wasm64-unknown-unknown target
alexcrichton Mar 20, 2024
afc99cc
Update test for `aarch64`
veera-sivarajan Mar 20, 2024
063f011
add test for #52334
matthiaskrgr Mar 22, 2024
c3bde24
add test for #64784 Declarative macros can create infinite glob impo…
matthiaskrgr Mar 22, 2024
72d2b59
add test for str as extern "C" arg causes compiler panic #80125
matthiaskrgr Mar 22, 2024
6b0dfc5
add test for ice 83056 "bad input type for cast"
matthiaskrgr Mar 22, 2024
c7ef3cd
add test for #88212 ICE when lambda captures unsized local
matthiaskrgr Mar 22, 2024
3c1db06
add test for 88421 ICE: could not fully normalize `&<MyType as std::o…
matthiaskrgr Mar 22, 2024
efc57fb
add test for ice #90691 ICE: resolution failed during building vtable…
matthiaskrgr Mar 22, 2024
15ef7a0
add test for stack overflow with recursive type #98842
matthiaskrgr Mar 22, 2024
1fcf2ea
Uniquify ReError on input mode in canonicalizer
compiler-errors Mar 22, 2024
dec36c3
CFI: Support self_cell-like recursion
maurer Mar 3, 2024
4e8753b
Rework rmake support library to have a weakly-typed API with helper m…
jieyouxu Mar 13, 2024
246f746
Add test in `higher-ranked`
Luv-Ray Mar 23, 2024
188c46a
regression test for #103626
kadiwa4 Feb 19, 2024
7967915
CFI: Use Instance at callsites
maurer Mar 15, 2024
f434c27
CFI: Strip auto traits off Self for virtual calls
maurer Mar 15, 2024
b6b5745
In `pretty_print_type()`, print `async fn` futures' paths instead of …
kpreid Mar 23, 2024
e74b01e
core/panicking: fix outdated comment
RalfJung Mar 23, 2024
1480b14
add issue numbers via // issue: rust-lang/rust#ISSUE_NUM directive
matthiaskrgr Mar 22, 2024
62dd74b
Rollup merge of #121281 - kadiwa4:test_103626, r=estebank,lcnr
workingjubilee Mar 24, 2024
59ef740
Rollup merge of #121940 - veera-sivarajan:bugfix-121593, r=fmease
workingjubilee Mar 24, 2024
b6681d6
Rollup merge of #122217 - estebank:issue-119685, r=fmease
workingjubilee Mar 24, 2024
0f61527
Rollup merge of #122379 - RalfJung:int2ptr-transmute, r=m-ou-se
workingjubilee Mar 24, 2024
afa0060
Rollup merge of #122460 - jieyouxu:rmake-example-refactor, r=Nilstrieb
workingjubilee Mar 24, 2024
e87c914
Rollup merge of #122797 - alexcrichton:fix-compile-wasm64, r=Mark-Sim…
workingjubilee Mar 24, 2024
5f437ee
Rollup merge of #122875 - maurer:cfi-transparent-termination, r=worki…
workingjubilee Mar 24, 2024
0d52874
Rollup merge of #122879 - maurer:callsite-instances, r=workingjubilee
workingjubilee Mar 24, 2024
a280307
Rollup merge of #122895 - matthiaskrgr:ice-tests-5xxxx-to-9xxxx, r=fm…
workingjubilee Mar 24, 2024
35d575e
Rollup merge of #122907 - compiler-errors:uniquify-reerror, r=lcnr
workingjubilee Mar 24, 2024
7baf5d8
Rollup merge of #122923 - kpreid:print-async-def, r=compiler-errors
workingjubilee Mar 24, 2024
4ea53c0
Rollup merge of #122942 - Luv-Ray:master, r=lcnr
workingjubilee Mar 24, 2024
2dcdbfd
Rollup merge of #122963 - RalfJung:core-panicking, r=m-ou-se
workingjubilee Mar 24, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 33 additions & 8 deletions library/core/src/intrinsics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1165,14 +1165,6 @@ extern "rust-intrinsic" {
/// may lead to unexpected and unstable compilation results. This makes `transmute` **incredibly
/// unsafe**. `transmute` should be the absolute last resort.
///
/// Transmuting pointers *to* integers in a `const` context is [undefined behavior][ub],
/// unless the pointer was originally created *from* an integer.
/// (That includes this function specifically, integer-to-pointer casts, and helpers like [`invalid`][crate::ptr::dangling],
/// but also semantically-equivalent conversions such as punning through `repr(C)` union fields.)
/// Any attempt to use the resulting value for integer operations will abort const-evaluation.
/// (And even outside `const`, such transmutation is touching on many unspecified aspects of the
/// Rust memory model and should be avoided. See below for alternatives.)
///
/// Because `transmute` is a by-value operation, alignment of the *transmuted values
/// themselves* is not a concern. As with any other function, the compiler already ensures
/// both `Src` and `Dst` are properly aligned. However, when transmuting values that *point
Expand All @@ -1183,6 +1175,39 @@ extern "rust-intrinsic" {
///
/// [ub]: ../../reference/behavior-considered-undefined.html
///
/// # Transmutation between pointers and integers
///
/// Special care has to be taken when transmuting between pointers and integers, e.g.
/// transmuting between `*const ()` and `usize`.
///
/// Transmuting *pointers to integers* in a `const` context is [undefined behavior][ub], unless
/// the pointer was originally created *from* an integer. (That includes this function
/// specifically, integer-to-pointer casts, and helpers like [`dangling`][crate::ptr::dangling],
/// but also semantically-equivalent conversions such as punning through `repr(C)` union
/// fields.) Any attempt to use the resulting value for integer operations will abort
/// const-evaluation. (And even outside `const`, such transmutation is touching on many
/// unspecified aspects of the Rust memory model and should be avoided. See below for
/// alternatives.)
///
/// Transmuting *integers to pointers* is a largely unspecified operation. It is likely *not*
/// equivalent to an `as` cast. Doing non-zero-sized memory accesses with a pointer constructed
/// this way is currently considered undefined behavior.
///
/// All this also applies when the integer is nested inside an array, tuple, struct, or enum.
/// However, `MaybeUninit<usize>` is not considered an integer type for the purpose of this
/// section. Transmuting `*const ()` to `MaybeUninit<usize>` is fine---but then calling
/// `assume_init()` on that result is considered as completing the pointer-to-integer transmute
/// and thus runs into the issues discussed above.
///
/// In particular, doing a pointer-to-integer-to-pointer roundtrip via `transmute` is *not* a
/// lossless process. If you want to round-trip a pointer through an integer in a way that you
/// can get back the original pointer, you need to use `as` casts, or replace the integer type
/// by `MaybeUninit<$int>` (and never call `assume_init()`). If you are looking for a way to
/// store data of arbitrary type, also use `MaybeUninit<T>` (that will also handle uninitialized
/// memory due to padding). If you specifically need to store something that is "either an
/// integer or a pointer", use `*mut ()`: integers can be converted to pointers and back without
/// any loss (via `as` casts or via `transmute`).
///
/// # Examples
///
/// There are a few things that `transmute` is really useful for.
Expand Down