about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-03-24 12:50:00 +0000
committerbors <bors@rust-lang.org>2022-03-24 12:50:00 +0000
commit8d8135f003b35c3e109d013b2bed9ee9496da615 (patch)
tree85610c6ffbd311c19f153e058ab6f67ca2c06ddc /src
parentd2df372bca13bb60979c909660e69f2451630e81 (diff)
parent19041d995de9e3b2e4f6be46b2d77c0f19c607f7 (diff)
downloadrust-8d8135f003b35c3e109d013b2bed9ee9496da615.tar.gz
rust-8d8135f003b35c3e109d013b2bed9ee9496da615.zip
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`
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/mir/thir-constparam-temp.rs20
-rw-r--r--src/test/ui/mir/thir-constparam-temp.stderr22
2 files changed, 42 insertions, 0 deletions
diff --git a/src/test/ui/mir/thir-constparam-temp.rs b/src/test/ui/mir/thir-constparam-temp.rs
new file mode 100644
index 00000000000..cdc5910b36c
--- /dev/null
+++ b/src/test/ui/mir/thir-constparam-temp.rs
@@ -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 }>()
+}
diff --git a/src/test/ui/mir/thir-constparam-temp.stderr b/src/test/ui/mir/thir-constparam-temp.stderr
new file mode 100644
index 00000000000..297102e657e
--- /dev/null
+++ b/src/test/ui/mir/thir-constparam-temp.stderr
@@ -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
+