Skip to content

Commit 251cda5

Browse files
committed
Auto merge of rust-lang#140520 - matthiaskrgr:rollup-7aoqcnp, r=matthiaskrgr
Rollup of 9 pull requests Successful merges: - rust-lang#134232 (Share the naked asm impl between cg_ssa and cg_clif) - rust-lang#139624 (Don't allow flattened format_args in const.) - rust-lang#140090 (Check bare function idents for non snake-case name) - rust-lang#140203 (Issue an error when using `no_mangle` on language items) - rust-lang#140450 (ast: Remove token visiting from AST visitor) - rust-lang#140498 (Misc tweaks to HIR typeck (mostly w.r.t. checking calls)) - rust-lang#140504 (transmutability: ensure_sufficient_stack when answering query) - rust-lang#140506 (unstable-book: fix capitalization) - rust-lang#140516 (Replace use of rustc_type_ir by rustc_middle) Failed merges: - rust-lang#140374 (Resolve instance for SymFn in global/naked asm) r? `@ghost` `@rustbot` modify labels: rollup
2 parents 7188f45 + 1e440ae commit 251cda5

File tree

66 files changed

+960
-1239
lines changed

Some content is hidden

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

66 files changed

+960
-1239
lines changed

Cargo.lock

-1
Original file line numberDiff line numberDiff line change
@@ -4494,7 +4494,6 @@ dependencies = [
44944494
"rustc_session",
44954495
"rustc_span",
44964496
"rustc_transmute",
4497-
"rustc_type_ir",
44984497
"smallvec",
44994498
"thin-vec",
45004499
"tracing",

compiler/rustc_ast/src/mut_visit.rs

+16-123
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
1010
use std::ops::DerefMut;
1111
use std::panic;
12-
use std::sync::Arc;
1312

1413
use rustc_data_structures::flat_map_in_place::FlatMapInPlace;
1514
use rustc_data_structures::stack::ensure_sufficient_stack;
@@ -20,7 +19,6 @@ use thin_vec::ThinVec;
2019

2120
use crate::ast::*;
2221
use crate::ptr::P;
23-
use crate::token::{self, Token};
2422
use crate::tokenstream::*;
2523
use crate::visit::{AssocCtxt, BoundKind, FnCtxt};
2624

@@ -48,11 +46,6 @@ pub trait WalkItemKind {
4846
}
4947

5048
pub trait MutVisitor: Sized {
51-
/// Mutable token visiting only exists for the `macro_rules` token marker and should not be
52-
/// used otherwise. Token visitor would be entirely separate from the regular visitor if
53-
/// the marker didn't have to visit AST fragments in nonterminal tokens.
54-
const VISIT_TOKENS: bool = false;
55-
5649
// Methods in this trait have one of three forms:
5750
//
5851
// fn visit_t(&mut self, t: &mut T); // common
@@ -360,6 +353,8 @@ pub trait MutVisitor: Sized {
360353
// Do nothing.
361354
}
362355

356+
// Span visiting is no longer used, but we keep it for now,
357+
// in case it's needed for something like #127241.
363358
fn visit_span(&mut self, _sp: &mut Span) {
364359
// Do nothing.
365360
}
@@ -473,12 +468,8 @@ fn visit_attr_args<T: MutVisitor>(vis: &mut T, args: &mut AttrArgs) {
473468

474469
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
475470
fn visit_delim_args<T: MutVisitor>(vis: &mut T, args: &mut DelimArgs) {
476-
let DelimArgs { dspan, delim: _, tokens } = args;
477-
visit_tts(vis, tokens);
478-
visit_delim_span(vis, dspan);
479-
}
480-
481-
pub fn visit_delim_span<T: MutVisitor>(vis: &mut T, DelimSpan { open, close }: &mut DelimSpan) {
471+
let DelimArgs { dspan, delim: _, tokens: _ } = args;
472+
let DelimSpan { open, close } = dspan;
482473
vis.visit_span(open);
483474
vis.visit_span(close);
484475
}
@@ -552,7 +543,7 @@ fn walk_assoc_item_constraint<T: MutVisitor>(
552543
}
553544

554545
pub fn walk_ty<T: MutVisitor>(vis: &mut T, ty: &mut P<Ty>) {
555-
let Ty { id, kind, span, tokens } = ty.deref_mut();
546+
let Ty { id, kind, span, tokens: _ } = ty.deref_mut();
556547
vis.visit_id(id);
557548
match kind {
558549
TyKind::Err(_guar) => {}
@@ -600,12 +591,11 @@ pub fn walk_ty<T: MutVisitor>(vis: &mut T, ty: &mut P<Ty>) {
600591
}
601592
TyKind::MacCall(mac) => vis.visit_mac_call(mac),
602593
}
603-
visit_lazy_tts(vis, tokens);
604594
vis.visit_span(span);
605595
}
606596

607597
pub fn walk_ty_pat<T: MutVisitor>(vis: &mut T, ty: &mut P<TyPat>) {
608-
let TyPat { id, kind, span, tokens } = ty.deref_mut();
598+
let TyPat { id, kind, span, tokens: _ } = ty.deref_mut();
609599
vis.visit_id(id);
610600
match kind {
611601
TyPatKind::Range(start, end, _include_end) => {
@@ -615,7 +605,6 @@ pub fn walk_ty_pat<T: MutVisitor>(vis: &mut T, ty: &mut P<TyPat>) {
615605
TyPatKind::Or(variants) => visit_thin_vec(variants, |p| vis.visit_ty_pat(p)),
616606
TyPatKind::Err(_) => {}
617607
}
618-
visit_lazy_tts(vis, tokens);
619608
vis.visit_span(span);
620609
}
621610

@@ -655,11 +644,10 @@ fn walk_path_segment<T: MutVisitor>(vis: &mut T, segment: &mut PathSegment) {
655644
visit_opt(args, |args| vis.visit_generic_args(args));
656645
}
657646

658-
fn walk_path<T: MutVisitor>(vis: &mut T, Path { segments, span, tokens }: &mut Path) {
647+
fn walk_path<T: MutVisitor>(vis: &mut T, Path { segments, span, tokens: _ }: &mut Path) {
659648
for segment in segments {
660649
vis.visit_path_segment(segment);
661650
}
662-
visit_lazy_tts(vis, tokens);
663651
vis.visit_span(span);
664652
}
665653

@@ -705,7 +693,7 @@ fn walk_parenthesized_parameter_data<T: MutVisitor>(vis: &mut T, args: &mut Pare
705693
}
706694

707695
fn walk_local<T: MutVisitor>(vis: &mut T, local: &mut P<Local>) {
708-
let Local { id, super_, pat, ty, kind, span, colon_sp, attrs, tokens } = local.deref_mut();
696+
let Local { id, super_, pat, ty, kind, span, colon_sp, attrs, tokens: _ } = local.deref_mut();
709697
visit_opt(super_, |sp| vis.visit_span(sp));
710698
vis.visit_id(id);
711699
visit_attrs(vis, attrs);
@@ -721,7 +709,6 @@ fn walk_local<T: MutVisitor>(vis: &mut T, local: &mut P<Local>) {
721709
vis.visit_block(els);
722710
}
723711
}
724-
visit_lazy_tts(vis, tokens);
725712
visit_opt(colon_sp, |sp| vis.visit_span(sp));
726713
vis.visit_span(span);
727714
}
@@ -730,14 +717,10 @@ fn walk_attribute<T: MutVisitor>(vis: &mut T, attr: &mut Attribute) {
730717
let Attribute { kind, id: _, style: _, span } = attr;
731718
match kind {
732719
AttrKind::Normal(normal) => {
733-
let NormalAttr {
734-
item: AttrItem { unsafety: _, path, args, tokens },
735-
tokens: attr_tokens,
736-
} = &mut **normal;
720+
let NormalAttr { item: AttrItem { unsafety: _, path, args, tokens: _ }, tokens: _ } =
721+
&mut **normal;
737722
vis.visit_path(path);
738723
visit_attr_args(vis, args);
739-
visit_lazy_tts(vis, tokens);
740-
visit_lazy_tts(vis, attr_tokens);
741724
}
742725
AttrKind::DocComment(_kind, _sym) => {}
743726
}
@@ -786,90 +769,6 @@ pub fn walk_flat_map_param<T: MutVisitor>(vis: &mut T, mut param: Param) -> Smal
786769
smallvec![param]
787770
}
788771

789-
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
790-
fn visit_attr_tt<T: MutVisitor>(vis: &mut T, tt: &mut AttrTokenTree) {
791-
match tt {
792-
AttrTokenTree::Token(token, _spacing) => {
793-
visit_token(vis, token);
794-
}
795-
AttrTokenTree::Delimited(dspan, _spacing, _delim, tts) => {
796-
visit_attr_tts(vis, tts);
797-
visit_delim_span(vis, dspan);
798-
}
799-
AttrTokenTree::AttrsTarget(AttrsTarget { attrs, tokens }) => {
800-
visit_attrs(vis, attrs);
801-
visit_lazy_tts_opt_mut(vis, Some(tokens));
802-
}
803-
}
804-
}
805-
806-
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
807-
fn visit_tt<T: MutVisitor>(vis: &mut T, tt: &mut TokenTree) {
808-
match tt {
809-
TokenTree::Token(token, _spacing) => {
810-
visit_token(vis, token);
811-
}
812-
TokenTree::Delimited(dspan, _spacing, _delim, tts) => {
813-
visit_tts(vis, tts);
814-
visit_delim_span(vis, dspan);
815-
}
816-
}
817-
}
818-
819-
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
820-
fn visit_tts<T: MutVisitor>(vis: &mut T, TokenStream(tts): &mut TokenStream) {
821-
if T::VISIT_TOKENS && !tts.is_empty() {
822-
let tts = Arc::make_mut(tts);
823-
visit_vec(tts, |tree| visit_tt(vis, tree));
824-
}
825-
}
826-
827-
fn visit_attr_tts<T: MutVisitor>(vis: &mut T, AttrTokenStream(tts): &mut AttrTokenStream) {
828-
if T::VISIT_TOKENS && !tts.is_empty() {
829-
let tts = Arc::make_mut(tts);
830-
visit_vec(tts, |tree| visit_attr_tt(vis, tree));
831-
}
832-
}
833-
834-
fn visit_lazy_tts_opt_mut<T: MutVisitor>(vis: &mut T, lazy_tts: Option<&mut LazyAttrTokenStream>) {
835-
if T::VISIT_TOKENS {
836-
if let Some(lazy_tts) = lazy_tts {
837-
let mut tts = lazy_tts.to_attr_token_stream();
838-
visit_attr_tts(vis, &mut tts);
839-
*lazy_tts = LazyAttrTokenStream::new_direct(tts);
840-
}
841-
}
842-
}
843-
844-
fn visit_lazy_tts<T: MutVisitor>(vis: &mut T, lazy_tts: &mut Option<LazyAttrTokenStream>) {
845-
visit_lazy_tts_opt_mut(vis, lazy_tts.as_mut());
846-
}
847-
848-
/// Applies ident visitor if it's an ident. In practice this is not actually
849-
/// used by specific visitors right now, but there's a test below checking that
850-
/// it works.
851-
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
852-
pub fn visit_token<T: MutVisitor>(vis: &mut T, t: &mut Token) {
853-
let Token { kind, span } = t;
854-
match kind {
855-
token::Ident(name, _is_raw) | token::Lifetime(name, _is_raw) => {
856-
let mut ident = Ident::new(*name, *span);
857-
vis.visit_ident(&mut ident);
858-
*name = ident.name;
859-
*span = ident.span;
860-
return; // Avoid visiting the span for the second time.
861-
}
862-
token::NtIdent(ident, _is_raw) => {
863-
vis.visit_ident(ident);
864-
}
865-
token::NtLifetime(ident, _is_raw) => {
866-
vis.visit_ident(ident);
867-
}
868-
_ => {}
869-
}
870-
vis.visit_span(span);
871-
}
872-
873772
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
874773
fn visit_defaultness<T: MutVisitor>(vis: &mut T, defaultness: &mut Defaultness) {
875774
match defaultness {
@@ -1188,10 +1087,9 @@ fn walk_mt<T: MutVisitor>(vis: &mut T, MutTy { ty, mutbl: _ }: &mut MutTy) {
11881087
}
11891088

11901089
pub fn walk_block<T: MutVisitor>(vis: &mut T, block: &mut P<Block>) {
1191-
let Block { id, stmts, rules: _, span, tokens } = block.deref_mut();
1090+
let Block { id, stmts, rules: _, span, tokens: _ } = block.deref_mut();
11921091
vis.visit_id(id);
11931092
stmts.flat_map_in_place(|stmt| vis.flat_map_stmt(stmt));
1194-
visit_lazy_tts(vis, tokens);
11951093
vis.visit_span(span);
11961094
}
11971095

@@ -1472,12 +1370,11 @@ fn walk_item_ctxt<K: WalkItemKind>(
14721370
item: &mut P<Item<K>>,
14731371
ctxt: K::Ctxt,
14741372
) {
1475-
let Item { attrs, id, kind, vis, span, tokens } = item.deref_mut();
1373+
let Item { attrs, id, kind, vis, span, tokens: _ } = item.deref_mut();
14761374
visitor.visit_id(id);
14771375
visit_attrs(visitor, attrs);
14781376
visitor.visit_vis(vis);
14791377
kind.walk(*span, *id, vis, ctxt, visitor);
1480-
visit_lazy_tts(visitor, tokens);
14811378
visitor.visit_span(span);
14821379
}
14831380

@@ -1551,7 +1448,7 @@ impl WalkItemKind for ForeignItemKind {
15511448
}
15521449

15531450
pub fn walk_pat<T: MutVisitor>(vis: &mut T, pat: &mut P<Pat>) {
1554-
let Pat { id, kind, span, tokens } = pat.deref_mut();
1451+
let Pat { id, kind, span, tokens: _ } = pat.deref_mut();
15551452
vis.visit_id(id);
15561453
match kind {
15571454
PatKind::Err(_guar) => {}
@@ -1593,7 +1490,6 @@ pub fn walk_pat<T: MutVisitor>(vis: &mut T, pat: &mut P<Pat>) {
15931490
PatKind::Paren(inner) => vis.visit_pat(inner),
15941491
PatKind::MacCall(mac) => vis.visit_mac_call(mac),
15951492
}
1596-
visit_lazy_tts(vis, tokens);
15971493
vis.visit_span(span);
15981494
}
15991495

@@ -1657,7 +1553,7 @@ fn walk_format_args<T: MutVisitor>(vis: &mut T, fmt: &mut FormatArgs) {
16571553
vis.visit_span(span);
16581554
}
16591555

1660-
pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, tokens }: &mut Expr) {
1556+
pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, tokens: _ }: &mut Expr) {
16611557
vis.visit_id(id);
16621558
visit_attrs(vis, attrs);
16631559
match kind {
@@ -1848,7 +1744,6 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
18481744
ExprKind::Err(_guar) => {}
18491745
ExprKind::Dummy => {}
18501746
}
1851-
visit_lazy_tts(vis, tokens);
18521747
vis.visit_span(span);
18531748
}
18541749

@@ -1890,25 +1785,23 @@ fn walk_flat_map_stmt_kind<T: MutVisitor>(vis: &mut T, kind: StmtKind) -> SmallV
18901785
StmtKind::Semi(expr) => vis.filter_map_expr(expr).into_iter().map(StmtKind::Semi).collect(),
18911786
StmtKind::Empty => smallvec![StmtKind::Empty],
18921787
StmtKind::MacCall(mut mac) => {
1893-
let MacCallStmt { mac: mac_, style: _, attrs, tokens } = mac.deref_mut();
1788+
let MacCallStmt { mac: mac_, style: _, attrs, tokens: _ } = mac.deref_mut();
18941789
visit_attrs(vis, attrs);
18951790
vis.visit_mac_call(mac_);
1896-
visit_lazy_tts(vis, tokens);
18971791
smallvec![StmtKind::MacCall(mac)]
18981792
}
18991793
}
19001794
}
19011795

19021796
fn walk_vis<T: MutVisitor>(vis: &mut T, visibility: &mut Visibility) {
1903-
let Visibility { kind, span, tokens } = visibility;
1797+
let Visibility { kind, span, tokens: _ } = visibility;
19041798
match kind {
19051799
VisibilityKind::Public | VisibilityKind::Inherited => {}
19061800
VisibilityKind::Restricted { path, id, shorthand: _ } => {
19071801
vis.visit_id(id);
19081802
vis.visit_path(path);
19091803
}
19101804
}
1911-
visit_lazy_tts(vis, tokens);
19121805
vis.visit_span(span);
19131806
}
19141807

compiler/rustc_codegen_cranelift/src/base.rs

+2-37
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ use rustc_ast::InlineAsmOptions;
88
use rustc_codegen_ssa::base::is_call_from_compiler_builtins_to_upstream_monomorphization;
99
use rustc_data_structures::profiling::SelfProfilerRef;
1010
use rustc_index::IndexVec;
11-
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
12-
use rustc_middle::mir::InlineAsmMacro;
1311
use rustc_middle::ty::TypeVisitableExt;
1412
use rustc_middle::ty::adjustment::PointerCoercion;
1513
use rustc_middle::ty::layout::{FnAbiOf, HasTypingEnv};
@@ -18,7 +16,6 @@ use rustc_middle::ty::print::with_no_trimmed_paths;
1816
use crate::constant::ConstantCx;
1917
use crate::debuginfo::{FunctionDebugContext, TypeDebugContext};
2018
use crate::enable_verifier;
21-
use crate::inline_asm::codegen_naked_asm;
2219
use crate::prelude::*;
2320
use crate::pretty_clif::CommentWriter;
2421

@@ -37,7 +34,7 @@ pub(crate) fn codegen_fn<'tcx>(
3734
cached_func: Function,
3835
module: &mut dyn Module,
3936
instance: Instance<'tcx>,
40-
) -> Option<CodegenedFunction> {
37+
) -> CodegenedFunction {
4138
debug_assert!(!instance.args.has_infer());
4239

4340
let symbol_name = tcx.symbol_name(instance).name.to_string();
@@ -54,38 +51,6 @@ pub(crate) fn codegen_fn<'tcx>(
5451
String::from_utf8_lossy(&buf).into_owned()
5552
});
5653

57-
if tcx.codegen_fn_attrs(instance.def_id()).flags.contains(CodegenFnAttrFlags::NAKED) {
58-
assert_eq!(mir.basic_blocks.len(), 1);
59-
assert!(mir.basic_blocks[START_BLOCK].statements.is_empty());
60-
61-
match &mir.basic_blocks[START_BLOCK].terminator().kind {
62-
TerminatorKind::InlineAsm {
63-
asm_macro: InlineAsmMacro::NakedAsm,
64-
template,
65-
operands,
66-
options,
67-
line_spans: _,
68-
targets: _,
69-
unwind: _,
70-
} => {
71-
codegen_naked_asm(
72-
tcx,
73-
cx,
74-
module,
75-
instance,
76-
mir.basic_blocks[START_BLOCK].terminator().source_info.span,
77-
&symbol_name,
78-
template,
79-
operands,
80-
*options,
81-
);
82-
}
83-
_ => unreachable!(),
84-
}
85-
86-
return None;
87-
}
88-
8954
// Declare function
9055
let sig = get_function_sig(tcx, module.target_config().default_call_conv, instance);
9156
let func_id = module.declare_function(&symbol_name, Linkage::Local, &sig).unwrap();
@@ -166,7 +131,7 @@ pub(crate) fn codegen_fn<'tcx>(
166131
// Verify function
167132
verify_func(tcx, &clif_comments, &func);
168133

169-
Some(CodegenedFunction { symbol_name, func_id, func, clif_comments, func_debug_cx })
134+
CodegenedFunction { symbol_name, func_id, func, clif_comments, func_debug_cx }
170135
}
171136

172137
pub(crate) fn compile_fn(

0 commit comments

Comments
 (0)