rust/tests
Matthias Krüger 8e4c70f02b
Rollup merge of #148746 - RalfJung:mutable-ref-in-const, r=davidtwco
const validation: remove check for mutable refs in final value of const

This check rejects code that is not necessarily UB, e.g. a mutable ref to a `static mut` that is very carefully used correctly. That led to us having to describe it in the Reference, which uncovered just how ad-hoc this check is (https://github.com/rust-lang/reference/issues/2074).

Even without this check, we still reject things like
```rust
const C: &mut i32 = &mut 0;
```
This is rejected by const checking -- the part of the frontend that looks at the source code and says whether it is allowed in const context. In the Reference, this restriction is explained [here](https://doc.rust-lang.org/nightly/reference/const_eval.html#r-const-eval.const-expr.borrows).

So, the check during validation is just a safety net. And it is already a safety net with gaping holes since we only check `&mut T`, not `&UnsafeCell<T>`, due to the fact that we promote some immutable values that have `!Freeze` type so `&!Freeze` actually can occur in the final value of a const.

So... it may be time for me to acknowledge that the "mutable ref in final value of const" check is a cure that's worth than the disease. Nobody asked for that check, I just added it because I was worried about soundness issues when we allow mutable references in constants. Originally it was much stricter, but I had to slowly relax it to its current form to prevent t from firing on code we intend to allow. In the end there are only 3 tests left that trigger this error, and they are all just constants containing references to mutable statics -- not the safest code in the world, but also not so bad that we have to spend a lot of time devising a core language limitation and associated Reference wording to prevent it from ever happening.

So... `@rust-lang/wg-const-eval` `@rust-lang/lang`  I propose that we allow code like this
```rust
static mut S: i32 = 3;
const C2: &'static mut i32 = unsafe { &mut * &raw mut S };
```
`@theemathas` would be great if you could try to poke a hole into this. ;)
2025-11-29 20:54:05 +01:00
..
assembly-llvm Rollup merge of #149409 - cezarbbb:stable_ssp, r=SparrowLii 2025-11-29 21:12:26 +11:00
auxiliary Rollup merge of #147521 - sayantn:simd-const-intrinsics, r=madsmtm 2025-11-19 09:48:07 +01:00
codegen-llvm Auto merge of #147404 - JamieCunliffe:inline-always, r=jackh726 2025-11-28 22:58:22 +00:00
codegen-units Document fmt::Arguments internal representation. 2025-11-12 12:48:39 +01:00
coverage Bless coverage tests. 2025-11-12 12:48:45 +01:00
coverage-run-rustdoc
crashes Replace OffsetOf by an actual sum. 2025-11-18 00:10:03 +00:00
debuginfo Update debuginfo test from Global to System 2025-11-28 23:35:38 +01:00
incremental Bless tests. 2025-11-12 12:48:27 +01:00
mir-opt Rollup merge of #149087 - nxsaken:unchecked_neg_shifts_stabilize, r=Amanieu 2025-11-28 15:30:43 +11:00
pretty Document fmt::Arguments internal representation. 2025-11-12 12:48:39 +01:00
run-make Rollup merge of #148234 - notriddle:doc-cci, r=GuillaumeGomez 2025-11-24 19:10:43 +01:00
run-make-cargo Skip the panic-immediate-abort-works test when cross-compiling 2025-09-22 21:13:38 -04:00
rustdoc add test 2025-11-26 16:33:13 +09:00
rustdoc-gui Fix invalid link generation for type alias methods 2025-11-24 17:01:32 +01:00
rustdoc-js Auto merge of #149370 - Zalathar:rollup-6fkk5x4, r=Zalathar 2025-11-27 07:30:25 +00:00
rustdoc-js-std Add regression test for including derive macros in macro filtering 2025-10-27 16:00:32 +01:00
rustdoc-json Add tests for doc(attribute = "...") attribute 2025-08-28 15:56:30 +02:00
rustdoc-ui fix tooling 2025-11-26 11:09:03 +01:00
ui Rollup merge of #148746 - RalfJung:mutable-ref-in-const, r=davidtwco 2025-11-29 20:54:05 +01:00
ui-fulldeps Add UI test for DefId::parent() 2025-11-14 20:33:56 -05:00
COMPILER_TESTS.md