Skip to content

Commit

Permalink
Also support generic constants
Browse files Browse the repository at this point in the history
  • Loading branch information
oli-obk committed Jun 3, 2024
1 parent 94390a3 commit bdd257c
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 9 deletions.
18 changes: 9 additions & 9 deletions compiler/rustc_passes/src/reachable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,12 @@ use rustc_hir::def::{DefKind, Res};
use rustc_hir::def_id::{DefId, LocalDefId};
use rustc_hir::intravisit::{self, Visitor};
use rustc_hir::Node;
use rustc_middle::bug;
use rustc_middle::middle::codegen_fn_attrs::{CodegenFnAttrFlags, CodegenFnAttrs};
use rustc_middle::middle::privacy::{self, Level};
use rustc_middle::mir::interpret::{ConstAllocation, ErrorHandled, GlobalAlloc};
use rustc_middle::query::Providers;
use rustc_middle::ty::{self, ExistentialTraitRef, TyCtxt};
use rustc_middle::{bug, span_bug};
use rustc_privacy::DefIdVisitor;
use rustc_session::config::CrateType;
use tracing::debug;
Expand Down Expand Up @@ -205,19 +205,19 @@ impl<'tcx> ReachableContext<'tcx> {
}
}

// Reachable constants will be inlined into other crates
// unconditionally, so we need to make sure that their
// contents are also reachable.
hir::ItemKind::Const(..) => {
hir::ItemKind::Const(_, _, init) => {
// Only things actually ending up in the final constant need to be reachable.
// Everything else is either already available as `mir_for_ctfe`, or can't be used
// by codegen anyway.
match self.tcx.const_eval_poly_to_alloc(item.owner_id.def_id.into()) {
Ok(alloc) => {
let alloc = self.tcx.global_alloc(alloc.alloc_id).unwrap_memory();
self.propagate_from_alloc(alloc);
}
Err(ErrorHandled::TooGeneric(span)) => span_bug!(
span,
"generic constants aren't implemented in reachability"
),
// Reachable generic constants will be inlined into other crates
// unconditionally, so we need to make sure that their
// contents are also reachable.
Err(ErrorHandled::TooGeneric(_)) => self.visit_nested_body(init),
Err(ErrorHandled::Reported(..)) => {}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
//@compile-flags: --crate-type=lib -Copt-level=0

#![feature(generic_const_items)]

const fn foo() {}

pub static FOO: () = foo();
Expand All @@ -14,3 +16,12 @@ const fn bar() {}
pub const BAR: () = bar();

// CHECK-NOT: define{{.*}}bar{{.*}}

const fn baz() {}

#[rustfmt::skip]
pub const BAZ<const C: bool>: () = if C {
baz()
};

// CHECK: define{{.*}}baz{{.*}}

0 comments on commit bdd257c

Please sign in to comment.