Skip to content

Commit bd14c7b

Browse files
committed
Teach llvm backend how to fall back to default bodies
1 parent a51b61a commit bd14c7b

File tree

2 files changed

+6
-14
lines changed

2 files changed

+6
-14
lines changed

src/abi/mod.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -396,9 +396,7 @@ pub(crate) fn codegen_terminator_call<'tcx>(
396396
source_info,
397397
) {
398398
Ok(()) => return,
399-
// Unimplemented intrinsics must have a fallback body. The fallback body is obtained
400-
// by converting the `InstanceDef::Intrinsic` to an `InstanceDef::Item`.
401-
Err(()) => Some(Instance::new(instance.def_id(), instance.args)),
399+
Err(instance) => Some(instance),
402400
}
403401
}
404402
InstanceDef::DropGlue(_, None) => {

src/intrinsics/mod.rs

+5-11
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ pub(crate) fn codegen_intrinsic_call<'tcx>(
268268
destination: CPlace<'tcx>,
269269
target: Option<BasicBlock>,
270270
source_info: mir::SourceInfo,
271-
) -> Result<(), ()> {
271+
) -> Result<(), Instance<'tcx>> {
272272
let intrinsic = fx.tcx.item_name(instance.def_id());
273273
let instance_args = instance.args;
274274

@@ -431,7 +431,7 @@ fn codegen_regular_intrinsic_call<'tcx>(
431431
ret: CPlace<'tcx>,
432432
destination: Option<BasicBlock>,
433433
source_info: mir::SourceInfo,
434-
) -> Result<(), ()> {
434+
) -> Result<(), Instance<'tcx>> {
435435
assert_eq!(generic_args, instance.args);
436436
let usize_layout = fx.layout_of(fx.tcx.types.usize);
437437

@@ -1229,14 +1229,6 @@ fn codegen_regular_intrinsic_call<'tcx>(
12291229
ret.write_cvalue(fx, CValue::by_val(cmp, ret.layout()));
12301230
}
12311231

1232-
sym::const_allocate => {
1233-
intrinsic_args!(fx, args => (_size, _align); intrinsic);
1234-
1235-
// returns a null pointer at runtime.
1236-
let null = fx.bcx.ins().iconst(fx.pointer_type, 0);
1237-
ret.write_cvalue(fx, CValue::by_val(null, ret.layout()));
1238-
}
1239-
12401232
sym::const_deallocate => {
12411233
intrinsic_args!(fx, args => (_ptr, _size, _align); intrinsic);
12421234
// nop at runtime.
@@ -1257,7 +1249,9 @@ fn codegen_regular_intrinsic_call<'tcx>(
12571249
);
12581250
}
12591251

1260-
_ => return Err(()),
1252+
// Unimplemented intrinsics must have a fallback body. The fallback body is obtained
1253+
// by converting the `InstanceDef::Intrinsic` to an `InstanceDef::Item`.
1254+
_ => return Err(Instance::new(instance.def_id(), instance.args)),
12611255
}
12621256

12631257
let ret_block = fx.get_block(destination.unwrap());

0 commit comments

Comments
 (0)