Skip to content

Commit 9809f5d

Browse files
authored
Update to nightly-2021-09-28 (#97)
1 parent 11c2023 commit 9809f5d

File tree

6 files changed

+63
-13
lines changed

6 files changed

+63
-13
lines changed

rust-toolchain

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
nightly-2021-09-17
1+
nightly-2021-09-28

src/builder.rs

+16-1
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,12 @@ use rustc_codegen_ssa::traits::{
3131
StaticBuilderMethods,
3232
};
3333
use rustc_middle::ty::{ParamEnv, Ty, TyCtxt};
34-
use rustc_middle::ty::layout::{HasParamEnv, HasTyCtxt, LayoutError, LayoutOfHelpers, TyAndLayout};
34+
use rustc_middle::ty::layout::{FnAbiError, FnAbiOfHelpers, FnAbiRequest, HasParamEnv, HasTyCtxt, LayoutError, LayoutOfHelpers, TyAndLayout};
3535
use rustc_span::Span;
3636
use rustc_span::def_id::DefId;
3737
use rustc_target::abi::{
3838
self,
39+
call::FnAbi,
3940
Align,
4041
HasDataLayout,
4142
Size,
@@ -347,6 +348,20 @@ impl<'tcx> LayoutOfHelpers<'tcx> for Builder<'_, '_, 'tcx> {
347348
}
348349
}
349350

351+
impl<'tcx> FnAbiOfHelpers<'tcx> for Builder<'_, '_, 'tcx> {
352+
type FnAbiOfResult = &'tcx FnAbi<'tcx, Ty<'tcx>>;
353+
354+
#[inline]
355+
fn handle_fn_abi_err(
356+
&self,
357+
err: FnAbiError<'tcx>,
358+
span: Span,
359+
fn_abi_request: FnAbiRequest<'tcx>,
360+
) -> ! {
361+
self.cx.handle_fn_abi_err(err, span, fn_abi_request)
362+
}
363+
}
364+
350365
impl<'gcc, 'tcx> Deref for Builder<'_, 'gcc, 'tcx> {
351366
type Target = CodegenCx<'gcc, 'tcx>;
352367

src/callee.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
use gccjit::{FunctionType, RValue};
22
use rustc_codegen_ssa::traits::BaseTypeMethods;
3-
use rustc_middle::ty::{Instance, TypeFoldable};
4-
use rustc_middle::ty::layout::{FnAbiExt, HasTyCtxt};
5-
use rustc_target::abi::call::FnAbi;
3+
use rustc_middle::ty::{self, Instance, TypeFoldable};
4+
use rustc_middle::ty::layout::{FnAbiOf, HasTyCtxt};
65

76
use crate::abi::FnAbiGccExt;
87
use crate::context::CodegenCx;
@@ -26,7 +25,7 @@ pub fn get_fn<'gcc, 'tcx>(cx: &CodegenCx<'gcc, 'tcx>, instance: Instance<'tcx>)
2625

2726
let sym = tcx.symbol_name(instance).name;
2827

29-
let fn_abi = FnAbi::of_instance(cx, instance, &[]);
28+
let fn_abi = cx.fn_abi_of_instance(instance, ty::List::empty());
3029

3130
let func =
3231
if let Some(func) = cx.get_declared_value(&sym) {

src/context.rs

+39-2
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ use rustc_data_structures::fx::{FxHashMap, FxHashSet};
2121
use rustc_middle::span_bug;
2222
use rustc_middle::mir::mono::CodegenUnit;
2323
use rustc_middle::ty::{self, Instance, ParamEnv, PolyExistentialTraitRef, Ty, TyCtxt};
24-
use rustc_middle::ty::layout::{HasParamEnv, HasTyCtxt, LayoutError, TyAndLayout, LayoutOfHelpers};
24+
use rustc_middle::ty::layout::{FnAbiError, FnAbiOfHelpers, FnAbiRequest, HasParamEnv, HasTyCtxt, LayoutError, TyAndLayout, LayoutOfHelpers};
2525
use rustc_session::Session;
2626
use rustc_span::{Span, Symbol};
27-
use rustc_target::abi::{HasDataLayout, PointeeInfo, Size, TargetDataLayout, VariantIdx};
27+
use rustc_target::abi::{call::FnAbi, HasDataLayout, PointeeInfo, Size, TargetDataLayout, VariantIdx};
2828
use rustc_target::spec::{HasTargetSpec, Target, TlsModel};
2929

3030
use crate::callee::get_fn;
@@ -401,6 +401,43 @@ impl<'gcc, 'tcx> LayoutOfHelpers<'tcx> for CodegenCx<'gcc, 'tcx> {
401401
}
402402
}
403403

404+
impl<'gcc, 'tcx> FnAbiOfHelpers<'tcx> for CodegenCx<'gcc, 'tcx> {
405+
type FnAbiOfResult = &'tcx FnAbi<'tcx, Ty<'tcx>>;
406+
407+
#[inline]
408+
fn handle_fn_abi_err(
409+
&self,
410+
err: FnAbiError<'tcx>,
411+
span: Span,
412+
fn_abi_request: FnAbiRequest<'tcx>,
413+
) -> ! {
414+
if let FnAbiError::Layout(LayoutError::SizeOverflow(_)) = err {
415+
self.sess().span_fatal(span, &err.to_string())
416+
} else {
417+
match fn_abi_request {
418+
FnAbiRequest::OfFnPtr { sig, extra_args } => {
419+
span_bug!(
420+
span,
421+
"`fn_abi_of_fn_ptr({}, {:?})` failed: {}",
422+
sig,
423+
extra_args,
424+
err
425+
);
426+
}
427+
FnAbiRequest::OfInstance { instance, extra_args } => {
428+
span_bug!(
429+
span,
430+
"`fn_abi_of_instance({}, {:?})` failed: {}",
431+
instance,
432+
extra_args,
433+
err
434+
);
435+
}
436+
}
437+
}
438+
}
439+
}
440+
404441
impl<'tcx, 'gcc> HasParamEnv<'tcx> for CodegenCx<'gcc, 'tcx> {
405442
fn param_env(&self) -> ParamEnv<'tcx> {
406443
ParamEnv::reveal_all()

src/mono_item.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@ use rustc_codegen_ssa::traits::PreDefineMethods;
22
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
33
use rustc_middle::mir::mono::{Linkage, Visibility};
44
use rustc_middle::ty::{self, Instance, TypeFoldable};
5-
use rustc_middle::ty::layout::{FnAbiExt, LayoutOf};
5+
use rustc_middle::ty::layout::{FnAbiOf, LayoutOf};
66
use rustc_span::def_id::DefId;
7-
use rustc_target::abi::call::FnAbi;
87

98
use crate::base;
109
use crate::context::CodegenCx;
@@ -27,7 +26,7 @@ impl<'gcc, 'tcx> PreDefineMethods<'tcx> for CodegenCx<'gcc, 'tcx> {
2726
fn predefine_fn(&self, instance: Instance<'tcx>, linkage: Linkage, _visibility: Visibility, symbol_name: &str) {
2827
assert!(!instance.substs.needs_infer());
2928

30-
let fn_abi = FnAbi::of_instance(self, instance, &[]);
29+
let fn_abi = self.fn_abi_of_instance(instance, ty::List::empty());
3130
self.linkage.set(base::linkage_to_gcc(linkage));
3231
let _decl = self.declare_fn(symbol_name, &fn_abi);
3332
//let attrs = self.tcx.codegen_fn_attrs(instance.def_id());

src/type_of.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use gccjit::{Struct, Type};
44
use crate::rustc_codegen_ssa::traits::{BaseTypeMethods, DerivedTypeMethods, LayoutTypeMethods};
55
use rustc_middle::bug;
66
use rustc_middle::ty::{self, Ty, TypeFoldable};
7-
use rustc_middle::ty::layout::{FnAbiExt, LayoutOf, TyAndLayout};
7+
use rustc_middle::ty::layout::{FnAbiOf, LayoutOf, TyAndLayout};
88
use rustc_middle::ty::print::with_no_trimmed_paths;
99
use rustc_target::abi::{self, Abi, F32, F64, FieldsShape, Int, Integer, Pointer, PointeeInfo, Size, TyAbiInterface, Variants};
1010
use rustc_target::abi::call::{CastTarget, FnAbi, Reg};
@@ -160,7 +160,7 @@ impl<'tcx> LayoutGccExt<'tcx> for TyAndLayout<'tcx> {
160160
ty::Adt(def, _) if def.is_box() => {
161161
cx.type_ptr_to(cx.layout_of(self.ty.boxed_ty()).gcc_type(cx, true))
162162
}
163-
ty::FnPtr(sig) => cx.fn_ptr_backend_type(&FnAbi::of_fn_ptr(cx, sig, &[])),
163+
ty::FnPtr(sig) => cx.fn_ptr_backend_type(&cx.fn_abi_of_fn_ptr(sig, ty::List::empty())),
164164
_ => self.scalar_gcc_type_at(cx, scalar, Size::ZERO),
165165
};
166166
cx.scalar_types.borrow_mut().insert(self.ty, ty);

0 commit comments

Comments
 (0)