Skip to content

Commit 7d356eb

Browse files
committed
Auto merge of #127831 - tgross35:rollup-c0j9n7b, r=tgross35
Rollup of 7 pull requests Successful merges: - #124033 (Sync ar_archive_writer to LLVM 18.1.3) - #126699 (Delegation: support coercion for target expression) - #126762 (Deny keyword lifetimes pre-expansion) - #126967 (Promote the `wasm32-wasip2` target to Tier 2) - #127390 (Migrate `raw-dylib-inline-cross-dylib` and `raw-dylib-custom-dlltool` `run-make` tests to rmake) - #127501 (Invert infer `error_reporting` mod struture) - #127816 (Update method name to reflect changes to its internals) r? `@ghost` `@rustbot` modify labels: rollup
2 parents 032be6f + 7d534dd commit 7d356eb

File tree

87 files changed

+1429
-338
lines changed

Some content is hidden

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

87 files changed

+1429
-338
lines changed

Cargo.lock

+166-6
Original file line numberDiff line numberDiff line change
@@ -236,11 +236,11 @@ checksum = "d67af77d68a931ecd5cbd8a3b5987d63a1d1d1278f7f6a60ae33db485cdebb69"
236236

237237
[[package]]
238238
name = "ar_archive_writer"
239-
version = "0.2.0"
239+
version = "0.3.0"
240240
source = "registry+https://github.com./rust-lang/crates.io-index"
241-
checksum = "f0c269894b6fe5e9d7ada0cf69b5bf847ff35bc25fc271f08e1d080fce80339a"
241+
checksum = "f8412a2d690663356cba5a2532f3ed55d1e8090743bc6695b88403b27df67733"
242242
dependencies = [
243-
"object 0.32.2",
243+
"object 0.35.0",
244244
]
245245

246246
[[package]]
@@ -1682,6 +1682,7 @@ dependencies = [
16821682
"compiler_builtins",
16831683
"rustc-std-workspace-alloc",
16841684
"rustc-std-workspace-core",
1685+
"serde",
16851686
]
16861687

16871688
[[package]]
@@ -1891,6 +1892,12 @@ dependencies = [
18911892
"syn 2.0.67",
18921893
]
18931894

1895+
[[package]]
1896+
name = "id-arena"
1897+
version = "2.2.1"
1898+
source = "registry+https://github.com./rust-lang/crates.io-index"
1899+
checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005"
1900+
18941901
[[package]]
18951902
name = "ident_case"
18961903
version = "1.0.1"
@@ -2120,6 +2127,12 @@ version = "1.0.5"
21202127
source = "registry+https://github.com./rust-lang/crates.io-index"
21212128
checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760"
21222129

2130+
[[package]]
2131+
name = "lexopt"
2132+
version = "0.3.0"
2133+
source = "registry+https://github.com./rust-lang/crates.io-index"
2134+
checksum = "baff4b617f7df3d896f97fe922b64817f6cd9a756bb81d40f8883f2f66dcb401"
2135+
21232136
[[package]]
21242137
name = "libc"
21252138
version = "0.2.155"
@@ -2634,7 +2647,7 @@ dependencies = [
26342647
"indexmap",
26352648
"memchr",
26362649
"ruzstd 0.5.0",
2637-
"wasmparser",
2650+
"wasmparser 0.118.2",
26382651
]
26392652

26402653
[[package]]
@@ -2648,6 +2661,15 @@ dependencies = [
26482661
"ruzstd 0.6.0",
26492662
]
26502663

2664+
[[package]]
2665+
name = "object"
2666+
version = "0.35.0"
2667+
source = "registry+https://github.com./rust-lang/crates.io-index"
2668+
checksum = "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e"
2669+
dependencies = [
2670+
"memchr",
2671+
]
2672+
26512673
[[package]]
26522674
name = "object"
26532675
version = "0.36.0"
@@ -3436,7 +3458,7 @@ dependencies = [
34363458
"object 0.34.0",
34373459
"regex",
34383460
"similar",
3439-
"wasmparser",
3461+
"wasmparser 0.118.2",
34403462
]
34413463

34423464
[[package]]
@@ -3823,7 +3845,7 @@ dependencies = [
38233845
"thin-vec",
38243846
"thorin-dwp",
38253847
"tracing",
3826-
"wasm-encoder",
3848+
"wasm-encoder 0.200.0",
38273849
"windows",
38283850
]
38293851

@@ -5267,6 +5289,15 @@ dependencies = [
52675289
"color-eyre",
52685290
]
52695291

5292+
[[package]]
5293+
name = "spdx"
5294+
version = "0.10.6"
5295+
source = "registry+https://github.com./rust-lang/crates.io-index"
5296+
checksum = "47317bbaf63785b53861e1ae2d11b80d6b624211d42cb20efcd210ee6f8a14bc"
5297+
dependencies = [
5298+
"smallvec",
5299+
]
5300+
52705301
[[package]]
52715302
name = "spdx-expression"
52725303
version = "0.5.2"
@@ -6315,6 +6346,28 @@ version = "0.2.92"
63156346
source = "registry+https://github.com./rust-lang/crates.io-index"
63166347
checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
63176348

6349+
[[package]]
6350+
name = "wasm-component-ld"
6351+
version = "0.5.4"
6352+
source = "registry+https://github.com./rust-lang/crates.io-index"
6353+
checksum = "314d932d5e84c9678751b85498b1482b2f32f185744e449d3ce0b1d400376dad"
6354+
dependencies = [
6355+
"anyhow",
6356+
"clap",
6357+
"lexopt",
6358+
"tempfile",
6359+
"wasmparser 0.210.0",
6360+
"wat",
6361+
"wit-component",
6362+
]
6363+
6364+
[[package]]
6365+
name = "wasm-component-ld-wrapper"
6366+
version = "0.1.0"
6367+
dependencies = [
6368+
"wasm-component-ld",
6369+
]
6370+
63186371
[[package]]
63196372
name = "wasm-encoder"
63206373
version = "0.200.0"
@@ -6324,6 +6377,40 @@ dependencies = [
63246377
"leb128",
63256378
]
63266379

6380+
[[package]]
6381+
name = "wasm-encoder"
6382+
version = "0.210.0"
6383+
source = "registry+https://github.com./rust-lang/crates.io-index"
6384+
checksum = "e7e3764d9d6edabd8c9e16195e177be0d20f6ab942ad18af52860f12f82bc59a"
6385+
dependencies = [
6386+
"leb128",
6387+
]
6388+
6389+
[[package]]
6390+
name = "wasm-encoder"
6391+
version = "0.211.1"
6392+
source = "registry+https://github.com./rust-lang/crates.io-index"
6393+
checksum = "5e7d931a1120ef357f32b74547646b6fa68ea25e377772b72874b131a9ed70d4"
6394+
dependencies = [
6395+
"leb128",
6396+
]
6397+
6398+
[[package]]
6399+
name = "wasm-metadata"
6400+
version = "0.210.0"
6401+
source = "registry+https://github.com./rust-lang/crates.io-index"
6402+
checksum = "012729d1294907fcb0866f08460ab95426a6d0b176a599619b84cac7653452b4"
6403+
dependencies = [
6404+
"anyhow",
6405+
"indexmap",
6406+
"serde",
6407+
"serde_derive",
6408+
"serde_json",
6409+
"spdx",
6410+
"wasm-encoder 0.210.0",
6411+
"wasmparser 0.210.0",
6412+
]
6413+
63276414
[[package]]
63286415
name = "wasmparser"
63296416
version = "0.118.2"
@@ -6334,6 +6421,42 @@ dependencies = [
63346421
"semver",
63356422
]
63366423

6424+
[[package]]
6425+
name = "wasmparser"
6426+
version = "0.210.0"
6427+
source = "registry+https://github.com./rust-lang/crates.io-index"
6428+
checksum = "a7bbcd21e7581619d9f6ca00f8c4f08f1cacfe58bf63f83af57cd0476f1026f5"
6429+
dependencies = [
6430+
"ahash",
6431+
"bitflags 2.5.0",
6432+
"hashbrown",
6433+
"indexmap",
6434+
"semver",
6435+
"serde",
6436+
]
6437+
6438+
[[package]]
6439+
name = "wast"
6440+
version = "211.0.1"
6441+
source = "registry+https://github.com./rust-lang/crates.io-index"
6442+
checksum = "b25506dd82d00da6b14a87436b3d52b1d264083fa79cdb72a0d1b04a8595ccaa"
6443+
dependencies = [
6444+
"bumpalo",
6445+
"leb128",
6446+
"memchr",
6447+
"unicode-width",
6448+
"wasm-encoder 0.211.1",
6449+
]
6450+
6451+
[[package]]
6452+
name = "wat"
6453+
version = "1.211.1"
6454+
source = "registry+https://github.com./rust-lang/crates.io-index"
6455+
checksum = "eb716ca6c86eecac2d82541ffc39860118fc0af9309c4f2670637bea2e1bdd7d"
6456+
dependencies = [
6457+
"wast",
6458+
]
6459+
63376460
[[package]]
63386461
name = "winapi"
63396462
version = "0.3.9"
@@ -6561,6 +6684,43 @@ dependencies = [
65616684
"memchr",
65626685
]
65636686

6687+
[[package]]
6688+
name = "wit-component"
6689+
version = "0.210.0"
6690+
source = "registry+https://github.com./rust-lang/crates.io-index"
6691+
checksum = "a450bdb5d032acf1fa0865451fa0c6f50e62f2d31eaa8dba967c2e2d068694a4"
6692+
dependencies = [
6693+
"anyhow",
6694+
"bitflags 2.5.0",
6695+
"indexmap",
6696+
"log",
6697+
"serde",
6698+
"serde_derive",
6699+
"serde_json",
6700+
"wasm-encoder 0.210.0",
6701+
"wasm-metadata",
6702+
"wasmparser 0.210.0",
6703+
"wit-parser",
6704+
]
6705+
6706+
[[package]]
6707+
name = "wit-parser"
6708+
version = "0.210.0"
6709+
source = "registry+https://github.com./rust-lang/crates.io-index"
6710+
checksum = "60a965cbd439af19a4b44a54a97ab8957d86f02d01320efc9e31c1d3605c6710"
6711+
dependencies = [
6712+
"anyhow",
6713+
"id-arena",
6714+
"indexmap",
6715+
"log",
6716+
"semver",
6717+
"serde",
6718+
"serde_derive",
6719+
"serde_json",
6720+
"unicode-xid",
6721+
"wasmparser 0.210.0",
6722+
]
6723+
65646724
[[package]]
65656725
name = "writeable"
65666726
version = "0.5.5"

Cargo.toml

+4
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ members = [
4545
"src/tools/opt-dist",
4646
"src/tools/coverage-dump",
4747
"src/tools/rustc-perf-wrapper",
48+
"src/tools/wasm-component-ld",
4849
]
4950

5051
exclude = [
@@ -104,6 +105,9 @@ rustc-demangle.debug = 0
104105
[profile.release.package.lld-wrapper]
105106
debug = 0
106107
strip = true
108+
[profile.release.package.wasm-component-ld-wrapper]
109+
debug = 0
110+
strip = true
107111

108112
[patch.crates-io]
109113
# See comments in `library/rustc-std-workspace-core/README.md` for what's going on

compiler/rustc_ast_lowering/src/delegation.rs

+69-15
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
3939
use crate::{ImplTraitPosition, ResolverAstLoweringExt};
4040

41-
use super::{ImplTraitContext, LoweringContext, ParamMode};
41+
use super::{ImplTraitContext, LoweringContext, ParamMode, ParenthesizedGenericArgs};
4242

4343
use ast::visit::Visitor;
4444
use hir::def::{DefKind, PartialRes, Res};
@@ -259,8 +259,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
259259
self_param_id: pat_node_id,
260260
};
261261
self_resolver.visit_block(block);
262-
let block = this.lower_block(block, false);
263-
this.mk_expr(hir::ExprKind::Block(block, None), block.span)
262+
this.lower_target_expr(&block)
264263
} else {
265264
let pat_hir_id = this.lower_node_id(pat_node_id);
266265
this.generate_arg(pat_hir_id, span)
@@ -273,26 +272,81 @@ impl<'hir> LoweringContext<'_, 'hir> {
273272
})
274273
}
275274

276-
// Generates fully qualified call for the resulting body.
275+
// FIXME(fn_delegation): Alternatives for target expression lowering:
276+
// https://github.com./rust-lang/rfcs/pull/3530#issuecomment-2197170600.
277+
fn lower_target_expr(&mut self, block: &Block) -> hir::Expr<'hir> {
278+
if block.stmts.len() == 1
279+
&& let StmtKind::Expr(expr) = &block.stmts[0].kind
280+
{
281+
return self.lower_expr_mut(expr);
282+
}
283+
284+
let block = self.lower_block(block, false);
285+
self.mk_expr(hir::ExprKind::Block(block, None), block.span)
286+
}
287+
288+
// Generates expression for the resulting body. If possible, `MethodCall` is used
289+
// to allow autoref/autoderef for target expression. For example in:
290+
//
291+
// trait Trait : Sized {
292+
// fn by_value(self) -> i32 { 1 }
293+
// fn by_mut_ref(&mut self) -> i32 { 2 }
294+
// fn by_ref(&self) -> i32 { 3 }
295+
// }
296+
//
297+
// struct NewType(SomeType);
298+
// impl Trait for NewType {
299+
// reuse Trait::* { self.0 }
300+
// }
301+
//
302+
// `self.0` will automatically coerce.
277303
fn finalize_body_lowering(
278304
&mut self,
279305
delegation: &Delegation,
280306
args: Vec<hir::Expr<'hir>>,
281307
span: Span,
282308
) -> hir::Expr<'hir> {
283-
let path = self.lower_qpath(
284-
delegation.id,
285-
&delegation.qself,
286-
&delegation.path,
287-
ParamMode::Optional,
288-
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
289-
None,
290-
);
291-
292309
let args = self.arena.alloc_from_iter(args);
293-
let path_expr = self.arena.alloc(self.mk_expr(hir::ExprKind::Path(path), span));
294-
let call = self.arena.alloc(self.mk_expr(hir::ExprKind::Call(path_expr, args), span));
295310

311+
let has_generic_args =
312+
delegation.path.segments.iter().rev().skip(1).any(|segment| segment.args.is_some());
313+
314+
let call = if self
315+
.get_resolution_id(delegation.id, span)
316+
.and_then(|def_id| Ok(self.has_self(def_id, span)))
317+
.unwrap_or_default()
318+
&& delegation.qself.is_none()
319+
&& !has_generic_args
320+
{
321+
let ast_segment = delegation.path.segments.last().unwrap();
322+
let segment = self.lower_path_segment(
323+
delegation.path.span,
324+
ast_segment,
325+
ParamMode::Optional,
326+
ParenthesizedGenericArgs::Err,
327+
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
328+
None,
329+
);
330+
let segment = self.arena.alloc(segment);
331+
332+
self.arena.alloc(hir::Expr {
333+
hir_id: self.next_id(),
334+
kind: hir::ExprKind::MethodCall(segment, &args[0], &args[1..], span),
335+
span,
336+
})
337+
} else {
338+
let path = self.lower_qpath(
339+
delegation.id,
340+
&delegation.qself,
341+
&delegation.path,
342+
ParamMode::Optional,
343+
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
344+
None,
345+
);
346+
347+
let callee_path = self.arena.alloc(self.mk_expr(hir::ExprKind::Path(path), span));
348+
self.arena.alloc(self.mk_expr(hir::ExprKind::Call(callee_path, args), span))
349+
};
296350
let block = self.arena.alloc(hir::Block {
297351
stmts: &[],
298352
expr: Some(call),

0 commit comments

Comments
 (0)