Skip to content

Commit 8d7c8ac

Browse files
committed
Auto merge of #3615 - RalfJung:rustup, r=RalfJung
Rustup
2 parents 421538c + 3460853 commit 8d7c8ac

File tree

341 files changed

+5382
-2301
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

341 files changed

+5382
-2301
lines changed

Cargo.lock

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4343,6 +4343,7 @@ dependencies = [
43434343
"rustc_hir_pretty",
43444344
"rustc_index",
43454345
"rustc_macros",
4346+
"rustc_next_trait_solver",
43464347
"rustc_query_system",
43474348
"rustc_serialize",
43484349
"rustc_session",
@@ -4451,7 +4452,13 @@ dependencies = [
44514452
name = "rustc_next_trait_solver"
44524453
version = "0.0.0"
44534454
dependencies = [
4455+
"derivative",
4456+
"rustc_ast_ir",
4457+
"rustc_data_structures",
4458+
"rustc_macros",
4459+
"rustc_serialize",
44544460
"rustc_type_ir",
4461+
"rustc_type_ir_macros",
44554462
]
44564463

44574464
[[package]]
@@ -4752,6 +4759,7 @@ name = "rustc_trait_selection"
47524759
version = "0.0.0"
47534760
dependencies = [
47544761
"bitflags 2.5.0",
4762+
"derivative",
47554763
"itertools 0.12.1",
47564764
"rustc_ast",
47574765
"rustc_ast_ir",
@@ -4767,10 +4775,13 @@ dependencies = [
47674775
"rustc_next_trait_solver",
47684776
"rustc_parse_format",
47694777
"rustc_query_system",
4778+
"rustc_serialize",
47704779
"rustc_session",
47714780
"rustc_span",
47724781
"rustc_target",
47734782
"rustc_transmute",
4783+
"rustc_type_ir",
4784+
"rustc_type_ir_macros",
47744785
"smallvec",
47754786
"tracing",
47764787
]

compiler/rustc_abi/src/layout.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use std::borrow::{Borrow, Cow};
22
use std::cmp;
33
use std::fmt::{self, Write};
44
use std::iter;
5-
use std::num::NonZero;
65
use std::ops::Bound;
76
use std::ops::Deref;
87

@@ -11,8 +10,8 @@ use tracing::debug;
1110

1211
use crate::{
1312
Abi, AbiAndPrefAlign, Align, FieldsShape, IndexSlice, IndexVec, Integer, LayoutS, Niche,
14-
Primitive, ReprOptions, Scalar, Size, StructKind, TagEncoding, TargetDataLayout, Variants,
15-
WrappingRange,
13+
NonZeroUsize, Primitive, ReprOptions, Scalar, Size, StructKind, TagEncoding, TargetDataLayout,
14+
Variants, WrappingRange,
1615
};
1716

1817
// A variant is absent if it's uninhabited and only has ZST fields.
@@ -328,7 +327,7 @@ pub trait LayoutCalculator {
328327

329328
Some(LayoutS {
330329
variants: Variants::Single { index: VariantIdx::new(0) },
331-
fields: FieldsShape::Union(NonZero::new(only_variant.len())?),
330+
fields: FieldsShape::Union(NonZeroUsize::new(only_variant.len())?),
332331
abi,
333332
largest_niche: None,
334333
align,

compiler/rustc_abi/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#![cfg_attr(feature = "nightly", feature(rustdoc_internals))]
55

66
use std::fmt;
7-
use std::num::{NonZero, ParseIntError};
7+
use std::num::{NonZeroUsize, ParseIntError};
88
use std::ops::{Add, AddAssign, Mul, RangeInclusive, Sub};
99
use std::str::FromStr;
1010

@@ -1175,7 +1175,7 @@ pub enum FieldsShape<FieldIdx: Idx> {
11751175
Primitive,
11761176

11771177
/// All fields start at no offset. The `usize` is the field count.
1178-
Union(NonZero<usize>),
1178+
Union(NonZeroUsize),
11791179

11801180
/// Array/vector-like placement, with all fields of identical types.
11811181
Array { stride: Size, count: u64 },

compiler/rustc_ast/src/ast.rs

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2105,7 +2105,7 @@ impl Ty {
21052105

21062106
#[derive(Clone, Encodable, Decodable, Debug)]
21072107
pub struct BareFnTy {
2108-
pub unsafety: Unsafe,
2108+
pub safety: Safety,
21092109
pub ext: Extern,
21102110
pub generic_params: ThinVec<GenericParam>,
21112111
pub decl: P<FnDecl>,
@@ -2484,11 +2484,15 @@ pub enum IsAuto {
24842484
No,
24852485
}
24862486

2487+
/// Safety of items.
24872488
#[derive(Copy, Clone, PartialEq, Eq, Hash, Encodable, Decodable, Debug)]
24882489
#[derive(HashStable_Generic)]
2489-
pub enum Unsafe {
2490-
Yes(Span),
2491-
No,
2490+
pub enum Safety {
2491+
/// `unsafe` an item is explicitly marked as `unsafe`.
2492+
Unsafe(Span),
2493+
/// Default means no value was provided, it will take a default value given the context in
2494+
/// which is used.
2495+
Default,
24922496
}
24932497

24942498
/// Describes what kind of coroutine markers, if any, a function has.
@@ -2692,7 +2696,7 @@ pub struct ModSpans {
26922696
pub struct ForeignMod {
26932697
/// `unsafe` keyword accepted syntactically for macro DSLs, but not
26942698
/// semantically by Rust.
2695-
pub unsafety: Unsafe,
2699+
pub safety: Safety,
26962700
pub abi: Option<StrLit>,
26972701
pub items: ThinVec<P<ForeignItem>>,
26982702
}
@@ -3011,8 +3015,8 @@ impl Extern {
30113015
/// included in this struct (e.g., `async unsafe fn` or `const extern "C" fn`).
30123016
#[derive(Clone, Copy, Encodable, Decodable, Debug)]
30133017
pub struct FnHeader {
3014-
/// The `unsafe` keyword, if any
3015-
pub unsafety: Unsafe,
3018+
/// Whether this is `unsafe`, or has a default safety
3019+
pub safety: Safety,
30163020
/// Whether this is `async`, `gen`, or nothing.
30173021
pub coroutine_kind: Option<CoroutineKind>,
30183022
/// The `const` keyword, if any
@@ -3024,8 +3028,8 @@ pub struct FnHeader {
30243028
impl FnHeader {
30253029
/// Does this function header have any qualifiers or is it empty?
30263030
pub fn has_qualifiers(&self) -> bool {
3027-
let Self { unsafety, coroutine_kind, constness, ext } = self;
3028-
matches!(unsafety, Unsafe::Yes(_))
3031+
let Self { safety, coroutine_kind, constness, ext } = self;
3032+
matches!(safety, Safety::Unsafe(_))
30293033
|| coroutine_kind.is_some()
30303034
|| matches!(constness, Const::Yes(_))
30313035
|| !matches!(ext, Extern::None)
@@ -3035,7 +3039,7 @@ impl FnHeader {
30353039
impl Default for FnHeader {
30363040
fn default() -> FnHeader {
30373041
FnHeader {
3038-
unsafety: Unsafe::No,
3042+
safety: Safety::Default,
30393043
coroutine_kind: None,
30403044
constness: Const::No,
30413045
ext: Extern::None,
@@ -3045,7 +3049,7 @@ impl Default for FnHeader {
30453049

30463050
#[derive(Clone, Encodable, Decodable, Debug)]
30473051
pub struct Trait {
3048-
pub unsafety: Unsafe,
3052+
pub safety: Safety,
30493053
pub is_auto: IsAuto,
30503054
pub generics: Generics,
30513055
pub bounds: GenericBounds,
@@ -3101,7 +3105,7 @@ pub struct TyAlias {
31013105
#[derive(Clone, Encodable, Decodable, Debug)]
31023106
pub struct Impl {
31033107
pub defaultness: Defaultness,
3104-
pub unsafety: Unsafe,
3108+
pub safety: Safety,
31053109
pub generics: Generics,
31063110
pub constness: Const,
31073111
pub polarity: ImplPolarity,
@@ -3209,7 +3213,7 @@ pub enum ItemKind {
32093213
/// E.g., `mod foo;` or `mod foo { .. }`.
32103214
/// `unsafe` keyword on modules is accepted syntactically for macro DSLs, but not
32113215
/// semantically by Rust.
3212-
Mod(Unsafe, ModKind),
3216+
Mod(Safety, ModKind),
32133217
/// An external module (`extern`).
32143218
///
32153219
/// E.g., `extern {}` or `extern "C" {}`.

compiler/rustc_ast/src/mut_visit.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -499,8 +499,8 @@ pub fn noop_visit_ty<T: MutVisitor>(ty: &mut P<Ty>, vis: &mut T) {
499499
vis.visit_mt(mt);
500500
}
501501
TyKind::BareFn(bft) => {
502-
let BareFnTy { unsafety, ext: _, generic_params, decl, decl_span } = bft.deref_mut();
503-
visit_unsafety(unsafety, vis);
502+
let BareFnTy { safety, ext: _, generic_params, decl, decl_span } = bft.deref_mut();
503+
visit_safety(safety, vis);
504504
generic_params.flat_map_in_place(|param| vis.flat_map_generic_param(param));
505505
vis.visit_fn_decl(decl);
506506
vis.visit_span(decl_span);
@@ -543,8 +543,8 @@ pub fn noop_visit_ty<T: MutVisitor>(ty: &mut P<Ty>, vis: &mut T) {
543543
}
544544

545545
fn noop_visit_foreign_mod<T: MutVisitor>(foreign_mod: &mut ForeignMod, vis: &mut T) {
546-
let ForeignMod { unsafety, abi: _, items } = foreign_mod;
547-
visit_unsafety(unsafety, vis);
546+
let ForeignMod { safety, abi: _, items } = foreign_mod;
547+
visit_safety(safety, vis);
548548
items.flat_map_in_place(|item| vis.flat_map_foreign_item(item));
549549
}
550550

@@ -859,10 +859,10 @@ fn visit_defaultness<T: MutVisitor>(defaultness: &mut Defaultness, vis: &mut T)
859859
}
860860

861861
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
862-
fn visit_unsafety<T: MutVisitor>(unsafety: &mut Unsafe, vis: &mut T) {
863-
match unsafety {
864-
Unsafe::Yes(span) => vis.visit_span(span),
865-
Unsafe::No => {}
862+
fn visit_safety<T: MutVisitor>(safety: &mut Safety, vis: &mut T) {
863+
match safety {
864+
Safety::Unsafe(span) => vis.visit_span(span),
865+
Safety::Default => {}
866866
}
867867
}
868868

@@ -1092,8 +1092,8 @@ impl NoopVisitItemKind for ItemKind {
10921092
vis.visit_generics(generics);
10931093
visit_opt(body, |body| vis.visit_block(body));
10941094
}
1095-
ItemKind::Mod(unsafety, mod_kind) => {
1096-
visit_unsafety(unsafety, vis);
1095+
ItemKind::Mod(safety, mod_kind) => {
1096+
visit_safety(safety, vis);
10971097
match mod_kind {
10981098
ModKind::Loaded(items, _inline, ModSpans { inner_span, inject_use_span }) => {
10991099
vis.visit_span(inner_span);
@@ -1130,7 +1130,7 @@ impl NoopVisitItemKind for ItemKind {
11301130
}
11311131
ItemKind::Impl(box Impl {
11321132
defaultness,
1133-
unsafety,
1133+
safety,
11341134
generics,
11351135
constness,
11361136
polarity,
@@ -1139,16 +1139,16 @@ impl NoopVisitItemKind for ItemKind {
11391139
items,
11401140
}) => {
11411141
visit_defaultness(defaultness, vis);
1142-
visit_unsafety(unsafety, vis);
1142+
visit_safety(safety, vis);
11431143
vis.visit_generics(generics);
11441144
visit_constness(constness, vis);
11451145
visit_polarity(polarity, vis);
11461146
visit_opt(of_trait, |trait_ref| vis.visit_trait_ref(trait_ref));
11471147
vis.visit_ty(self_ty);
11481148
items.flat_map_in_place(|item| vis.flat_map_impl_item(item));
11491149
}
1150-
ItemKind::Trait(box Trait { unsafety, is_auto: _, generics, bounds, items }) => {
1151-
visit_unsafety(unsafety, vis);
1150+
ItemKind::Trait(box Trait { safety, is_auto: _, generics, bounds, items }) => {
1151+
visit_safety(safety, vis);
11521152
vis.visit_generics(generics);
11531153
visit_bounds(bounds, vis);
11541154
items.flat_map_in_place(|item| vis.flat_map_trait_item(item));
@@ -1254,10 +1254,10 @@ fn visit_const_item<T: MutVisitor>(
12541254
}
12551255

12561256
fn noop_visit_fn_header<T: MutVisitor>(header: &mut FnHeader, vis: &mut T) {
1257-
let FnHeader { unsafety, coroutine_kind, constness, ext: _ } = header;
1257+
let FnHeader { safety, coroutine_kind, constness, ext: _ } = header;
12581258
visit_constness(constness, vis);
12591259
coroutine_kind.as_mut().map(|coroutine_kind| vis.visit_coroutine_kind(coroutine_kind));
1260-
visit_unsafety(unsafety, vis);
1260+
visit_safety(safety, vis);
12611261
}
12621262

12631263
pub fn noop_visit_crate<T: MutVisitor>(krate: &mut Crate, vis: &mut T) {

compiler/rustc_ast/src/token.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -881,6 +881,8 @@ pub enum NonterminalKind {
881881
},
882882
PatWithOr,
883883
Expr,
884+
/// Matches an expression using the rules from edition 2021 and earlier.
885+
Expr2021,
884886
Ty,
885887
Ident,
886888
Lifetime,
@@ -910,6 +912,7 @@ impl NonterminalKind {
910912
},
911913
sym::pat_param => NonterminalKind::PatParam { inferred: false },
912914
sym::expr => NonterminalKind::Expr,
915+
sym::expr_2021 if edition().at_least_rust_2021() => NonterminalKind::Expr2021,
913916
sym::ty => NonterminalKind::Ty,
914917
sym::ident => NonterminalKind::Ident,
915918
sym::lifetime => NonterminalKind::Lifetime,
@@ -929,6 +932,7 @@ impl NonterminalKind {
929932
NonterminalKind::PatParam { inferred: false } => sym::pat_param,
930933
NonterminalKind::PatParam { inferred: true } | NonterminalKind::PatWithOr => sym::pat,
931934
NonterminalKind::Expr => sym::expr,
935+
NonterminalKind::Expr2021 => sym::expr_2021,
932936
NonterminalKind::Ty => sym::ty,
933937
NonterminalKind::Ident => sym::ident,
934938
NonterminalKind::Lifetime => sym::lifetime,

compiler/rustc_ast/src/visit.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ impl WalkItemKind for ItemKind {
366366
}
367367
ItemKind::Impl(box Impl {
368368
defaultness: _,
369-
unsafety: _,
369+
safety: _,
370370
generics,
371371
constness: _,
372372
polarity: _,
@@ -384,7 +384,7 @@ impl WalkItemKind for ItemKind {
384384
try_visit!(visitor.visit_generics(generics));
385385
try_visit!(visitor.visit_variant_data(struct_definition));
386386
}
387-
ItemKind::Trait(box Trait { unsafety: _, is_auto: _, generics, bounds, items }) => {
387+
ItemKind::Trait(box Trait { safety: _, is_auto: _, generics, bounds, items }) => {
388388
try_visit!(visitor.visit_generics(generics));
389389
walk_list!(visitor, visit_param_bound, bounds, BoundKind::SuperTraits);
390390
walk_list!(visitor, visit_assoc_item, items, AssocCtxt::Trait);

compiler/rustc_ast_lowering/src/delegation.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
188188
Asyncness::No => hir::IsAsync::NotAsync,
189189
};
190190
hir::FnHeader {
191-
unsafety: sig.unsafety,
191+
safety: sig.safety,
192192
constness: self.tcx.constness(sig_id),
193193
asyncness,
194194
abi: sig.abi,
@@ -341,7 +341,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
341341

342342
fn generate_header_error(&self) -> hir::FnHeader {
343343
hir::FnHeader {
344-
unsafety: hir::Unsafety::Normal,
344+
safety: hir::Safety::Safe,
345345
constness: hir::Constness::NotConst,
346346
asyncness: hir::IsAsync::NotAsync,
347347
abi: abi::Abi::Rust,

0 commit comments

Comments
 (0)