Description
I'm seeing the ptr::eq function from the standard library sometimes return false when it should return true. This is happening in debug mode in nightly and beta, but not stable, and not in any version in release mode.
Here's the simplest I could get a reproduction of the issue:
use std::ptr;
use container::Container;
trait Trait {}
struct Struct {}
impl Trait for Struct {}
mod container {
use Trait;
pub(crate) struct Container<'a> {
pub(crate) item: &'a Trait,
}
}
impl<'a> Container<'a> {
fn new(item: &'a Struct) -> Container<'a> {
Container { item }
}
}
fn main() {
let item = Struct {};
let container = Container::new(&item);
assert!(ptr::eq(container.item, &item));
}
Expected the assertion to pass, and it fails on beta and nightly, in debug mode only.
Meta
rustc +beta --version --verbose
:
rustc 1.22.0-beta.3 (cc6ed06 2017-11-13)
binary: rustc
commit-hash: cc6ed06
commit-date: 2017-11-13
host: x86_64-pc-windows-msvc
release: 1.22.0-beta.3
LLVM version: 4.0
rustc +nightly --version --verbose
:
rustc 1.23.0-nightly (5041b3b 2017-11-19)
binary: rustc
commit-hash: 5041b3b
commit-date: 2017-11-19
host: x86_64-pc-windows-msvc
release: 1.23.0-nightly
LLVM version: 4.0