File tree Expand file tree Collapse file tree 5 files changed +56
-0
lines changed Expand file tree Collapse file tree 5 files changed +56
-0
lines changed Original file line number Diff line number Diff line change @@ -737,6 +737,11 @@ where
737737 if self . alloc_map . contains_key ( & alloc) {
738738 // Not yet interned, so proceed recursively
739739 self . intern_static ( alloc, mutability) ?;
740+ } else if self . dead_alloc_map . contains_key ( & alloc) {
741+ // dangling pointer
742+ return err ! ( ValidationFailure (
743+ "encountered dangling pointer in final constant" . into( ) ,
744+ ) )
740745 }
741746 }
742747 Ok ( ( ) )
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 any use of this value will cause an error
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: any use of this value will cause an error
2+ --> $DIR/dangling-alloc-id-ice.rs:10:1
3+ |
4+ LL | / const FOO: &() = { //~ ERROR any use of this value will cause an error
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+
Original file line number Diff line number Diff line change 1+ #![ feature( const_let) ]
2+
3+ const FOO : * const u32 = { //~ ERROR any use of this value will cause an error
4+ let x = 42 ;
5+ & x
6+ } ;
7+
8+ fn main ( ) {
9+ let x = FOO ;
10+ }
Original file line number Diff line number Diff line change 1+ error: any use of this value will cause an error
2+ --> $DIR/dangling_raw_ptr.rs:3:1
3+ |
4+ LL | / const FOO: *const u32 = { //~ ERROR any use of this value will cause an error
5+ LL | | let x = 42;
6+ LL | | &x
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