Skip to content

Commit c04fe52

Browse files
committed
Add a scheme for moving away from extern "rust-intrinsic" entirely
1 parent b9d8f00 commit c04fe52

File tree

26 files changed

+120
-27
lines changed

26 files changed

+120
-27
lines changed

compiler/rustc_borrowck/src/type_check/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1648,7 +1648,7 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> {
16481648

16491649
let func_ty = func.ty(body, self.infcx.tcx);
16501650
if let ty::FnDef(def_id, _) = *func_ty.kind() {
1651-
if let Some(sym::simd_shuffle) = self.tcx().intrinsic(def_id) {
1651+
if self.tcx().is_intrinsic(def_id, sym::simd_shuffle) {
16521652
if !matches!(args[2], Spanned { node: Operand::Constant(_), .. }) {
16531653
self.tcx().dcx().emit_err(SimdShuffleLastConst { span: term.source_info.span });
16541654
}

compiler/rustc_codegen_ssa/src/back/symbol_export.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use rustc_middle::ty::{self, SymbolName, TyCtxt};
1616
use rustc_middle::ty::{GenericArgKind, GenericArgsRef};
1717
use rustc_middle::util::Providers;
1818
use rustc_session::config::{CrateType, OomStrategy};
19+
use rustc_span::sym;
1920
use rustc_target::spec::{SanitizerSet, TlsModel};
2021

2122
pub fn threshold(tcx: TyCtxt<'_>) -> SymbolExportLevel {
@@ -81,6 +82,10 @@ fn reachable_non_generics_provider(tcx: TyCtxt<'_>, _: LocalCrate) -> DefIdMap<S
8182
return library.kind.is_statically_included().then_some(def_id);
8283
}
8384

85+
if tcx.has_attr(def_id, sym::rustc_intrinsic_must_be_overridden) {
86+
return None;
87+
}
88+
8489
// Only consider nodes that actually have exported symbols.
8590
match tcx.def_kind(def_id) {
8691
DefKind::Fn | DefKind::Static(_) => {}

compiler/rustc_codegen_ssa/src/mir/block.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -787,7 +787,9 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
787787

788788
// Handle intrinsics old codegen wants Expr's for, ourselves.
789789
let intrinsic = match def {
790-
Some(ty::InstanceDef::Intrinsic(def_id)) => Some(bx.tcx().intrinsic(def_id).unwrap()),
790+
Some(ty::InstanceDef::Intrinsic(def_id)) => {
791+
Some(bx.tcx().intrinsic(def_id).unwrap().name)
792+
}
791793
_ => None,
792794
};
793795

compiler/rustc_feature/src/builtin_attrs.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -795,6 +795,10 @@ pub const BUILTIN_ATTRIBUTES: &[BuiltinAttribute] = &[
795795
rustc_intrinsic, Normal, template!(Word), ErrorFollowing,
796796
"the `#[rustc_intrinsic]` attribute is used to declare intrinsics with function bodies",
797797
),
798+
rustc_attr!(
799+
rustc_intrinsic_must_be_overridden, Normal, template!(Word), ErrorFollowing,
800+
"the `#[rustc_intrinsic_must_be_overridden]` attribute is used to declare intrinsics without real bodies",
801+
),
798802

799803
// ==========================================================================
800804
// Internal attributes, Testing:

compiler/rustc_hir_analysis/src/check/check.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -473,12 +473,12 @@ pub(crate) fn check_item_type(tcx: TyCtxt<'_>, def_id: LocalDefId) {
473473
check_enum(tcx, def_id);
474474
}
475475
DefKind::Fn => {
476-
if let Some(name) = tcx.intrinsic(def_id) {
476+
if let Some(i) = tcx.intrinsic(def_id) {
477477
intrinsic::check_intrinsic_type(
478478
tcx,
479479
def_id,
480480
tcx.def_ident_span(def_id).unwrap(),
481-
name,
481+
i.name,
482482
Abi::Rust,
483483
)
484484
}

compiler/rustc_hir_typeck/src/callee.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
480480

481481
if let Some(def_id) = def_id
482482
&& self.tcx.def_kind(def_id) == hir::def::DefKind::Fn
483-
&& matches!(self.tcx.intrinsic(def_id), Some(sym::const_eval_select))
483+
&& self.tcx.is_intrinsic(def_id, sym::const_eval_select)
484484
{
485485
let fn_sig = self.resolve_vars_if_possible(fn_sig);
486486
for idx in 0..=1 {

compiler/rustc_lint/src/builtin.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1227,7 +1227,7 @@ impl<'tcx> LateLintPass<'tcx> for MutableTransmutes {
12271227
}
12281228

12291229
fn def_id_is_transmute(cx: &LateContext<'_>, def_id: DefId) -> bool {
1230-
matches!(cx.tcx.intrinsic(def_id), Some(sym::transmute))
1230+
cx.tcx.is_intrinsic(def_id, sym::transmute)
12311231
}
12321232
}
12331233
}

compiler/rustc_metadata/src/rmeta/decoder.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1744,7 +1744,7 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
17441744
self.root.tables.attr_flags.get(self, index)
17451745
}
17461746

1747-
fn get_intrinsic(self, index: DefIndex) -> Option<Symbol> {
1747+
fn get_intrinsic(self, index: DefIndex) -> Option<ty::IntrinsicDef> {
17481748
self.root.tables.intrinsic.get(self, index).map(|d| d.decode(self))
17491749
}
17501750

compiler/rustc_metadata/src/rmeta/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ macro_rules! define_tables {
375375

376376
define_tables! {
377377
- defaulted:
378-
intrinsic: Table<DefIndex, Option<LazyValue<Symbol>>>,
378+
intrinsic: Table<DefIndex, Option<LazyValue<ty::IntrinsicDef>>>,
379379
is_macro_rules: Table<DefIndex, bool>,
380380
is_type_alias_impl_trait: Table<DefIndex, bool>,
381381
type_alias_is_lazy: Table<DefIndex, bool>,

compiler/rustc_middle/src/query/erase.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ trivial! {
240240
Option<rustc_span::Span>,
241241
Option<rustc_target::spec::PanicStrategy>,
242242
Option<usize>,
243-
Option<rustc_span::Symbol>,
243+
Option<rustc_middle::ty::IntrinsicDef>,
244244
Result<(), rustc_errors::ErrorGuaranteed>,
245245
Result<(), rustc_middle::traits::query::NoSolution>,
246246
Result<rustc_middle::traits::EvaluationResult, rustc_middle::traits::OverflowError>,

0 commit comments

Comments
 (0)