//! Check that we lose the information that `BAR` points to `FOO` //! when going through a const generic. //! This is not an intentional guarantee, it just describes the status quo. //@ run-pass // With optimizations, LLVM will deduplicate the constant `X` whose // value is `&42` to just be a reference to the static. This is correct, // but obscures the issue we're trying to show. //@ revisions: opt noopt //@[noopt] compile-flags: -Copt-level=0 //@[opt] compile-flags: -O #![feature(const_refs_to_static)] #![feature(adt_const_params, unsized_const_params)] #![allow(incomplete_features)] static FOO: usize = 42; const BAR: &usize = &FOO; fn foo() { // Without optimizations, `X` ends up pointing to a copy of `FOO` instead of `FOO` itself. assert_eq!(cfg!(opt), std::ptr::eq(X, &FOO)); } fn main() { foo::(); }