From 849a9803e0c41dcb2de020d54970ee165fcde7b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=9D=E5=80=89=E6=B0=B4=E5=B8=8C?= Date: Fri, 7 Aug 2026 13:37:02 +0800 Subject: [PATCH 1/2] Enable all EII tests on Windows MSVC --- tests/ui/eii/duplicate/dylib_default_duplicate.rs | 4 ++-- tests/ui/eii/linking/track_caller_cross_crate.rs | 3 ++- tests/ui/eii/track_caller.rs | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/ui/eii/duplicate/dylib_default_duplicate.rs b/tests/ui/eii/duplicate/dylib_default_duplicate.rs index 28c79ae35dd97..5480bb13b4a49 100644 --- a/tests/ui/eii/duplicate/dylib_default_duplicate.rs +++ b/tests/ui/eii/duplicate/dylib_default_duplicate.rs @@ -2,8 +2,8 @@ //@ needs-crate-type: dylib //@ compile-flags: --emit link //@ ignore-backends: gcc -// FIXME: linking on windows (specifically mingw) not yet supported, see tracking issue #125418 -//@ ignore-windows +// FIXME(#125418): linking on Windows GNU targets is not yet supported. +//@ ignore-windows-gnu // Regression test for https://github.com/rust-lang/rust/issues/156320. // A default implementation from an upstream dylib has already been selected and // must not be overridden by a downstream explicit implementation. diff --git a/tests/ui/eii/linking/track_caller_cross_crate.rs b/tests/ui/eii/linking/track_caller_cross_crate.rs index 2e16ec7b9fb23..e8ba5dc2b864b 100644 --- a/tests/ui/eii/linking/track_caller_cross_crate.rs +++ b/tests/ui/eii/linking/track_caller_cross_crate.rs @@ -3,7 +3,8 @@ //@ aux-build: track_caller_cross_other_crate.rs //@ compile-flags: -O //@ ignore-backends: gcc -//@ ignore-windows +// FIXME(#125418): linking on Windows GNU targets is not yet supported. +//@ ignore-windows-gnu // Tests that `#[track_caller]` on an EII declaration in one crate is derived // onto an explicit implementation in another crate. diff --git a/tests/ui/eii/track_caller.rs b/tests/ui/eii/track_caller.rs index 62f48467839af..5e298fba9675a 100644 --- a/tests/ui/eii/track_caller.rs +++ b/tests/ui/eii/track_caller.rs @@ -1,6 +1,7 @@ //@ run-pass //@ ignore-backends: gcc -//@ ignore-windows +// FIXME(#125418): linking on Windows GNU targets is not yet supported. +//@ ignore-windows-gnu // Tests that `#[track_caller]` on an EII declaration is threaded through both // the default impl (no override) and an explicit override (which does not // repeat `#[track_caller]` — it is derived during codegen so the shim ABI matches). From c5749cbb2f8a88439a112bed1af29d03132e91ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=9D=E5=80=89=E6=B0=B4=E5=B8=8C?= Date: Sat, 8 Aug 2026 17:17:46 +0800 Subject: [PATCH 2/2] Normalize EII dylib test coverage --- .../ui/eii/default/auxiliary/decl_with_default.rs | 1 + .../default/auxiliary/decl_with_default_panics.rs | 2 ++ tests/ui/eii/default/auxiliary/impl1.rs | 1 + ...t.run.stdout => call_default.dylib.run.stdout} | 0 tests/ui/eii/default/call_default.rlib.run.stdout | 1 + tests/ui/eii/default/call_default.rs | 2 ++ tests/ui/eii/default/call_default_panics.rs | 2 ++ ...run.stdout => call_impl.dylib-impl.run.stdout} | 0 tests/ui/eii/default/call_impl.rlib.run.stdout | 1 + tests/ui/eii/default/call_impl.rs | 2 ++ tests/ui/eii/duplicate/auxiliary/impl1.rs | 2 ++ tests/ui/eii/duplicate/auxiliary/impl2.rs | 2 ++ tests/ui/eii/duplicate/auxiliary/impl3.rs | 1 + tests/ui/eii/duplicate/auxiliary/impl4.rs | 1 + ...{duplicate1.stderr => duplicate1.dylib.stderr} | 4 ++-- tests/ui/eii/duplicate/duplicate1.rlib.stderr | 15 +++++++++++++++ tests/ui/eii/duplicate/duplicate1.rs | 2 ++ tests/ui/eii/duplicate/duplicate2.stderr | 4 ++-- tests/ui/eii/duplicate/duplicate3.stderr | 4 ++-- tests/ui/eii/static/auxiliary/cross_crate_def.rs | 2 ++ .../ui/eii/static/auxiliary/decl_with_default.rs | 1 + .../eii/static/auxiliary/impl_default_override.rs | 1 + ...un.stdout => cross_crate_def.dylib.run.stdout} | 0 .../ui/eii/static/cross_crate_def.rlib.run.stdout | 2 ++ tests/ui/eii/static/cross_crate_def.rs | 2 ++ ...tdout => default_cross_crate.dylib.run.stdout} | 0 .../static/default_cross_crate.rlib.run.stdout | 1 + tests/ui/eii/static/default_cross_crate.rs | 2 ++ ...lt_cross_crate_explicit.dylib-impl.run.stdout} | 0 .../default_cross_crate_explicit.rlib.run.stdout | 1 + .../ui/eii/static/default_cross_crate_explicit.rs | 2 ++ 31 files changed, 55 insertions(+), 6 deletions(-) rename tests/ui/eii/default/{call_default.run.stdout => call_default.dylib.run.stdout} (100%) create mode 100644 tests/ui/eii/default/call_default.rlib.run.stdout rename tests/ui/eii/default/{call_impl.run.stdout => call_impl.dylib-impl.run.stdout} (100%) create mode 100644 tests/ui/eii/default/call_impl.rlib.run.stdout rename tests/ui/eii/duplicate/{duplicate1.stderr => duplicate1.dylib.stderr} (86%) create mode 100644 tests/ui/eii/duplicate/duplicate1.rlib.stderr rename tests/ui/eii/static/{cross_crate_def.run.stdout => cross_crate_def.dylib.run.stdout} (100%) create mode 100644 tests/ui/eii/static/cross_crate_def.rlib.run.stdout rename tests/ui/eii/static/{default_cross_crate.run.stdout => default_cross_crate.dylib.run.stdout} (100%) create mode 100644 tests/ui/eii/static/default_cross_crate.rlib.run.stdout rename tests/ui/eii/static/{default_cross_crate_explicit.run.stdout => default_cross_crate_explicit.dylib-impl.run.stdout} (100%) create mode 100644 tests/ui/eii/static/default_cross_crate_explicit.rlib.run.stdout diff --git a/tests/ui/eii/default/auxiliary/decl_with_default.rs b/tests/ui/eii/default/auxiliary/decl_with_default.rs index 8d962c19c94d9..cf9d86d561733 100644 --- a/tests/ui/eii/default/auxiliary/decl_with_default.rs +++ b/tests/ui/eii/default/auxiliary/decl_with_default.rs @@ -1,4 +1,5 @@ //@ no-prefer-dynamic +//@[dylib] compile-flags: --crate-type=dylib -Cprefer-dynamic #![crate_type = "rlib"] #![feature(extern_item_impls)] diff --git a/tests/ui/eii/default/auxiliary/decl_with_default_panics.rs b/tests/ui/eii/default/auxiliary/decl_with_default_panics.rs index 3867bfb85c9fe..11209e86b2588 100644 --- a/tests/ui/eii/default/auxiliary/decl_with_default_panics.rs +++ b/tests/ui/eii/default/auxiliary/decl_with_default_panics.rs @@ -1,3 +1,5 @@ +//@ no-prefer-dynamic +//@[dylib] compile-flags: --crate-type=dylib -Cprefer-dynamic //@ needs-unwind //@ exec-env:RUST_BACKTRACE=1 #![crate_type = "rlib"] diff --git a/tests/ui/eii/default/auxiliary/impl1.rs b/tests/ui/eii/default/auxiliary/impl1.rs index 5ed6ab639a883..321ba913a01a6 100644 --- a/tests/ui/eii/default/auxiliary/impl1.rs +++ b/tests/ui/eii/default/auxiliary/impl1.rs @@ -1,4 +1,5 @@ //@ no-prefer-dynamic +//@[dylib-impl] compile-flags: --crate-type=dylib -Cprefer-dynamic //@ aux-build: decl_with_default.rs #![crate_type = "rlib"] #![feature(extern_item_impls)] diff --git a/tests/ui/eii/default/call_default.run.stdout b/tests/ui/eii/default/call_default.dylib.run.stdout similarity index 100% rename from tests/ui/eii/default/call_default.run.stdout rename to tests/ui/eii/default/call_default.dylib.run.stdout diff --git a/tests/ui/eii/default/call_default.rlib.run.stdout b/tests/ui/eii/default/call_default.rlib.run.stdout new file mode 100644 index 0000000000000..1e49486f6aaf4 --- /dev/null +++ b/tests/ui/eii/default/call_default.rlib.run.stdout @@ -0,0 +1 @@ +default 10 diff --git a/tests/ui/eii/default/call_default.rs b/tests/ui/eii/default/call_default.rs index c090043106903..7769ae00bb0f5 100644 --- a/tests/ui/eii/default/call_default.rs +++ b/tests/ui/eii/default/call_default.rs @@ -1,3 +1,5 @@ +//@ revisions: rlib dylib +//@[dylib] needs-crate-type: dylib //@ aux-build: decl_with_default.rs //@ run-pass //@ check-run-results diff --git a/tests/ui/eii/default/call_default_panics.rs b/tests/ui/eii/default/call_default_panics.rs index 68740d5ab80d8..d027748b0ffb3 100644 --- a/tests/ui/eii/default/call_default_panics.rs +++ b/tests/ui/eii/default/call_default_panics.rs @@ -1,3 +1,5 @@ +//@ revisions: rlib dylib +//@[dylib] needs-crate-type: dylib //@ aux-build: decl_with_default_panics.rs //@ edition: 2021 //@ run-pass diff --git a/tests/ui/eii/default/call_impl.run.stdout b/tests/ui/eii/default/call_impl.dylib-impl.run.stdout similarity index 100% rename from tests/ui/eii/default/call_impl.run.stdout rename to tests/ui/eii/default/call_impl.dylib-impl.run.stdout diff --git a/tests/ui/eii/default/call_impl.rlib.run.stdout b/tests/ui/eii/default/call_impl.rlib.run.stdout new file mode 100644 index 0000000000000..bc6298e80ad4b --- /dev/null +++ b/tests/ui/eii/default/call_impl.rlib.run.stdout @@ -0,0 +1 @@ +110 diff --git a/tests/ui/eii/default/call_impl.rs b/tests/ui/eii/default/call_impl.rs index f5b0cca2998f3..4b64033a940f5 100644 --- a/tests/ui/eii/default/call_impl.rs +++ b/tests/ui/eii/default/call_impl.rs @@ -1,3 +1,5 @@ +//@ revisions: rlib dylib-impl +//@[dylib-impl] needs-crate-type: dylib //@ aux-build: decl_with_default.rs //@ aux-build: impl1.rs //@ run-pass diff --git a/tests/ui/eii/duplicate/auxiliary/impl1.rs b/tests/ui/eii/duplicate/auxiliary/impl1.rs index 86017eec20763..e845b8c99fbe8 100644 --- a/tests/ui/eii/duplicate/auxiliary/impl1.rs +++ b/tests/ui/eii/duplicate/auxiliary/impl1.rs @@ -1,3 +1,5 @@ +//@ no-prefer-dynamic +//@[dylib] compile-flags: --crate-type=dylib -Cprefer-dynamic //@ aux-build: decl.rs #![crate_type = "rlib"] #![feature(extern_item_impls)] diff --git a/tests/ui/eii/duplicate/auxiliary/impl2.rs b/tests/ui/eii/duplicate/auxiliary/impl2.rs index 928433d832c2d..931f2bdc28be5 100644 --- a/tests/ui/eii/duplicate/auxiliary/impl2.rs +++ b/tests/ui/eii/duplicate/auxiliary/impl2.rs @@ -1,3 +1,5 @@ +//@ no-prefer-dynamic +//@[dylib] compile-flags: --crate-type=dylib -Cprefer-dynamic //@ aux-build: decl.rs #![crate_type = "rlib"] #![feature(extern_item_impls)] diff --git a/tests/ui/eii/duplicate/auxiliary/impl3.rs b/tests/ui/eii/duplicate/auxiliary/impl3.rs index 3f0be04377fce..45406a109a2fc 100644 --- a/tests/ui/eii/duplicate/auxiliary/impl3.rs +++ b/tests/ui/eii/duplicate/auxiliary/impl3.rs @@ -1,3 +1,4 @@ +//@ no-prefer-dynamic //@ aux-build: decl.rs #![crate_type = "rlib"] #![feature(extern_item_impls)] diff --git a/tests/ui/eii/duplicate/auxiliary/impl4.rs b/tests/ui/eii/duplicate/auxiliary/impl4.rs index 959746f5117f3..9fd6cbbe376bf 100644 --- a/tests/ui/eii/duplicate/auxiliary/impl4.rs +++ b/tests/ui/eii/duplicate/auxiliary/impl4.rs @@ -1,3 +1,4 @@ +//@ no-prefer-dynamic //@ aux-build: decl.rs #![crate_type = "rlib"] #![feature(extern_item_impls)] diff --git a/tests/ui/eii/duplicate/duplicate1.stderr b/tests/ui/eii/duplicate/duplicate1.dylib.stderr similarity index 86% rename from tests/ui/eii/duplicate/duplicate1.stderr rename to tests/ui/eii/duplicate/duplicate1.dylib.stderr index f691043e6a597..6c4758d3beece 100644 --- a/tests/ui/eii/duplicate/duplicate1.stderr +++ b/tests/ui/eii/duplicate/duplicate1.dylib.stderr @@ -1,10 +1,10 @@ error: multiple implementations of `#[eii1]` - --> $DIR/auxiliary/impl1.rs:9:1 + --> $DIR/auxiliary/impl1.rs:11:1 | LL | fn other(x: u64) { | ^^^^^^^^^^^^^^^^ first implemented here in crate `impl1` | - ::: $DIR/auxiliary/impl2.rs:9:1 + ::: $DIR/auxiliary/impl2.rs:11:1 | LL | fn other(x: u64) { | ---------------- also implemented here in crate `impl2` diff --git a/tests/ui/eii/duplicate/duplicate1.rlib.stderr b/tests/ui/eii/duplicate/duplicate1.rlib.stderr new file mode 100644 index 0000000000000..6c4758d3beece --- /dev/null +++ b/tests/ui/eii/duplicate/duplicate1.rlib.stderr @@ -0,0 +1,15 @@ +error: multiple implementations of `#[eii1]` + --> $DIR/auxiliary/impl1.rs:11:1 + | +LL | fn other(x: u64) { + | ^^^^^^^^^^^^^^^^ first implemented here in crate `impl1` + | + ::: $DIR/auxiliary/impl2.rs:11:1 + | +LL | fn other(x: u64) { + | ---------------- also implemented here in crate `impl2` + | + = help: an "externally implementable item" can only have a single implementation in the final artifact. When multiple implementations are found, also in different crates, they conflict + +error: aborting due to 1 previous error + diff --git a/tests/ui/eii/duplicate/duplicate1.rs b/tests/ui/eii/duplicate/duplicate1.rs index 0ac0f16af5078..54803f31c85f4 100644 --- a/tests/ui/eii/duplicate/duplicate1.rs +++ b/tests/ui/eii/duplicate/duplicate1.rs @@ -1,3 +1,5 @@ +//@ revisions: rlib dylib +//@[dylib] needs-crate-type: dylib //@ aux-build: impl1.rs //@ aux-build: impl2.rs //@ ignore-backends: gcc diff --git a/tests/ui/eii/duplicate/duplicate2.stderr b/tests/ui/eii/duplicate/duplicate2.stderr index 492d2b3e6004b..fb0c552cc8719 100644 --- a/tests/ui/eii/duplicate/duplicate2.stderr +++ b/tests/ui/eii/duplicate/duplicate2.stderr @@ -1,10 +1,10 @@ error: multiple implementations of `#[eii1]` - --> $DIR/auxiliary/impl1.rs:9:1 + --> $DIR/auxiliary/impl1.rs:11:1 | LL | fn other(x: u64) { | ^^^^^^^^^^^^^^^^ first implemented here in crate `impl1` | - ::: $DIR/auxiliary/impl2.rs:9:1 + ::: $DIR/auxiliary/impl2.rs:11:1 | LL | fn other(x: u64) { | ---------------- also implemented here in crate `impl2` diff --git a/tests/ui/eii/duplicate/duplicate3.stderr b/tests/ui/eii/duplicate/duplicate3.stderr index f3ca087a27325..caa11c5cf4e92 100644 --- a/tests/ui/eii/duplicate/duplicate3.stderr +++ b/tests/ui/eii/duplicate/duplicate3.stderr @@ -1,10 +1,10 @@ error: multiple implementations of `#[eii1]` - --> $DIR/auxiliary/impl1.rs:9:1 + --> $DIR/auxiliary/impl1.rs:11:1 | LL | fn other(x: u64) { | ^^^^^^^^^^^^^^^^ first implemented here in crate `impl1` | - ::: $DIR/auxiliary/impl2.rs:9:1 + ::: $DIR/auxiliary/impl2.rs:11:1 | LL | fn other(x: u64) { | ---------------- also implemented here in crate `impl2` diff --git a/tests/ui/eii/static/auxiliary/cross_crate_def.rs b/tests/ui/eii/static/auxiliary/cross_crate_def.rs index 56d3f6fcdc557..5956c081c80b5 100644 --- a/tests/ui/eii/static/auxiliary/cross_crate_def.rs +++ b/tests/ui/eii/static/auxiliary/cross_crate_def.rs @@ -1,3 +1,5 @@ +//@ no-prefer-dynamic +//@[dylib] compile-flags: --crate-type=dylib -Cprefer-dynamic #![crate_type = "rlib"] #![feature(extern_item_impls)] diff --git a/tests/ui/eii/static/auxiliary/decl_with_default.rs b/tests/ui/eii/static/auxiliary/decl_with_default.rs index 53cdc8d62bb7e..82e817cda6df0 100644 --- a/tests/ui/eii/static/auxiliary/decl_with_default.rs +++ b/tests/ui/eii/static/auxiliary/decl_with_default.rs @@ -1,4 +1,5 @@ //@ no-prefer-dynamic +//@[dylib] compile-flags: --crate-type=dylib -Cprefer-dynamic #![crate_type = "rlib"] #![feature(extern_item_impls)] diff --git a/tests/ui/eii/static/auxiliary/impl_default_override.rs b/tests/ui/eii/static/auxiliary/impl_default_override.rs index 03cb061135e70..2ab43ab37d0af 100644 --- a/tests/ui/eii/static/auxiliary/impl_default_override.rs +++ b/tests/ui/eii/static/auxiliary/impl_default_override.rs @@ -1,4 +1,5 @@ //@ no-prefer-dynamic +//@[dylib-impl] compile-flags: --crate-type=dylib -Cprefer-dynamic //@ aux-build: decl_with_default.rs #![crate_type = "rlib"] #![feature(extern_item_impls)] diff --git a/tests/ui/eii/static/cross_crate_def.run.stdout b/tests/ui/eii/static/cross_crate_def.dylib.run.stdout similarity index 100% rename from tests/ui/eii/static/cross_crate_def.run.stdout rename to tests/ui/eii/static/cross_crate_def.dylib.run.stdout diff --git a/tests/ui/eii/static/cross_crate_def.rlib.run.stdout b/tests/ui/eii/static/cross_crate_def.rlib.run.stdout new file mode 100644 index 0000000000000..fd3c81a4d7631 --- /dev/null +++ b/tests/ui/eii/static/cross_crate_def.rlib.run.stdout @@ -0,0 +1,2 @@ +5 +5 diff --git a/tests/ui/eii/static/cross_crate_def.rs b/tests/ui/eii/static/cross_crate_def.rs index ad8bbcd0fb963..19dbdaadeef05 100644 --- a/tests/ui/eii/static/cross_crate_def.rs +++ b/tests/ui/eii/static/cross_crate_def.rs @@ -1,3 +1,5 @@ +//@ revisions: rlib dylib +//@[dylib] needs-crate-type: dylib //@ run-pass //@ check-run-results //@ aux-build: cross_crate_def.rs diff --git a/tests/ui/eii/static/default_cross_crate.run.stdout b/tests/ui/eii/static/default_cross_crate.dylib.run.stdout similarity index 100% rename from tests/ui/eii/static/default_cross_crate.run.stdout rename to tests/ui/eii/static/default_cross_crate.dylib.run.stdout diff --git a/tests/ui/eii/static/default_cross_crate.rlib.run.stdout b/tests/ui/eii/static/default_cross_crate.rlib.run.stdout new file mode 100644 index 0000000000000..7ed6ff82de6bc --- /dev/null +++ b/tests/ui/eii/static/default_cross_crate.rlib.run.stdout @@ -0,0 +1 @@ +5 diff --git a/tests/ui/eii/static/default_cross_crate.rs b/tests/ui/eii/static/default_cross_crate.rs index 7a2e5ae3925ad..9d6df257ffbef 100644 --- a/tests/ui/eii/static/default_cross_crate.rs +++ b/tests/ui/eii/static/default_cross_crate.rs @@ -1,3 +1,5 @@ +//@ revisions: rlib dylib +//@[dylib] needs-crate-type: dylib //@ aux-build: decl_with_default.rs //@ run-pass //@ check-run-results diff --git a/tests/ui/eii/static/default_cross_crate_explicit.run.stdout b/tests/ui/eii/static/default_cross_crate_explicit.dylib-impl.run.stdout similarity index 100% rename from tests/ui/eii/static/default_cross_crate_explicit.run.stdout rename to tests/ui/eii/static/default_cross_crate_explicit.dylib-impl.run.stdout diff --git a/tests/ui/eii/static/default_cross_crate_explicit.rlib.run.stdout b/tests/ui/eii/static/default_cross_crate_explicit.rlib.run.stdout new file mode 100644 index 0000000000000..f599e28b8ab0d --- /dev/null +++ b/tests/ui/eii/static/default_cross_crate_explicit.rlib.run.stdout @@ -0,0 +1 @@ +10 diff --git a/tests/ui/eii/static/default_cross_crate_explicit.rs b/tests/ui/eii/static/default_cross_crate_explicit.rs index 183342930ad8c..6ad015b9b601b 100644 --- a/tests/ui/eii/static/default_cross_crate_explicit.rs +++ b/tests/ui/eii/static/default_cross_crate_explicit.rs @@ -1,3 +1,5 @@ +//@ revisions: rlib dylib-impl +//@[dylib-impl] needs-crate-type: dylib //@ aux-build: decl_with_default.rs //@ aux-build: impl_default_override.rs //@ run-pass