diff options
| author | Oli Scherer <git-spam-no-reply9815368754983@oli-obk.de> | 2022-11-30 14:35:23 +0000 |
|---|---|---|
| committer | Oli Scherer <git-spam-no-reply9815368754983@oli-obk.de> | 2022-11-30 14:35:23 +0000 |
| commit | 9ec72dfe72cb4f37e1bf3794459d68ce234bab31 (patch) | |
| tree | aee449a59daea36edf25b9f2269664d30bb50b17 /src | |
| parent | bb6755859c3cd84092cf0361614b1cf255e8da11 (diff) | |
| download | rust-9ec72dfe72cb4f37e1bf3794459d68ce234bab31.tar.gz rust-9ec72dfe72cb4f37e1bf3794459d68ce234bab31.zip | |
Close accidental promotion check hole
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/consts/promoted_const_call.rs | 5 | ||||
| -rw-r--r-- | src/test/ui/consts/promoted_const_call.stderr | 23 | ||||
| -rw-r--r-- | src/test/ui/consts/promoted_const_call2.rs | 6 | ||||
| -rw-r--r-- | src/test/ui/consts/promoted_const_call2.stderr | 30 | ||||
| -rw-r--r-- | src/test/ui/consts/promoted_const_call3.rs | 4 | ||||
| -rw-r--r-- | src/test/ui/consts/promoted_const_call3.stderr | 33 |
6 files changed, 93 insertions, 8 deletions
diff --git a/src/test/ui/consts/promoted_const_call.rs b/src/test/ui/consts/promoted_const_call.rs index 465d8e1f402..3034d3da95c 100644 --- a/src/test/ui/consts/promoted_const_call.rs +++ b/src/test/ui/consts/promoted_const_call.rs @@ -1,6 +1,3 @@ -// check-pass -// known-bug: #91009 - #![feature(const_mut_refs)] #![feature(const_trait_impl)] struct Panic; @@ -8,6 +5,8 @@ impl const Drop for Panic { fn drop(&mut self) { panic!(); } } pub const fn id<T>(x: T) -> T { x } pub const C: () = { let _: &'static _ = &id(&Panic); + //~^ ERROR: temporary value dropped while borrowed + //~| ERROR: temporary value dropped while borrowed }; fn main() {} diff --git a/src/test/ui/consts/promoted_const_call.stderr b/src/test/ui/consts/promoted_const_call.stderr new file mode 100644 index 00000000000..32bb1941a7d --- /dev/null +++ b/src/test/ui/consts/promoted_const_call.stderr @@ -0,0 +1,23 @@ +error[E0716]: temporary value dropped while borrowed + --> $DIR/promoted_const_call.rs:7:26 + | +LL | let _: &'static _ = &id(&Panic); + | ---------- ^^^^^^^^^^ creates a temporary value which is freed while still in use + | | + | type annotation requires that borrow lasts for `'static` +... +LL | }; + | - temporary value is freed at the end of this statement + +error[E0716]: temporary value dropped while borrowed + --> $DIR/promoted_const_call.rs:7:30 + | +LL | let _: &'static _ = &id(&Panic); + | ---------- ^^^^^ - temporary value is freed at the end of this statement + | | | + | | creates a temporary value which is freed while still in use + | type annotation requires that borrow lasts for `'static` + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0716`. diff --git a/src/test/ui/consts/promoted_const_call2.rs b/src/test/ui/consts/promoted_const_call2.rs index 82bde2b58d5..7be0bcdf9e9 100644 --- a/src/test/ui/consts/promoted_const_call2.rs +++ b/src/test/ui/consts/promoted_const_call2.rs @@ -1,10 +1,10 @@ -// check-pass -// known-bug: #91009 - #![feature(const_precise_live_drops)] pub const fn id<T>(x: T) -> T { x } pub const C: () = { let _: &'static _ = &id(&String::new()); + //~^ ERROR: temporary value dropped while borrowed + //~| ERROR: temporary value dropped while borrowed + //~| ERROR: destructor of `String` cannot be evaluated at compile-time }; fn main() {} diff --git a/src/test/ui/consts/promoted_const_call2.stderr b/src/test/ui/consts/promoted_const_call2.stderr new file mode 100644 index 00000000000..b93c0862a25 --- /dev/null +++ b/src/test/ui/consts/promoted_const_call2.stderr @@ -0,0 +1,30 @@ +error[E0716]: temporary value dropped while borrowed + --> $DIR/promoted_const_call2.rs:4:26 + | +LL | let _: &'static _ = &id(&String::new()); + | ---------- ^^^^^^^^^^^^^^^^^^ creates a temporary value which is freed while still in use + | | + | type annotation requires that borrow lasts for `'static` +... +LL | }; + | - temporary value is freed at the end of this statement + +error[E0716]: temporary value dropped while borrowed + --> $DIR/promoted_const_call2.rs:4:30 + | +LL | let _: &'static _ = &id(&String::new()); + | ---------- ^^^^^^^^^^^^^ - temporary value is freed at the end of this statement + | | | + | | creates a temporary value which is freed while still in use + | type annotation requires that borrow lasts for `'static` + +error[E0493]: destructor of `String` cannot be evaluated at compile-time + --> $DIR/promoted_const_call2.rs:4:30 + | +LL | let _: &'static _ = &id(&String::new()); + | ^^^^^^^^^^^^^ the destructor for this type cannot be evaluated in constants + +error: aborting due to 3 previous errors + +Some errors have detailed explanations: E0493, E0716. +For more information about an error, try `rustc --explain E0493`. diff --git a/src/test/ui/consts/promoted_const_call3.rs b/src/test/ui/consts/promoted_const_call3.rs index 3b55a6f247e..05381c751ee 100644 --- a/src/test/ui/consts/promoted_const_call3.rs +++ b/src/test/ui/consts/promoted_const_call3.rs @@ -6,9 +6,11 @@ pub const C: () = { let _: &'static _ = &id(&String::new()); //~^ ERROR: destructor of `String` cannot be evaluated at compile-time + //~| ERROR: temporary value dropped while borrowed + //~| ERROR: temporary value dropped while borrowed let _: &'static _ = &std::mem::ManuallyDrop::new(String::new()); - // Promoted. bug! + //~^ ERROR: temporary value dropped while borrowed }; fn main() {} diff --git a/src/test/ui/consts/promoted_const_call3.stderr b/src/test/ui/consts/promoted_const_call3.stderr index e436b7c23d4..f6b4b26d21f 100644 --- a/src/test/ui/consts/promoted_const_call3.stderr +++ b/src/test/ui/consts/promoted_const_call3.stderr @@ -26,7 +26,38 @@ LL | let _: &'static _ = &String::new(); LL | }; | - temporary value is freed at the end of this statement -error: aborting due to 3 previous errors +error[E0716]: temporary value dropped while borrowed + --> $DIR/promoted_const_call3.rs:7:26 + | +LL | let _: &'static _ = &id(&String::new()); + | ---------- ^^^^^^^^^^^^^^^^^^ creates a temporary value which is freed while still in use + | | + | type annotation requires that borrow lasts for `'static` +... +LL | }; + | - temporary value is freed at the end of this statement + +error[E0716]: temporary value dropped while borrowed + --> $DIR/promoted_const_call3.rs:7:30 + | +LL | let _: &'static _ = &id(&String::new()); + | ---------- ^^^^^^^^^^^^^ - temporary value is freed at the end of this statement + | | | + | | creates a temporary value which is freed while still in use + | type annotation requires that borrow lasts for `'static` + +error[E0716]: temporary value dropped while borrowed + --> $DIR/promoted_const_call3.rs:12:26 + | +LL | let _: &'static _ = &std::mem::ManuallyDrop::new(String::new()); + | ---------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ creates a temporary value which is freed while still in use + | | + | type annotation requires that borrow lasts for `'static` +LL | +LL | }; + | - temporary value is freed at the end of this statement + +error: aborting due to 6 previous errors Some errors have detailed explanations: E0493, E0716. For more information about an error, try `rustc --explain E0493`. |
