Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also orlearn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also.Learn more about diff comparisons here.
base repository:rust-lang/rust
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base:main
Choose a base ref
Loading
...
head repository:rust-lang/rust
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare:try-perf
Choose a head ref
Loading
Checking mergeability… Don’t worry, you can still create the pull request.
  • 1commit
  • 12files changed
  • 1contributor

Commits on Nov 29, 2025

  1. Unrolled build for#148746

    Rollup merge of#148746 - RalfJung:mutable-ref-in-const, r=davidtwcoconst validation: remove check for mutable refs in final value of constThis 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 (rust-lang/reference#2074).Even without this check, we still reject things like```rustconst 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```ruststatic 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. ;)
    @rust-timer
    rust-timer authoredNov 29, 2025
    Configuration menu
    Copy the full SHA
    fa3c1beView commit details
    Browse the repository at this point in the history
Loading

[8]ページ先頭

©2009-2025 Movatter.jp