This is almost identical to the unsound example test case for issue-25860. The difference is that this variant only began compiling successfully since nightly-2020-06-24, whereas the existing known unsoundness already compiles since nightly-2015-02-18 (rustc 1.0.0).
I tried this code:
static UNIT: &'static &'static () = &&();
fn foo<'a, 'b, T>(_: &'a &'b (), v: &'b T) -> &'a T { v }
fn bad<'a, T>(x: &'a T) -> &'static T {
let f: fn(_, &T) -> &'static T = foo;
f(UNIT, x)
}
fn main() {
let r: &'static String;
{
let s = String::from("temporary");
r = bad(&s);
println!("while alive: {}", r);
}
println!("use-after-free reads: {}", r);
}
The only difference from that test case is the number of parameters and arguments in foo.
For reference:
|
fn foo<'a, 'b, T>(_: &'a &'b (), v: &'b T, _: &()) -> &'a T { v } |
|
|
|
fn bad<'a, T>(x: &'a T) -> &'static T { |
|
let f: fn(_, &'a T, &()) -> &'static T = foo; |
|
f(UNIT, x, &()) |
|
} |
I expected to see this happen: compilation should fail
Instead, this happened: the program compiled and produced the following use-after-free output:
while alive: temporary
use-after-free reads: j��;g
Meta
rustc --version --verbose:
rustc 1.98.0-nightly (6bdf43094 2026-06-01)
binary: rustc
commit-hash: 6bdf43094fae65d298bc430362f116176cd25a3c
commit-date: 2026-06-01
host: x86_64-unknown-linux-gnu
release: 1.98.0-nightly
LLVM version: 22.1.6
Bisection Results
Command: cargo bisect-rustc --start=2018-01-01 --end=2020-06-30 --regress=success --preserve --script rustc -- bug.rs
Regression in: nightly-2020-06-24.
Log
searched toolchains nightly-2018-01-01 through nightly-2020-06-30
********************************************************************************
Regression in nightly-2020-06-24
********************************************************************************
fetching https://static.rust-lang.org/dist/2020-06-23/channel-rust-nightly-git-commit-hash.txt
nightly manifest 2020-06-23: 40 B / 40 B [==============================================================================================================================================] 100.00 % 1.40 MB/s converted 2020-06-23 to 6bb3dbfc6c6d8992d08431f320ba296a0c2f7498
fetching https://static.rust-lang.org/dist/2020-06-24/channel-rust-nightly-git-commit-hash.txt
nightly manifest 2020-06-24: 40 B / 40 B [==============================================================================================================================================] 100.00 % 2.07 MB/s converted 2020-06-24 to ff5b446d2fdbd898bc97a751f2f72858de185cf1
looking for regression commit between 2020-06-23 and 2020-06-24
fetching (via remote github) commits from max(6bb3dbfc6c6d8992d08431f320ba296a0c2f7498, 2020-06-21) to ff5b446d2fdbd898bc97a751f2f72858de185cf1
ending github query because we found starting sha: 6bb3dbfc6c6d8992d08431f320ba296a0c2f7498
get_commits_between returning commits, len: 6
commit[0] 2020-06-22: Auto merge of #73415 - ehuss:update-cargo, r=ehuss
commit[1] 2020-06-22: Auto merge of #73594 - Aaron1011:revert/move-fn-self-msg, r=Manishearth
commit[2] 2020-06-23: Auto merge of #73007 - yoshuawuyts:socketaddr-from-string-u16, r=sfackler
commit[3] 2020-06-23: Auto merge of #73635 - Dylan-DPC:rollup-b4wbp42, r=Dylan-DPC
commit[4] 2020-06-23: Auto merge of #73643 - Manishearth:rollup-68dr8fz, r=Manishearth
commit[5] 2020-06-23: Auto merge of #73644 - ollie27:rustdoc_alias_filter, r=GuillaumeGomez
ERROR: no CI builds available between 6bb3dbfc6c6d8992d08431f320ba296a0c2f7498 and ff5b446d2fdbd898bc97a751f2f72858de185cf1 within last 167 days
This is almost identical to the unsound example test case for issue-25860. The difference is that this variant only began compiling successfully since
nightly-2020-06-24, whereas the existing known unsoundness already compiles since nightly-2015-02-18 (rustc 1.0.0).I tried this code:
The only difference from that test case is the number of parameters and arguments in
foo.For reference:
rust/tests/ui/implied-bounds/implied-bounds-on-nested-references-plus-variance-2.rs
Lines 6 to 11 in 4f84d9f
I expected to see this happen: compilation should fail
Instead, this happened: the program compiled and produced the following use-after-free output:
Meta
rustc --version --verbose:Bisection Results
Command:
cargo bisect-rustc --start=2018-01-01 --end=2020-06-30 --regress=success --preserve --script rustc -- bug.rsRegression in:
nightly-2020-06-24.Log