File tree 6 files changed +84
-0
lines changed
6 files changed +84
-0
lines changed Original file line number Diff line number Diff line change @@ -732,6 +732,11 @@ where
732
732
if self . alloc_map . contains_key ( & alloc) {
733
733
// Not yet interned, so proceed recursively
734
734
self . intern_static ( alloc, mutability) ?;
735
+ } else if self . dead_alloc_map . contains_key ( & alloc) {
736
+ // dangling pointer
737
+ return err ! ( ValidationFailure (
738
+ "encountered dangling pointer in final constant" . into( ) ,
739
+ ) )
735
740
}
736
741
}
737
742
Ok ( ( ) )
Original file line number Diff line number Diff line change
1
+ warning[E0716]: temporary value dropped while borrowed
2
+ --> $DIR/dangling-alloc-id-ice-2.rs:5:28
3
+ |
4
+ LL | static MAP: Slice = Slice(&[
5
+ | ___________________________-^
6
+ | |___________________________|
7
+ | ||
8
+ LL | || b"CloseEvent" as &'static [u8],
9
+ LL | || ]);
10
+ | || -- temporary value is freed at the end of this statement
11
+ | ||_|
12
+ | |__creates a temporary which is freed while still in use
13
+ | cast requires that borrow lasts for `'static`
14
+ |
15
+ = warning: This error has been downgraded to a warning for backwards compatibility with previous releases.
16
+ It represents potential unsoundness in your code.
17
+ This warning will become a hard error in the future.
18
+
19
+ error[E0080]: could not evaluate static initializer
20
+ --> $DIR/dangling-alloc-id-ice-2.rs:5:1
21
+ |
22
+ LL | / static MAP: Slice = Slice(&[
23
+ LL | | b"CloseEvent" as &'static [u8],
24
+ LL | | ]);
25
+ | |___^ type validation failed: encountered dangling pointer in final constant
26
+
27
+ error: aborting due to previous error
28
+
29
+ Some errors occurred: E0080, E0716.
30
+ For more information about an error, try `rustc --explain E0080`.
Original file line number Diff line number Diff line change
1
+ // FIXME(#55223) this is just a reproduction test showing the wrong behavior
2
+
3
+ struct Slice ( & ' static [ & ' static [ u8 ] ] ) ;
4
+
5
+ static MAP : Slice = Slice ( & [
6
+ b"CloseEvent" as & ' static [ u8 ] ,
7
+ ] ) ;
8
+
9
+
10
+ fn main ( ) { }
Original file line number Diff line number Diff line change
1
+ error[E0080]: could not evaluate static initializer
2
+ --> $DIR/dangling-alloc-id-ice-2.rs:5:1
3
+ |
4
+ LL | / static MAP: Slice = Slice(&[
5
+ LL | | b"CloseEvent" as &'static [u8],
6
+ LL | | ]);
7
+ | |___^ type validation failed: encountered dangling pointer in final constant
8
+
9
+ error: aborting due to previous error
10
+
11
+ For more information about this error, try `rustc --explain E0080`.
Original file line number Diff line number Diff line change
1
+ // https://github.com/rust-lang/rust/issues/55223
2
+
3
+ #![ feature( const_let) ]
4
+
5
+ union Foo < ' a > {
6
+ y : & ' a ( ) ,
7
+ long_live_the_unit : & ' static ( ) ,
8
+ }
9
+
10
+ const FOO : & ( ) = { //~ ERROR this constant cannot be used
11
+ let y = ( ) ;
12
+ unsafe { Foo { y : & y } . long_live_the_unit }
13
+ } ;
14
+
15
+ fn main ( ) { }
Original file line number Diff line number Diff line change
1
+ error: this constant cannot be used
2
+ --> $DIR/dangling-alloc-id-ice.rs:10:1
3
+ |
4
+ LL | / const FOO: &() = { //~ ERROR this constant cannot be used
5
+ LL | | let y = ();
6
+ LL | | unsafe { Foo { y: &y }.long_live_the_unit }
7
+ LL | | };
8
+ | |__^ type validation failed: encountered dangling pointer in final constant
9
+ |
10
+ = note: #[deny(const_err)] on by default
11
+
12
+ error: aborting due to previous error
13
+
You can’t perform that action at this time.
0 commit comments