Skip to content

Commit 6780432

Browse files
committed
rustup: update to nightly-2021-09-29.
1 parent 35172f7 commit 6780432

23 files changed

+401
-308
lines changed

crates/rustc_codegen_spirv/src/abi.rs

+10-7
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,17 @@ use rustc_data_structures::fx::FxHashMap;
99
use rustc_errors::ErrorReported;
1010
use rustc_index::vec::Idx;
1111
use rustc_middle::bug;
12-
use rustc_middle::ty::layout::{FnAbiExt, TyAndLayout};
12+
use rustc_middle::ty::layout::{FnAbiOf, LayoutOf, TyAndLayout};
1313
use rustc_middle::ty::subst::SubstsRef;
1414
use rustc_middle::ty::{
15-
Const, FloatTy, GeneratorSubsts, IntTy, ParamEnv, PolyFnSig, Ty, TyKind, TypeAndMut, UintTy,
15+
self, Const, FloatTy, GeneratorSubsts, IntTy, ParamEnv, PolyFnSig, Ty, TyKind, TypeAndMut,
16+
UintTy,
1617
};
1718
use rustc_span::def_id::DefId;
1819
use rustc_span::Span;
1920
use rustc_span::DUMMY_SP;
2021
use rustc_target::abi::call::{CastTarget, FnAbi, PassMode, Reg, RegKind};
21-
use rustc_target::abi::{
22-
Abi, Align, FieldsShape, LayoutOf, Primitive, Scalar, Size, VariantIdx, Variants,
23-
};
22+
use rustc_target::abi::{Abi, Align, FieldsShape, Primitive, Scalar, Size, VariantIdx, Variants};
2423
use std::cell::RefCell;
2524
use std::collections::hash_map::Entry;
2625
use std::fmt;
@@ -150,13 +149,17 @@ impl<'tcx> ConvSpirvType<'tcx> for PointeeTy<'tcx> {
150149
fn spirv_type(&self, span: Span, cx: &CodegenCx<'tcx>) -> Word {
151150
match *self {
152151
PointeeTy::Ty(ty) => ty.spirv_type(span, cx),
153-
PointeeTy::Fn(ty) => FnAbi::of_fn_ptr(cx, ty, &[]).spirv_type(span, cx),
152+
PointeeTy::Fn(ty) => cx
153+
.fn_abi_of_fn_ptr(ty, ty::List::empty())
154+
.spirv_type(span, cx),
154155
}
155156
}
156157
fn spirv_type_immediate(&self, span: Span, cx: &CodegenCx<'tcx>) -> Word {
157158
match *self {
158159
PointeeTy::Ty(ty) => ty.spirv_type_immediate(span, cx),
159-
PointeeTy::Fn(ty) => FnAbi::of_fn_ptr(cx, ty, &[]).spirv_type_immediate(span, cx),
160+
PointeeTy::Fn(ty) => cx
161+
.fn_abi_of_fn_ptr(ty, ty::List::empty())
162+
.spirv_type_immediate(span, cx),
160163
}
161164
}
162165
}

crates/rustc_codegen_spirv/src/attr.rs

-21
Original file line numberDiff line numberDiff line change
@@ -476,27 +476,13 @@ impl<'tcx> Visitor<'tcx> for CheckSpirvAttrVisitor<'tcx> {
476476
intravisit::walk_variant(self, variant, generics, item_id);
477477
}
478478

479-
fn visit_macro_def(&mut self, macro_def: &'tcx hir::MacroDef<'tcx>) {
480-
self.check_spirv_attributes(macro_def.hir_id(), Target::MacroDef);
481-
intravisit::walk_macro_def(self, macro_def);
482-
}
483-
484479
fn visit_param(&mut self, param: &'tcx hir::Param<'tcx>) {
485480
self.check_spirv_attributes(param.hir_id, Target::Param);
486481

487482
intravisit::walk_param(self, param);
488483
}
489484
}
490485

491-
fn check_invalid_macro_level_spirv_attr(tcx: TyCtxt<'_>, sym: &Symbols, attrs: &[Attribute]) {
492-
for attr in attrs {
493-
if attr.has_name(sym.spirv) {
494-
tcx.sess
495-
.span_err(attr.span, "#[spirv(..)] cannot be applied to a macro");
496-
}
497-
}
498-
}
499-
500486
// FIXME(eddyb) DRY this somehow and make it reusable from somewhere in `rustc`.
501487
fn check_mod_attrs(tcx: TyCtxt<'_>, module_def_id: LocalDefId) {
502488
let check_spirv_attr_visitor = &mut CheckSpirvAttrVisitor {
@@ -507,13 +493,6 @@ fn check_mod_attrs(tcx: TyCtxt<'_>, module_def_id: LocalDefId) {
507493
module_def_id,
508494
&mut check_spirv_attr_visitor.as_deep_visitor(),
509495
);
510-
tcx.hir()
511-
.visit_exported_macros_in_krate(check_spirv_attr_visitor);
512-
check_invalid_macro_level_spirv_attr(
513-
tcx,
514-
&check_spirv_attr_visitor.sym,
515-
tcx.hir().krate().non_exported_macro_attrs,
516-
);
517496
if module_def_id.is_top_level_module() {
518497
check_spirv_attr_visitor.check_spirv_attributes(CRATE_HIR_ID, Target::Mod);
519498
}

crates/rustc_codegen_spirv/src/builder/builder_methods.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@ use rustc_codegen_ssa::MemFlags;
1616
use rustc_middle::bug;
1717
use rustc_middle::ty::Ty;
1818
use rustc_span::Span;
19-
use rustc_target::abi::{Abi, Align, Scalar, Size};
19+
use rustc_target::abi::{Abi, Align, Scalar, Size, WrappingRange};
2020
use std::convert::TryInto;
2121
use std::iter::{self, empty};
22-
use std::ops::Range;
2322

2423
macro_rules! simple_op {
2524
(
@@ -794,7 +793,7 @@ impl<'a, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'tcx> {
794793

795794
// silly clippy, we can't rename this!
796795
#[allow(clippy::wrong_self_convention)]
797-
fn to_immediate_scalar(&mut self, val: Self::Value, scalar: &Scalar) -> Self::Value {
796+
fn to_immediate_scalar(&mut self, val: Self::Value, scalar: Scalar) -> Self::Value {
798797
if scalar.is_bool() {
799798
let bool = SpirvType::Bool.def(self.span(), self);
800799
return self.trunc(val, bool);
@@ -982,7 +981,7 @@ impl<'a, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'tcx> {
982981
self
983982
}
984983

985-
fn range_metadata(&mut self, _load: Self::Value, _range: Range<u128>) {
984+
fn range_metadata(&mut self, _load: Self::Value, _range: WrappingRange) {
986985
// ignore
987986
}
988987

crates/rustc_codegen_spirv/src/builder/intrinsics.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ use rustc_codegen_ssa::mir::operand::OperandRef;
88
use rustc_codegen_ssa::mir::place::PlaceRef;
99
use rustc_codegen_ssa::traits::{BuilderMethods, IntrinsicCallMethods};
1010
use rustc_middle::bug;
11+
use rustc_middle::ty::layout::LayoutOf;
1112
use rustc_middle::ty::{FnDef, Instance, ParamEnv, Ty, TyKind};
1213
use rustc_span::source_map::Span;
1314
use rustc_span::sym;
1415
use rustc_target::abi::call::{FnAbi, PassMode};
15-
use rustc_target::abi::LayoutOf;
1616

1717
fn int_type_width_signed(ty: Ty<'_>, cx: &CodegenCx<'_>) -> Option<(u64, bool)> {
1818
match ty.kind() {

crates/rustc_codegen_spirv/src/builder/mod.rs

+24-7
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,15 @@ use rustc_errors::DiagnosticBuilder;
2424
use rustc_middle::mir::coverage::{
2525
CodeRegion, CounterValueReference, ExpressionOperandId, InjectedExpressionId, Op,
2626
};
27-
use rustc_middle::ty::layout::{HasParamEnv, HasTyCtxt, TyAndLayout};
27+
use rustc_middle::ty::layout::{
28+
FnAbiError, FnAbiOfHelpers, FnAbiRequest, HasParamEnv, HasTyCtxt, LayoutError, LayoutOfHelpers,
29+
TyAndLayout,
30+
};
2831
use rustc_middle::ty::{Instance, ParamEnv, Ty, TyCtxt};
2932
use rustc_span::def_id::DefId;
3033
use rustc_span::source_map::Span;
3134
use rustc_target::abi::call::{ArgAbi, FnAbi, PassMode};
32-
use rustc_target::abi::{HasDataLayout, LayoutOf, Size, TargetDataLayout};
35+
use rustc_target::abi::{HasDataLayout, Size, TargetDataLayout};
3336
use rustc_target::spec::{HasTargetSpec, Target};
3437
use std::ops::Deref;
3538

@@ -389,11 +392,25 @@ impl<'a, 'tcx> HasDataLayout for Builder<'a, 'tcx> {
389392
}
390393
}
391394

392-
impl<'a, 'tcx> LayoutOf for Builder<'a, 'tcx> {
393-
type Ty = Ty<'tcx>;
394-
type TyAndLayout = TyAndLayout<'tcx>;
395+
impl<'tcx> LayoutOfHelpers<'tcx> for Builder<'_, 'tcx> {
396+
type LayoutOfResult = TyAndLayout<'tcx>;
397+
398+
#[inline]
399+
fn handle_layout_err(&self, err: LayoutError<'tcx>, span: Span, ty: Ty<'tcx>) -> ! {
400+
self.cx.handle_layout_err(err, span, ty)
401+
}
402+
}
403+
404+
impl<'tcx> FnAbiOfHelpers<'tcx> for Builder<'_, 'tcx> {
405+
type FnAbiOfResult = &'tcx FnAbi<'tcx, Ty<'tcx>>;
395406

396-
fn layout_of(&self, ty: Ty<'tcx>) -> Self::TyAndLayout {
397-
self.cx.layout_of(ty)
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+
self.cx.handle_fn_abi_err(err, span, fn_abi_request)
398415
}
399416
}

crates/rustc_codegen_spirv/src/codegen_cx/constant.rs

+7-6
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ use rspirv::spirv::Word;
66
use rustc_codegen_ssa::mir::place::PlaceRef;
77
use rustc_codegen_ssa::traits::{BaseTypeMethods, ConstMethods, MiscMethods, StaticMethods};
88
use rustc_middle::bug;
9-
use rustc_middle::mir::interpret::{alloc_range, Allocation, GlobalAlloc, ScalarMaybeUninit};
10-
use rustc_middle::ty::layout::TyAndLayout;
11-
use rustc_mir::interpret::Scalar;
9+
use rustc_middle::mir::interpret::{
10+
alloc_range, Allocation, GlobalAlloc, Scalar, ScalarMaybeUninit,
11+
};
12+
use rustc_middle::ty::layout::{LayoutOf, TyAndLayout};
1213
use rustc_span::symbol::Symbol;
1314
use rustc_span::{Span, DUMMY_SP};
14-
use rustc_target::abi::{self, AddressSpace, HasDataLayout, Integer, LayoutOf, Primitive, Size};
15+
use rustc_target::abi::{self, AddressSpace, HasDataLayout, Integer, Primitive, Size};
1516

1617
impl<'tcx> CodegenCx<'tcx> {
1718
pub fn constant_u8(&self, span: Span, val: u8) -> SpirvValue {
@@ -207,7 +208,7 @@ impl<'tcx> ConstMethods<'tcx> for CodegenCx<'tcx> {
207208
fn scalar_to_backend(
208209
&self,
209210
scalar: Scalar,
210-
layout: &abi::Scalar,
211+
layout: abi::Scalar,
211212
ty: Self::Type,
212213
) -> Self::Value {
213214
match scalar {
@@ -426,7 +427,7 @@ impl<'tcx> CodegenCx<'tcx> {
426427
// tldr, the pointer here is only needed for the offset
427428
let value = match alloc.read_scalar(self, alloc_range(*offset, size)).unwrap() {
428429
ScalarMaybeUninit::Scalar(scalar) => {
429-
self.scalar_to_backend(scalar, &self.primitive_to_scalar(primitive), ty)
430+
self.scalar_to_backend(scalar, self.primitive_to_scalar(primitive), ty)
430431
}
431432
ScalarMaybeUninit::Uninit => self.undef(ty),
432433
};

crates/rustc_codegen_spirv/src/codegen_cx/declare.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,11 @@ use rustc_codegen_ssa::traits::{BaseTypeMethods, PreDefineMethods, StaticMethods
99
use rustc_middle::bug;
1010
use rustc_middle::middle::codegen_fn_attrs::{CodegenFnAttrFlags, CodegenFnAttrs};
1111
use rustc_middle::mir::mono::{Linkage, MonoItem, Visibility};
12-
use rustc_middle::ty::layout::FnAbiExt;
12+
use rustc_middle::ty::layout::{FnAbiOf, LayoutOf};
1313
use rustc_middle::ty::{self, Instance, ParamEnv, TypeFoldable};
1414
use rustc_span::def_id::DefId;
1515
use rustc_span::Span;
16-
use rustc_target::abi::call::FnAbi;
17-
use rustc_target::abi::{Align, LayoutOf};
16+
use rustc_target::abi::Align;
1817

1918
fn attrs_to_spirv(attrs: &CodegenFnAttrs) -> FunctionControl {
2019
let mut control = FunctionControl::NONE;
@@ -58,7 +57,7 @@ impl<'tcx> CodegenCx<'tcx> {
5857
// PreDefineMethods::predefine_fn -> declare_fn_ext
5958
fn declare_fn_ext(&self, instance: Instance<'tcx>, linkage: Option<LinkageType>) -> SpirvValue {
6059
let control = attrs_to_spirv(self.tcx.codegen_fn_attrs(instance.def_id()));
61-
let fn_abi = FnAbi::of_instance(self, instance, &[]);
60+
let fn_abi = self.fn_abi_of_instance(instance, ty::List::empty());
6261
let span = self.tcx.def_span(instance.def_id());
6362
let function_type = fn_abi.spirv_type(span, self);
6463
let (return_type, argument_types) = match self.lookup_type(function_type) {
@@ -116,7 +115,7 @@ impl<'tcx> CodegenCx<'tcx> {
116115
.as_ref()
117116
.map(ToString::to_string)
118117
.unwrap_or_else(|| instance.to_string());
119-
self.entry_stub(&instance, &fn_abi, declared, entry_name, entry);
118+
self.entry_stub(&instance, fn_abi, declared, entry_name, entry);
120119
}
121120
if attrs.unroll_loops.is_some() {
122121
self.unroll_loops_decorations.borrow_mut().insert(fn_id);

crates/rustc_codegen_spirv/src/codegen_cx/entry.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ use rspirv::spirv::{
1111
use rustc_codegen_ssa::traits::{BaseTypeMethods, BuilderMethods};
1212
use rustc_data_structures::fx::FxHashMap;
1313
use rustc_hir as hir;
14-
use rustc_middle::ty::layout::TyAndLayout;
14+
use rustc_middle::ty::layout::{LayoutOf, TyAndLayout};
1515
use rustc_middle::ty::{Instance, Ty, TyKind};
1616
use rustc_span::Span;
1717
use rustc_target::abi::{
1818
call::{ArgAbi, ArgAttribute, ArgAttributes, FnAbi, PassMode},
19-
LayoutOf, Size,
19+
Size,
2020
};
2121

2222
impl<'tcx> CodegenCx<'tcx> {

crates/rustc_codegen_spirv/src/codegen_cx/type_.rs

+52-18
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,65 @@ use crate::spirv_type::SpirvType;
44
use rspirv::spirv::Word;
55
use rustc_codegen_ssa::common::TypeKind;
66
use rustc_codegen_ssa::traits::{BaseTypeMethods, LayoutTypeMethods};
7-
use rustc_middle::bug;
8-
use rustc_middle::ty::layout::{LayoutError, TyAndLayout};
9-
use rustc_middle::ty::{ParamEnv, Ty};
7+
use rustc_middle::ty::layout::{
8+
FnAbiError, FnAbiOfHelpers, FnAbiRequest, LayoutError, LayoutOfHelpers, TyAndLayout,
9+
};
10+
use rustc_middle::ty::Ty;
11+
use rustc_middle::{bug, span_bug};
1012
use rustc_span::source_map::{Span, DUMMY_SP};
1113
use rustc_target::abi::call::{CastTarget, FnAbi, Reg};
12-
use rustc_target::abi::{Abi, AddressSpace, FieldsShape, LayoutOf};
14+
use rustc_target::abi::{Abi, AddressSpace, FieldsShape};
1315

14-
impl<'tcx> LayoutOf for CodegenCx<'tcx> {
15-
type Ty = Ty<'tcx>;
16-
type TyAndLayout = TyAndLayout<'tcx>;
16+
impl<'tcx> LayoutOfHelpers<'tcx> for CodegenCx<'tcx> {
17+
type LayoutOfResult = TyAndLayout<'tcx>;
1718

18-
fn layout_of(&self, ty: Ty<'tcx>) -> Self::TyAndLayout {
19-
self.spanned_layout_of(ty, DUMMY_SP)
19+
#[inline]
20+
fn handle_layout_err(&self, err: LayoutError<'tcx>, span: Span, ty: Ty<'tcx>) -> ! {
21+
if let LayoutError::SizeOverflow(_) = err {
22+
self.tcx.sess.span_fatal(span, &err.to_string())
23+
} else {
24+
span_bug!(span, "failed to get layout for `{}`: {}", ty, err)
25+
}
2026
}
27+
}
2128

22-
fn spanned_layout_of(&self, ty: Ty<'tcx>, span: Span) -> Self::TyAndLayout {
23-
self.tcx
24-
.layout_of(ParamEnv::reveal_all().and(ty))
25-
.unwrap_or_else(|e| {
26-
if let LayoutError::SizeOverflow(_) = e {
27-
self.tcx.sess.span_fatal(span, &e.to_string())
28-
} else {
29-
bug!("failed to get layout for `{}`: {}", ty, e)
29+
impl<'tcx> FnAbiOfHelpers<'tcx> for CodegenCx<'tcx> {
30+
type FnAbiOfResult = &'tcx FnAbi<'tcx, Ty<'tcx>>;
31+
32+
#[inline]
33+
fn handle_fn_abi_err(
34+
&self,
35+
err: FnAbiError<'tcx>,
36+
span: Span,
37+
fn_abi_request: FnAbiRequest<'tcx>,
38+
) -> ! {
39+
if let FnAbiError::Layout(LayoutError::SizeOverflow(_)) = err {
40+
self.tcx.sess.span_fatal(span, &err.to_string())
41+
} else {
42+
match fn_abi_request {
43+
FnAbiRequest::OfFnPtr { sig, extra_args } => {
44+
span_bug!(
45+
span,
46+
"`fn_abi_of_fn_ptr({}, {:?})` failed: {}",
47+
sig,
48+
extra_args,
49+
err
50+
);
3051
}
31-
})
52+
FnAbiRequest::OfInstance {
53+
instance,
54+
extra_args,
55+
} => {
56+
span_bug!(
57+
span,
58+
"`fn_abi_of_instance({}, {:?})` failed: {}",
59+
instance,
60+
extra_args,
61+
err
62+
);
63+
}
64+
}
65+
}
3266
}
3367
}
3468

crates/rustc_codegen_spirv/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ extern crate rustc_hir;
118118
extern crate rustc_index;
119119
extern crate rustc_interface;
120120
extern crate rustc_middle;
121-
extern crate rustc_mir;
122121
extern crate rustc_session;
123122
extern crate rustc_span;
124123
extern crate rustc_target;
@@ -171,9 +170,9 @@ use rustc_errors::{ErrorReported, FatalError, Handler};
171170
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
172171
use rustc_middle::middle::cstore::EncodedMetadata;
173172
use rustc_middle::mir::mono::{Linkage, MonoItem, Visibility};
173+
use rustc_middle::mir::pretty::write_mir_pretty;
174174
use rustc_middle::ty::print::with_no_trimmed_paths;
175175
use rustc_middle::ty::{self, query, DefIdTree, Instance, InstanceDef, TyCtxt};
176-
use rustc_mir::util::write_mir_pretty;
177176
use rustc_session::config::{self, OptLevel, OutputFilenames, OutputType};
178177
use rustc_session::Session;
179178
use rustc_span::symbol::{sym, Symbol};
@@ -500,6 +499,7 @@ impl ExtraBackendMethods for SpirvCodegenBackend {
500499
&self,
501500
_: TyCtxt<'tcx>,
502501
_: &mut Self::Module,
502+
_: &str,
503503
_: AllocatorKind,
504504
_: bool,
505505
) {

crates/spirv-std/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
),
1212
register_attr(spirv)
1313
)]
14-
#![feature(const_generics)]
14+
#![feature(adt_const_params)]
1515
// BEGIN - Embark standard lints v0.4
1616
// do not change or add/remove here, but one can add exceptions after this section
1717
// for more info see: <https://github.com/EmbarkStudios/rust-ecosystem/issues/59>
@@ -88,7 +88,7 @@
8888
// We deblierately provide an unimplemented version of our API on CPU
8989
// platforms so that code completion still works.
9090
clippy::unimplemented,
91-
// The part of `const-generics` we're using (C-like enums) is not incomplete.
91+
// The part of `adt_const_params` we're using (C-like enums) is not incomplete.
9292
incomplete_features,
9393
)]
9494

rust-toolchain

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55
# to the user in the error, instead of "error: invalid channel name '[toolchain]'".
66

77
[toolchain]
8-
channel = "nightly-2021-08-27"
8+
channel = "nightly-2021-09-29"
99
components = ["rust-src", "rustc-dev", "llvm-tools-preview"]

0 commit comments

Comments
 (0)