Rollup merge of #115114 - tmiasko:115052, r=compiler-errors

Contents of reachable statics is reachable

Fixes #115052.
This commit is contained in:
Dylan DPC 2023-08-23 05:35:18 +00:00 committed by GitHub
commit 0a78123b55
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 7 deletions

View File

@ -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);
}

View File

@ -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() {}

View File

@ -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();
}