Add regression test
This commit is contained in:
parent
e23ae72ac7
commit
97372c8c88
26
tests/ui/statics/const_generics.rs
Normal file
26
tests/ui/statics/const_generics.rs
Normal file
@ -0,0 +1,26 @@
|
||||
//! 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)]
|
||||
#![allow(incomplete_features)]
|
||||
|
||||
static FOO: usize = 42;
|
||||
const BAR: &usize = &FOO;
|
||||
fn foo<const X: &'static usize>() {
|
||||
// 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::<BAR>();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user