Skip to content

Commit 033b829

Browse files
authored
Merge pull request #2451 from jieyouxu/rustc-pull
2 parents 10f2bcc + b65ceb2 commit 033b829

File tree

217 files changed

+3224
-1602
lines changed

Some content is hidden

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

217 files changed

+3224
-1602
lines changed

.mailmap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -653,7 +653,7 @@ Torsten Weber <TorstenWeber12@gmail.com> <torstenweber12@gmail.com>
653653
Trevor Gross <tmgross@umich.edu> <t.gross35@gmail.com>
654654
Trevor Gross <tmgross@umich.edu> <tgross@intrepidcs.com>
655655
Trevor Spiteri <tspiteri@ieee.org> <trevor.spiteri@um.edu.mt>
656-
Tshepang Mbambo <tshepang@gmail.com>
656+
Tshepang Mbambo <hopsi@tuta.io> <tshepang@gmail.com>
657657
Ty Overby <ty@pre-alpha.com>
658658
Tyler Mandry <tmandry@gmail.com> <tmandry@google.com>
659659
Tyler Ruckinger <t.ruckinger@gmail.com>

Cargo.lock

Lines changed: 5 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -177,56 +177,26 @@ version = "0.7.6"
177177
source = "registry+https://github.com/rust-lang/crates.io-index"
178178
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
179179

180-
[[package]]
181-
name = "askama"
182-
version = "0.13.1"
183-
source = "registry+https://github.com/rust-lang/crates.io-index"
184-
checksum = "5d4744ed2eef2645831b441d8f5459689ade2ab27c854488fbab1fbe94fce1a7"
185-
dependencies = [
186-
"askama_derive 0.13.1",
187-
"itoa",
188-
"percent-encoding",
189-
"serde",
190-
"serde_json",
191-
]
192-
193180
[[package]]
194181
name = "askama"
195182
version = "0.14.0"
196183
source = "registry+https://github.com/rust-lang/crates.io-index"
197184
checksum = "f75363874b771be265f4ffe307ca705ef6f3baa19011c149da8674a87f1b75c4"
198185
dependencies = [
199-
"askama_derive 0.14.0",
186+
"askama_derive",
200187
"itoa",
201188
"percent-encoding",
202189
"serde",
203190
"serde_json",
204191
]
205192

206-
[[package]]
207-
name = "askama_derive"
208-
version = "0.13.1"
209-
source = "registry+https://github.com/rust-lang/crates.io-index"
210-
checksum = "d661e0f57be36a5c14c48f78d09011e67e0cb618f269cca9f2fd8d15b68c46ac"
211-
dependencies = [
212-
"askama_parser 0.13.0",
213-
"basic-toml",
214-
"memchr",
215-
"proc-macro2",
216-
"quote",
217-
"rustc-hash 2.1.1",
218-
"serde",
219-
"serde_derive",
220-
"syn 2.0.101",
221-
]
222-
223193
[[package]]
224194
name = "askama_derive"
225195
version = "0.14.0"
226196
source = "registry+https://github.com/rust-lang/crates.io-index"
227197
checksum = "129397200fe83088e8a68407a8e2b1f826cf0086b21ccdb866a722c8bcd3a94f"
228198
dependencies = [
229-
"askama_parser 0.14.0",
199+
"askama_parser",
230200
"basic-toml",
231201
"memchr",
232202
"proc-macro2",
@@ -237,18 +207,6 @@ dependencies = [
237207
"syn 2.0.101",
238208
]
239209

240-
[[package]]
241-
name = "askama_parser"
242-
version = "0.13.0"
243-
source = "registry+https://github.com/rust-lang/crates.io-index"
244-
checksum = "cf315ce6524c857bb129ff794935cf6d42c82a6cff60526fe2a63593de4d0d4f"
245-
dependencies = [
246-
"memchr",
247-
"serde",
248-
"serde_derive",
249-
"winnow 0.7.10",
250-
]
251-
252210
[[package]]
253211
name = "askama_parser"
254212
version = "0.14.0"
@@ -582,7 +540,7 @@ name = "clippy"
582540
version = "0.1.89"
583541
dependencies = [
584542
"anstream",
585-
"askama 0.13.1",
543+
"askama",
586544
"cargo_metadata 0.18.1",
587545
"clippy_config",
588546
"clippy_lints",
@@ -1432,7 +1390,7 @@ name = "generate-copyright"
14321390
version = "0.1.0"
14331391
dependencies = [
14341392
"anyhow",
1435-
"askama 0.14.0",
1393+
"askama",
14361394
"cargo_metadata 0.18.1",
14371395
"serde",
14381396
"serde_json",
@@ -4676,7 +4634,7 @@ name = "rustdoc"
46764634
version = "0.0.0"
46774635
dependencies = [
46784636
"arrayvec",
4679-
"askama 0.14.0",
4637+
"askama",
46804638
"base64",
46814639
"expect-test",
46824640
"indexmap",

compiler/rustc_ast_lowering/src/item.rs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ use rustc_ast::ptr::P;
33
use rustc_ast::visit::AssocCtxt;
44
use rustc_ast::*;
55
use rustc_errors::ErrorGuaranteed;
6-
use rustc_hir::def::{DefKind, Res};
6+
use rustc_hir::def::{DefKind, PerNS, Res};
77
use rustc_hir::def_id::{CRATE_DEF_ID, LocalDefId};
88
use rustc_hir::{self as hir, HirId, LifetimeSource, PredicateOrigin};
99
use rustc_index::{IndexSlice, IndexVec};
10+
use rustc_middle::span_bug;
1011
use rustc_middle::ty::{ResolverAstLowering, TyCtxt};
1112
use rustc_span::edit_distance::find_best_match_for_name;
1213
use rustc_span::{DUMMY_SP, DesugaringKind, Ident, Span, Symbol, kw, sym};
@@ -527,7 +528,22 @@ impl<'hir> LoweringContext<'_, 'hir> {
527528
}
528529
UseTreeKind::Glob => {
529530
let res = self.expect_full_res(id);
530-
let res = smallvec![self.lower_res(res)];
531+
let res = self.lower_res(res);
532+
// Put the result in the appropriate namespace.
533+
let res = match res {
534+
Res::Def(DefKind::Mod | DefKind::Trait, _) => {
535+
PerNS { type_ns: Some(res), value_ns: None, macro_ns: None }
536+
}
537+
Res::Def(DefKind::Enum, _) => {
538+
PerNS { type_ns: None, value_ns: Some(res), macro_ns: None }
539+
}
540+
Res::Err => {
541+
// Propagate the error to all namespaces, just to be sure.
542+
let err = Some(Res::Err);
543+
PerNS { type_ns: err, value_ns: err, macro_ns: err }
544+
}
545+
_ => span_bug!(path.span, "bad glob res {:?}", res),
546+
};
531547
let path = Path { segments, span: path.span, tokens: None };
532548
let path = self.lower_use_path(res, &path, ParamMode::Explicit);
533549
hir::ItemKind::Use(path, hir::UseKind::Glob)
@@ -601,7 +617,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
601617
} else {
602618
// For non-empty lists we can just drop all the data, the prefix is already
603619
// present in HIR as a part of nested imports.
604-
self.arena.alloc(hir::UsePath { res: smallvec![], segments: &[], span })
620+
self.arena.alloc(hir::UsePath { res: PerNS::default(), segments: &[], span })
605621
};
606622
hir::ItemKind::Use(path, hir::UseKind::ListStem)
607623
}

compiler/rustc_ast_lowering/src/lib.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ use rustc_middle::ty::{ResolverAstLowering, TyCtxt};
6464
use rustc_session::parse::{add_feature_diagnostics, feature_err};
6565
use rustc_span::symbol::{Ident, Symbol, kw, sym};
6666
use rustc_span::{DUMMY_SP, DesugaringKind, Span};
67-
use smallvec::{SmallVec, smallvec};
67+
use smallvec::SmallVec;
6868
use thin_vec::ThinVec;
6969
use tracing::{debug, instrument, trace};
7070

@@ -705,14 +705,16 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
705705
self.resolver.get_partial_res(id).map_or(Res::Err, |pr| pr.expect_full_res())
706706
}
707707

708-
fn lower_import_res(&mut self, id: NodeId, span: Span) -> SmallVec<[Res; 3]> {
709-
let res = self.resolver.get_import_res(id).present_items();
710-
let res: SmallVec<_> = res.map(|res| self.lower_res(res)).collect();
711-
if res.is_empty() {
708+
fn lower_import_res(&mut self, id: NodeId, span: Span) -> PerNS<Option<Res>> {
709+
let per_ns = self.resolver.get_import_res(id);
710+
let per_ns = per_ns.map(|res| res.map(|res| self.lower_res(res)));
711+
if per_ns.is_empty() {
712+
// Propagate the error to all namespaces, just to be sure.
712713
self.dcx().span_delayed_bug(span, "no resolution for an import");
713-
return smallvec![Res::Err];
714+
let err = Some(Res::Err);
715+
return PerNS { type_ns: err, value_ns: err, macro_ns: err };
714716
}
715-
res
717+
per_ns
716718
}
717719

718720
fn make_lang_item_qpath(

compiler/rustc_ast_lowering/src/path.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
use std::sync::Arc;
22

33
use rustc_ast::{self as ast, *};
4-
use rustc_hir::def::{DefKind, PartialRes, Res};
4+
use rustc_hir::def::{DefKind, PartialRes, PerNS, Res};
55
use rustc_hir::def_id::DefId;
66
use rustc_hir::{self as hir, GenericArg};
77
use rustc_middle::{span_bug, ty};
88
use rustc_session::parse::add_feature_diagnostics;
99
use rustc_span::{BytePos, DUMMY_SP, DesugaringKind, Ident, Span, Symbol, sym};
10-
use smallvec::{SmallVec, smallvec};
10+
use smallvec::smallvec;
1111
use tracing::{debug, instrument};
1212

1313
use super::errors::{
@@ -226,11 +226,11 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
226226

227227
pub(crate) fn lower_use_path(
228228
&mut self,
229-
res: SmallVec<[Res; 3]>,
229+
res: PerNS<Option<Res>>,
230230
p: &Path,
231231
param_mode: ParamMode,
232232
) -> &'hir hir::UsePath<'hir> {
233-
assert!((1..=3).contains(&res.len()));
233+
assert!(!res.is_empty());
234234
self.arena.alloc(hir::UsePath {
235235
res,
236236
segments: self.arena.alloc_from_iter(p.segments.iter().map(|segment| {

compiler/rustc_borrowck/src/diagnostics/mutability_errors.rs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -840,14 +840,22 @@ impl<'infcx, 'tcx> MirBorrowckCtxt<'_, 'infcx, 'tcx> {
840840
} else {
841841
bug!("not an upvar")
842842
};
843-
err.span_label(
844-
*span,
845-
format!(
846-
"calling `{}` requires mutable binding due to {}",
847-
self.describe_place(the_place_err).unwrap(),
848-
reason
849-
),
850-
);
843+
// sometimes we deliberately don't store the name of a place when coming from a macro in
844+
// another crate. We generally want to limit those diagnostics a little, to hide
845+
// implementation details (such as those from pin!() or format!()). In that case show a
846+
// slightly different error message, or none at all if something else happened. In other
847+
// cases the message is likely not useful.
848+
if let Some(place_name) = self.describe_place(the_place_err) {
849+
err.span_label(
850+
*span,
851+
format!("calling `{place_name}` requires mutable binding due to {reason}"),
852+
);
853+
} else if span.from_expansion() {
854+
err.span_label(
855+
*span,
856+
format!("a call in this macro requires a mutable binding due to {reason}",),
857+
);
858+
}
851859
}
852860
}
853861

compiler/rustc_codegen_gcc/src/intrinsic/mod.rs

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use rustc_codegen_ssa::traits::{
2323
use rustc_middle::bug;
2424
#[cfg(feature = "master")]
2525
use rustc_middle::ty::layout::FnAbiOf;
26-
use rustc_middle::ty::layout::{HasTypingEnv, LayoutOf};
26+
use rustc_middle::ty::layout::LayoutOf;
2727
use rustc_middle::ty::{self, Instance, Ty};
2828
use rustc_span::{Span, Symbol, sym};
2929
use rustc_target::callconv::{ArgAbi, PassMode};
@@ -205,21 +205,10 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
205205
span: Span,
206206
) -> Result<(), Instance<'tcx>> {
207207
let tcx = self.tcx;
208-
let callee_ty = instance.ty(tcx, self.typing_env());
209208

210-
let (def_id, fn_args) = match *callee_ty.kind() {
211-
ty::FnDef(def_id, fn_args) => (def_id, fn_args),
212-
_ => bug!("expected fn item type, found {}", callee_ty),
213-
};
214-
215-
let sig = callee_ty.fn_sig(tcx);
216-
let sig = tcx.normalize_erasing_late_bound_regions(self.typing_env(), sig);
217-
let arg_tys = sig.inputs();
218-
let ret_ty = sig.output();
219-
let name = tcx.item_name(def_id);
209+
let name = tcx.item_name(instance.def_id());
220210
let name_str = name.as_str();
221-
222-
let llret_ty = self.layout_of(ret_ty).gcc_type(self);
211+
let fn_args = instance.args;
223212

224213
let simple = get_simple_intrinsic(self, name);
225214
let simple_func = get_simple_function(self, name);
@@ -320,8 +309,7 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
320309
| sym::rotate_right
321310
| sym::saturating_add
322311
| sym::saturating_sub => {
323-
let ty = arg_tys[0];
324-
match int_type_width_signed(ty, self) {
312+
match int_type_width_signed(args[0].layout.ty, self) {
325313
Some((width, signed)) => match name {
326314
sym::ctlz | sym::cttz => {
327315
let func = self.current_func.borrow().expect("func");
@@ -400,7 +388,7 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
400388
tcx.dcx().emit_err(InvalidMonomorphization::BasicIntegerType {
401389
span,
402390
name,
403-
ty,
391+
ty: args[0].layout.ty,
404392
});
405393
return Ok(());
406394
}
@@ -492,7 +480,14 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
492480
}
493481

494482
_ if name_str.starts_with("simd_") => {
495-
match generic_simd_intrinsic(self, name, callee_ty, args, ret_ty, llret_ty, span) {
483+
match generic_simd_intrinsic(
484+
self,
485+
name,
486+
args,
487+
result.layout.ty,
488+
result.layout.gcc_type(self),
489+
span,
490+
) {
496491
Ok(value) => value,
497492
Err(()) => return Ok(()),
498493
}
@@ -503,13 +498,10 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
503498
};
504499

505500
if result.layout.ty.is_bool() {
506-
OperandRef::from_immediate_or_packed_pair(self, value, result.layout)
507-
.val
508-
.store(self, result);
501+
let val = self.from_immediate(value);
502+
self.store_to_place(val, result.val);
509503
} else if !result.layout.ty.is_unit() {
510-
let ptr_llty = self.type_ptr_to(result.layout.gcc_type(self));
511-
let ptr = self.pointercast(result.val.llval, ptr_llty);
512-
self.store(value, ptr, result.val.align);
504+
self.store_to_place(value, result.val);
513505
}
514506
Ok(())
515507
}

0 commit comments

Comments
 (0)