mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
Contents of reachable statics is reachable
This commit is contained in:
parent
3e9e5745df
commit
0383131f7f
@ -98,15 +98,11 @@ impl<'tcx> Visitor<'tcx> for ReachableContext<'tcx> {
|
||||
self.worklist.push(def_id);
|
||||
} else {
|
||||
match res {
|
||||
// If this path leads to a constant, then we need to
|
||||
// recurse into the constant to continue finding
|
||||
// items that are reachable.
|
||||
Res::Def(DefKind::Const | DefKind::AssocConst, _) => {
|
||||
// Reachable constants and reachable statics can have their contents inlined
|
||||
// into other crates. Mark them as reachable and recurse into their body.
|
||||
Res::Def(DefKind::Const | DefKind::AssocConst | DefKind::Static(_), _) => {
|
||||
self.worklist.push(def_id);
|
||||
}
|
||||
|
||||
// If this wasn't a static, then the destination is
|
||||
// surely reachable.
|
||||
_ => {
|
||||
self.reachable_symbols.insert(def_id);
|
||||
}
|
||||
|
@ -1,10 +1,14 @@
|
||||
pub static V: &u32 = &X;
|
||||
pub static F: fn() = f;
|
||||
pub static G: fn() = G0;
|
||||
|
||||
static X: u32 = 42;
|
||||
static G0: fn() = g;
|
||||
|
||||
pub fn v() -> *const u32 {
|
||||
V
|
||||
}
|
||||
|
||||
fn f() {}
|
||||
|
||||
fn g() {}
|
||||
|
@ -1,9 +1,11 @@
|
||||
// Regression test for #84455 and #115052.
|
||||
// run-pass
|
||||
// aux-build:static_init_aux.rs
|
||||
extern crate static_init_aux as aux;
|
||||
|
||||
static V: &u32 = aux::V;
|
||||
static F: fn() = aux::F;
|
||||
static G: fn() = aux::G;
|
||||
|
||||
fn v() -> *const u32 {
|
||||
V
|
||||
@ -12,4 +14,5 @@ fn v() -> *const u32 {
|
||||
fn main() {
|
||||
assert_eq!(aux::v(), crate::v());
|
||||
F();
|
||||
G();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user