Auto merge of #94876 - b-naber:thir-abstract-const-changes, r=lcnr

Change Thir to lazily create constants

To allow `AbstractConst`s to work with the previous thir changes we made and those we want to make, i.e. to avoid problems due to `ValTree` and `ConstValue` conversions, we instead switch to a thir representation for constants that allows us to lazily create constants.

r? `@oli-obk`
This commit is contained in:
bors 2022-03-24 12:50:00 +00:00
commit 8d8135f003
17 changed files with 345 additions and 154 deletions

View file

@ -0,0 +1,20 @@
// build-pass
#![feature(adt_const_params)]
#![allow(incomplete_features)]
#[derive(PartialEq, Eq)]
struct Yikes;
impl Yikes {
fn mut_self(&mut self) {}
}
fn foo<const YIKES: Yikes>() {
YIKES.mut_self()
//~^ WARNING taking a mutable reference
}
fn main() {
foo::<{ Yikes }>()
}

View file

@ -0,0 +1,22 @@
warning: taking a mutable reference to a `const` item
--> $DIR/thir-constparam-temp.rs:14:5
|
LL | YIKES.mut_self()
| ^^^^^^^^^^^^^^^^
|
= note: `#[warn(const_item_mutation)]` on by default
= note: each usage of a `const` item creates a new temporary
= note: the mutable reference will refer to this temporary, not the original `const` item
note: mutable reference created due to call to this method
--> $DIR/thir-constparam-temp.rs:10:5
|
LL | fn mut_self(&mut self) {}
| ^^^^^^^^^^^^^^^^^^^^^^
note: `const` item defined here
--> $DIR/thir-constparam-temp.rs:13:14
|
LL | fn foo<const YIKES: Yikes>() {
| ^^^^^
warning: 1 warning emitted