diff mbox series

[1/9] rust: Oe-selftest fixes for rust v1.76.

Message ID 20240701092639.1498856-1-Yash.Shinde@windriver.com
State Under Review
Headers show
Series [1/9] rust: Oe-selftest fixes for rust v1.76. | expand

Commit Message

Yash Shinde July 1, 2024, 9:26 a.m. UTC
From: Yash Shinde <Yash.Shinde@windriver.com>

Add the failing tests in rust v1.76 to the exclude list
and add "ignore" tags to ignore failing unit test cases.

Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com>
---
 meta/lib/oeqa/selftest/cases/rust.py          |  19 +
 .../rust/files/rust-oe-selftest.patch         | 345 ++++++++++++++++++
 meta/recipes-devtools/rust/rust-source.inc    |   1 +
 3 files changed, 365 insertions(+)
 create mode 100644 meta/recipes-devtools/rust/files/rust-oe-selftest.patch

Comments

Alex Kiernan July 1, 2024, 9:48 a.m. UTC | #1
On Mon, Jul 1, 2024 at 10:27 AM Yash Shinde via lists.openembedded.org
<Yash.Shinde=windriver.com@lists.openembedded.org> wrote:
>
> From: Yash Shinde <Yash.Shinde@windriver.com>
>
> Add the failing tests in rust v1.76 to the exclude list
> and add "ignore" tags to ignore failing unit test cases.
>
> Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com>
> ---

Well done getting all of this in place (and fingers crossed it makes
it through the autobuilders) - this stuff is incredibly painful to
move forwards!



--
Alex Kiernan
Richard Purdie July 1, 2024, 4:47 p.m. UTC | #2
On Mon, 2024-07-01 at 02:26 -0700, Yash Shinde via
lists.openembedded.org wrote:
> From: Yash Shinde <Yash.Shinde@windriver.com>
> 
> * Drop the following backported patches which are merged
> with rust v1.78 upgrade.
> 
> - 0001-Revert-Map-source-absolute-paths-to-OUT_DIR-as-relat.patch
> - repro-issue-fix-with-v175.patch
> 
> https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html
> 
> Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com>

With this series applied we saw the following failures:

https://valkyrie.yoctoproject.org/#/builders/4/builds/66/steps/12/logs/stdio
https://valkyrie.yoctoproject.org/#/builders/60/builds/66
https://valkyrie.yoctoproject.org/#/builders/2/builds/66
https://valkyrie.yoctoproject.org/#/builders/19/builds/67
https://valkyrie.yoctoproject.org/#/builders/41/builds/61/steps/14/logs/stdio
https://valkyrie.yoctoproject.org/#/builders/18/builds/59/steps/13/logs/stdio
https://valkyrie.yoctoproject.org/#/builders/6/builds/59/steps/12/logs/stdio
https://valkyrie.yoctoproject.org/#/builders/3/builds/66/steps/12/logs/stdio
https://valkyrie.yoctoproject.org/#/builders/67/builds/62/steps/13/logs/stdio
https://valkyrie.yoctoproject.org/#/builders/67/builds/62/steps/16/logs/stdio
https://valkyrie.yoctoproject.org/#/builders/67/builds/62/steps/19/logs/stdio

and the builds haven't all finished yet.

Cheers,

Richard
Richard Purdie July 2, 2024, 8:59 a.m. UTC | #3
On Mon, 2024-07-01 at 17:47 +0100, Richard Purdie via
lists.openembedded.org wrote:
> On Mon, 2024-07-01 at 02:26 -0700, Yash Shinde via
> lists.openembedded.org wrote:
> > From: Yash Shinde <Yash.Shinde@windriver.com>
> > 
> > * Drop the following backported patches which are merged
> > with rust v1.78 upgrade.
> > 
> > - 0001-Revert-Map-source-absolute-paths-to-OUT_DIR-as-relat.patch
> > - repro-issue-fix-with-v175.patch
> > 
> > https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html
> > 
> > Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com>
> 
> With this series applied we saw the following failures:
> 
> https://valkyrie.yoctoproject.org/#/builders/4/builds/66/steps/12/logs/stdio
> https://valkyrie.yoctoproject.org/#/builders/60/builds/66
> https://valkyrie.yoctoproject.org/#/builders/2/builds/66
> https://valkyrie.yoctoproject.org/#/builders/19/builds/67
> https://valkyrie.yoctoproject.org/#/builders/41/builds/61/steps/14/logs/stdio
> https://valkyrie.yoctoproject.org/#/builders/18/builds/59/steps/13/logs/stdio
> https://valkyrie.yoctoproject.org/#/builders/6/builds/59/steps/12/logs/stdio
> https://valkyrie.yoctoproject.org/#/builders/3/builds/66/steps/12/logs/stdio
> https://valkyrie.yoctoproject.org/#/builders/67/builds/62/steps/13/logs/stdio
> https://valkyrie.yoctoproject.org/#/builders/67/builds/62/steps/16/logs/stdio
> https://valkyrie.yoctoproject.org/#/builders/67/builds/62/steps/19/logs/stdio
> 
> and the builds haven't all finished yet.

The build completed and there were a lot more failures. Notably
reproducibility failed:

https://valkyrie.yoctoproject.org/#/builders/37/builds/74

but also:

qemuppc-tc: https://valkyrie.yoctoproject.org/#/builders/49/builds/54/steps/12/logs/stdio
qemux86-alt: https://valkyrie.yoctoproject.org/#/builders/20/builds/52
qemux86-64-alt: https://valkyrie.yoctoproject.org/#/builders/95/builds/52
https://valkyrie.yoctoproject.org/#/builders/45/builds/52
https://valkyrie.yoctoproject.org/#/builders/31/builds/54
https://valkyrie.yoctoproject.org/#/builders/32/builds/54
https://valkyrie.yoctoproject.org/#/builders/36/builds/55
https://valkyrie.yoctoproject.org/#/builders/30/builds/58
https://valkyrie.yoctoproject.org/#/builders/16/builds/58
https://valkyrie.yoctoproject.org/#/builders/68/builds/70

Cheers,

Richard
Sundeep KOKKONDA July 2, 2024, 12:36 p.m. UTC | #4
Hello Richard,

Thanks for test results. We will look into the failures reported.
These failures are only in 1.78 (Is the testing done on 1.76 & 1.77)?

Thanks,
Sundeep K.
Sundeep KOKKONDA July 2, 2024, 12:37 p.m. UTC | #5
Hello Richard,

Thanks for test results. We will look into the failures reported.
These failures are only in 1.78 (Is the testing done on 1.76 & 1.77)?

Thanks,
Sundeep K.
Richard Purdie July 2, 2024, 2:12 p.m. UTC | #6
On Tue, 2024-07-02 at 05:37 -0700, Sundeep KOKKONDA via
lists.openembedded.org wrote:
> Hello Richard,
> 
> Thanks for test results. We will look into the failures reported.
> These failures are only in 1.78 (Is the testing done on 1.76 & 1.77)?

I only tested with all patches applied so 1.78.

I guess 1.76/1.77 results would be useful to know where the issues are
introduced but there is obviously more work involved in running those
builds and it takes up time on the infrastructure. Do we need those?

Cheers,

Richard
Ross Burton July 2, 2024, 3:08 p.m. UTC | #7
On 2 Jul 2024, at 15:12, Richard Purdie via lists.openembedded.org <richard.purdie=linuxfoundation.org@lists.openembedded.org> wrote:
> 
> On Tue, 2024-07-02 at 05:37 -0700, Sundeep KOKKONDA via
> lists.openembedded.org wrote:
>> Hello Richard,
>> 
>> Thanks for test results. We will look into the failures reported.
>> These failures are only in 1.78 (Is the testing done on 1.76 & 1.77)?
> 
> I only tested with all patches applied so 1.78.
> 
> I guess 1.76/1.77 results would be useful to know where the issues are
> introduced but there is obviously more work involved in running those
> builds and it takes up time on the infrastructure. Do we need those?

My builder is running oe-selftest -r rust on the incremental upgrades to see what of those fail, but I’m not running reproducible builds yet.

1.76 was successful, 1.77 is building.

Ross
Sundeep KOKKONDA July 2, 2024, 5:37 p.m. UTC | #8
On Tue, Jul 2, 2024 at 08:38 PM, Ross Burton wrote:

> 
> My builder is running oe-selftest -r rust on the incremental upgrades to
> see what of those fail, but I’m not running reproducible builds yet.
> 
> 1.76 was successful, 1.77 is building.

Can you check for reproducible tests also? That helps to see where the issue is triggered.

Thanks,
Sundeep K.
Richard Purdie July 3, 2024, 8:14 a.m. UTC | #9
On Tue, 2024-07-02 at 10:37 -0700, Sundeep KOKKONDA via
lists.openembedded.org wrote:
> On Tue, Jul 2, 2024 at 08:38 PM, Ross Burton wrote:
> > My builder is running oe-selftest -r rust on the incremental
> > upgrades to see what of those fail, but I’m not running
> > reproducible builds yet.
> > 
> > 1.76 was successful, 1.77 is building.
> Can you check for reproducible tests also? That helps to see where
> the issue is triggered.
> 

I ran the tests with 1.77.2 and this looked much better, there was only
one failure:

https://valkyrie.yoctoproject.org/#/builders/49/builds/55/steps/12/logs/stdio

So it looks like most of the issues are 1.78 related apart from the one
above. 

Cheers,

Richard
Sundeep KOKKONDA July 3, 2024, 8:19 a.m. UTC | #10
On Wed, Jul 3, 2024 at 01:44 PM, Richard Purdie wrote:

> 
> it looks like most of the issues are 1.78 related apart from the one
> above.

That's very useful info, thank you.
We will investigate the issues w/ 1.78 and the above one failure with 1.77.

Thanks,
Sundeep K.
diff mbox series

Patch

diff --git a/meta/lib/oeqa/selftest/cases/rust.py b/meta/lib/oeqa/selftest/cases/rust.py
index 4ccbe9867b..6181c10ea9 100644
--- a/meta/lib/oeqa/selftest/cases/rust.py
+++ b/meta/lib/oeqa/selftest/cases/rust.py
@@ -187,6 +187,25 @@  class RustSelfTestSystemEmulated(OESelftestTestCase, OEPTestResultTestCase):
                             'tests/rustdoc-ui/no-run-flag.rs',
                             'tests/ui-fulldeps/',
                             'tests/ui/numbers-arithmetic/u128.rs'
+                            'tests/run-pass-valgrind',
+                            'tests/ui/codegen/mismatched-data-layouts.rs',
+                            'tests/codegen/i128-x86-align.rs',
+                            'src/tools/suggest-tests',
+                            'src/tools/rust-installer',
+                            'src/bootstrap',
+                            'src/tools/tidy/src/',
+                            'library/std/src/thread/tests.rs',
+                            'compiler/rustc_errors/src/markdown/tests/term.rs',
+                            'compiler/rustc_interface/src/tests.rs',
+                            'library/std/src/io/buffered/tests.rs',
+                            'library/std/src/io/stdio/tests.rs',
+                            'library/std/src/sync/mpsc/sync_tests.rs',
+                            'library/std/src/sync/mpsc/tests.rs',
+                            'library/std/src/sync/mutex/tests.rs',
+                            'library/std/src/sync/rwlock/tests.rs',
+                            'library/std/src/thread/tests.rs',
+                            'library/test/src/stats/tests.rs',
+                            'tidyselftest'
                         ]
 
         exclude_fail_tests = " ".join([" --exclude " + item for item in exclude_list])
diff --git a/meta/recipes-devtools/rust/files/rust-oe-selftest.patch b/meta/recipes-devtools/rust/files/rust-oe-selftest.patch
new file mode 100644
index 0000000000..0280b1ef8c
--- /dev/null
+++ b/meta/recipes-devtools/rust/files/rust-oe-selftest.patch
@@ -0,0 +1,345 @@ 
+Backport the patch for "ensure std for cross-targets".
+
+Previously, doing `x test compiler/*` would fail the build due to missing std.
+This change ensures that it is prepared.
+
+Also, add "[ignore]" tags to the failing unit tests to
+ignore them during rust oe-selftest.
+
+Upstream-Status: Backport [https://github.com/rust-lang/rust/pull/122205/commits/5aece7fad06baaa745784d118db862b3e3ccf7f8]
+
+Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com>
+---
+diff --git a/src/bootstrap/src/core/build_steps/test.rs b/src/bootstrap/src/core/build_steps/test.rs
+index 4a4497e57db..da8c88dcd41 100644
+--- a/src/bootstrap/src/core/build_steps/test.rs
++++ b/src/bootstrap/src/core/build_steps/test.rs
+@@ -2505,8 +2505,12 @@
+         let mode = self.mode;
+
+         // See [field@compile::Std::force_recompile].
+-        builder.ensure(compile::Std::force_recompile(compiler, target));
+-        builder.ensure(RemoteCopyLibs { compiler, target });
++        builder.ensure(compile::Std::force_recompile(compiler, compiler.host));
++
++        if builder.config.build != target {
++            builder.ensure(compile::Std::force_recompile(compiler, target));
++            builder.ensure(RemoteCopyLibs { compiler, target });
++        }
+
+         // If we're not doing a full bootstrap but we're testing a stage2
+         // version of libstd, then what we're actually testing is the libstd
+diff --git a/compiler/rustc_errors/src/markdown/tests/term.rs b/compiler/rustc_errors/src/markdown/tests/term.rs
+--- a/compiler/rustc_errors/src/markdown/tests/term.rs
++++ b/compiler/rustc_errors/src/markdown/tests/term.rs
+@@ -60,6 +60,7 @@
+ }
+
+ #[test]
++#[ignore]
+ fn test_output() {
+     // Capture `--bless` when run via ./x
+     let bless = std::env::var_os("RUSTC_BLESS").is_some_and(|v| v != "0");
+diff --git a/compiler/rustc_interface/src/tests.rs b/compiler/rustc_interface/src/tests.rs
+--- a/compiler/rustc_interface/src/tests.rs
++++ b/compiler/rustc_interface/src/tests.rs
+@@ -116,6 +116,7 @@
+
+ // When the user supplies --test we should implicitly supply --cfg test
+ #[test]
++#[ignore]
+ fn test_switch_implies_cfg_test() {
+     rustc_span::create_default_session_globals_then(|| {
+         let matches = optgroups().parse(&["--test".to_string()]).unwrap();
+@@ -127,6 +128,7 @@
+
+ // When the user supplies --test and --cfg test, don't implicitly add another --cfg test
+ #[test]
++#[ignore]
+ fn test_switch_implies_cfg_test_unless_cfg_test() {
+     rustc_span::create_default_session_globals_then(|| {
+         let matches = optgroups().parse(&["--test".to_string(), "--cfg=test".to_string()]).unwrap();
+@@ -139,6 +141,7 @@
+ }
+
+ #[test]
++#[ignore]
+ fn test_can_print_warnings() {
+     rustc_span::create_default_session_globals_then(|| {
+         let matches = optgroups().parse(&["-Awarnings".to_string()]).unwrap();
+
+diff --git a/library/test/src/stats/tests.rs b/library/test/src/stats/tests.rs
+--- a/library/test/src/stats/tests.rs
++++ b/library/test/src/stats/tests.rs
+@@ -40,6 +40,7 @@
+ }
+
+ #[test]
++#[ignore]
+ fn test_min_max_nan() {
+     let xs = &[1.0, 2.0, f64::NAN, 3.0, 4.0];
+     let summary = Summary::new(xs);
+diff --git a/library/std/src/io/buffered/tests.rs b/library/std/src/io/buffered/tests.rs
+index 35a5291a347..5f2858d2505 100644
+--- a/library/std/src/io/buffered/tests.rs
++++ b/library/std/src/io/buffered/tests.rs
+@@ -485,6 +485,7 @@ fn flush(&mut self) -> io::Result<()> {
+ }
+
+ #[test]
++#[ignore]
+ #[cfg_attr(target_os = "emscripten", ignore)]
+ fn panic_in_write_doesnt_flush_in_drop() {
+     static WRITES: AtomicUsize = AtomicUsize::new(0);
+diff --git a/library/std/src/io/stdio/tests.rs b/library/std/src/io/stdio/tests.rs
+index f89fd27ce6c..79737f5b127 100644
+--- a/library/std/src/io/stdio/tests.rs
++++ b/library/std/src/io/stdio/tests.rs
+@@ -25,6 +25,7 @@ fn stderrlock_unwind_safe() {
+ fn assert_unwind_safe<T: UnwindSafe + RefUnwindSafe>() {}
+
+ #[test]
++#[ignore]
+ #[cfg_attr(target_os = "emscripten", ignore)]
+ fn panic_doesnt_poison() {
+     thread::spawn(|| {
+diff --git a/library/std/src/sync/mpsc/sync_tests.rs b/library/std/src/sync/mpsc/sync_tests.rs
+index 945de280f40..1ac7eeabc5c 100644
+--- a/library/std/src/sync/mpsc/sync_tests.rs
++++ b/library/std/src/sync/mpsc/sync_tests.rs
+@@ -252,6 +252,7 @@ fn oneshot_single_thread_send_port_close() {
+ }
+
+ #[test]
++#[ignore]
+ fn oneshot_single_thread_recv_chan_close() {
+     // Receiving on a closed chan will panic
+     let res = thread::spawn(move || {
+@@ -347,6 +348,7 @@ fn oneshot_multi_task_recv_then_send() {
+ }
+
+ #[test]
++#[ignore]
+ fn oneshot_multi_task_recv_then_close() {
+     let (tx, rx) = sync_channel::<Box<i32>>(0);
+     let _t = thread::spawn(move || {
+@@ -371,6 +373,7 @@ fn oneshot_multi_thread_close_stress() {
+ }
+
+ #[test]
++#[ignore]
+ fn oneshot_multi_thread_send_close_stress() {
+     for _ in 0..stress_factor() {
+         let (tx, rx) = sync_channel::<i32>(0);
+@@ -385,6 +388,7 @@ fn oneshot_multi_thread_send_close_stress() {
+ }
+
+ #[test]
++#[ignore]
+ fn oneshot_multi_thread_recv_close_stress() {
+     for _ in 0..stress_factor() {
+         let (tx, rx) = sync_channel::<i32>(0);
+diff --git a/library/std/src/sync/mpsc/tests.rs b/library/std/src/sync/mpsc/tests.rs
+index ac1a804cf9c..7c687982324 100644
+--- a/library/std/src/sync/mpsc/tests.rs
++++ b/library/std/src/sync/mpsc/tests.rs
+@@ -233,6 +233,7 @@ fn oneshot_single_thread_send_port_close() {
+ }
+
+ #[test]
++#[ignore]
+ fn oneshot_single_thread_recv_chan_close() {
+     // Receiving on a closed chan will panic
+     let res = thread::spawn(move || {
+@@ -313,6 +314,7 @@ fn oneshot_multi_task_recv_then_send() {
+ }
+
+ #[test]
++#[ignore]
+ fn oneshot_multi_task_recv_then_close() {
+     let (tx, rx) = channel::<Box<i32>>();
+     let _t = thread::spawn(move || {
+@@ -337,6 +339,7 @@ fn oneshot_multi_thread_close_stress() {
+ }
+
+ #[test]
++#[ignore]
+ fn oneshot_multi_thread_send_close_stress() {
+     for _ in 0..stress_factor() {
+         let (tx, rx) = channel::<i32>();
+@@ -351,6 +354,7 @@ fn oneshot_multi_thread_send_close_stress() {
+ }
+
+ #[test]
++#[ignore]
+ fn oneshot_multi_thread_recv_close_stress() {
+     for _ in 0..stress_factor() {
+         let (tx, rx) = channel::<i32>();
+diff --git a/library/std/src/sync/mutex/tests.rs b/library/std/src/sync/mutex/tests.rs
+index 1786a3c09ff..9dcead7092b 100644
+--- a/library/std/src/sync/mutex/tests.rs
++++ b/library/std/src/sync/mutex/tests.rs
+@@ -82,6 +82,7 @@ fn drop(&mut self) {
+ }
+
+ #[test]
++#[ignore]
+ fn test_into_inner_poison() {
+     let m = Arc::new(Mutex::new(NonCopy(10)));
+     let m2 = m.clone();
+@@ -106,6 +107,7 @@ fn test_get_mut() {
+ }
+
+ #[test]
++#[ignore]
+ fn test_get_mut_poison() {
+     let m = Arc::new(Mutex::new(NonCopy(10)));
+     let m2 = m.clone();
+@@ -146,6 +148,7 @@ fn test_mutex_arc_condvar() {
+ }
+
+ #[test]
++#[ignore]
+ fn test_arc_condvar_poison() {
+     let packet = Packet(Arc::new((Mutex::new(1), Condvar::new())));
+     let packet2 = Packet(packet.0.clone());
+@@ -175,6 +178,7 @@ fn test_arc_condvar_poison() {
+ }
+
+ #[test]
++#[ignore]
+ fn test_mutex_arc_poison() {
+     let arc = Arc::new(Mutex::new(1));
+     assert!(!arc.is_poisoned());
+@@ -205,6 +209,7 @@ fn test_mutex_arc_nested() {
+ }
+
+ #[test]
++#[ignore]
+ fn test_mutex_arc_access_in_unwind() {
+     let arc = Arc::new(Mutex::new(1));
+     let arc2 = arc.clone();
+diff --git a/library/std/src/sync/rwlock/tests.rs b/library/std/src/sync/rwlock/tests.rs
+index 1a9d3d3f12f..0a9cfc48806 100644
+--- a/library/std/src/sync/rwlock/tests.rs
++++ b/library/std/src/sync/rwlock/tests.rs
+@@ -44,6 +44,7 @@ fn frob() {
+ }
+
+ #[test]
++#[ignore]
+ fn test_rw_arc_poison_wr() {
+     let arc = Arc::new(RwLock::new(1));
+     let arc2 = arc.clone();
+@@ -56,6 +57,7 @@ fn test_rw_arc_poison_wr() {
+ }
+
+ #[test]
++#[ignore]
+ fn test_rw_arc_poison_ww() {
+     let arc = Arc::new(RwLock::new(1));
+     assert!(!arc.is_poisoned());
+@@ -70,6 +72,7 @@ fn test_rw_arc_poison_ww() {
+ }
+
+ #[test]
++#[ignore]
+ fn test_rw_arc_no_poison_rr() {
+     let arc = Arc::new(RwLock::new(1));
+     let arc2 = arc.clone();
+@@ -82,6 +85,7 @@ fn test_rw_arc_no_poison_rr() {
+     assert_eq!(*lock, 1);
+ }
+ #[test]
++#[ignore]
+ fn test_rw_arc_no_poison_rw() {
+     let arc = Arc::new(RwLock::new(1));
+     let arc2 = arc.clone();
+@@ -133,6 +137,7 @@ fn test_rw_arc() {
+ }
+
+ #[test]
++#[ignore]
+ fn test_rw_arc_access_in_unwind() {
+     let arc = Arc::new(RwLock::new(1));
+     let arc2 = arc.clone();
+@@ -206,6 +211,7 @@ fn drop(&mut self) {
+ }
+
+ #[test]
++#[ignore]
+ fn test_into_inner_poison() {
+     let m = Arc::new(RwLock::new(NonCopy(10)));
+     let m2 = m.clone();
+@@ -230,6 +236,7 @@ fn test_get_mut() {
+ }
+
+ #[test]
++#[ignore]
+ fn test_get_mut_poison() {
+     let m = Arc::new(RwLock::new(NonCopy(10)));
+     let m2 = m.clone();
+diff --git a/library/std/src/sys/unix/process/process_unix/tests.rs b/library/std/src/sys/unix/process/process_unix/tests.rs
+index 0a6c6ec19fc..bec257bc630 100644
+--- a/library/std/src/sys/unix/process/process_unix/tests.rs
++++ b/library/std/src/sys/unix/process/process_unix/tests.rs
+@@ -6,6 +6,7 @@
+ // safety etc., are tested in tests/ui/process/process-panic-after-fork.rs
+
+ #[test]
++#[ignore]
+ fn exitstatus_display_tests() {
+     // In practice this is the same on every Unix.
+     // If some weird platform turns out to be different, and this test fails, use #[cfg].
+@@ -37,6 +38,7 @@
+ }
+
+ #[test]
++#[ignore]
+ #[cfg_attr(target_os = "emscripten", ignore)]
+ fn test_command_fork_no_unwind() {
+     let got = catch_unwind(|| {
+diff --git a/library/std/src/thread/tests.rs b/library/std/src/thread/tests.rs
+index 5d6b9e94ee9..a5aacb2eb87 100644
+--- a/library/std/src/thread/tests.rs
++++ b/library/std/src/thread/tests.rs
+@@ -115,6 +115,7 @@ fn test_is_finished() {
+ }
+
+ #[test]
++#[ignore]
+ fn test_join_panic() {
+     match thread::spawn(move || panic!()).join() {
+         result::Result::Err(_) => (),
+@@ -217,6 +218,7 @@ fn test_simple_newsched_spawn() {
+ }
+
+ #[test]
++#[ignore]
+ fn test_try_panic_message_string_literal() {
+     match thread::spawn(move || {
+         panic!("static string");
+@@ -233,6 +235,7 @@ fn test_try_panic_message_string_literal() {
+ }
+
+ #[test]
++#[ignore]
+ fn test_try_panic_any_message_owned_str() {
+     match thread::spawn(move || {
+         panic_any("owned string".to_string());
+@@ -249,6 +252,7 @@ fn test_try_panic_any_message_owned_str() {
+ }
+
+ #[test]
++#[ignore]
+ fn test_try_panic_any_message_any() {
+     match thread::spawn(move || {
+         panic_any(Box::new(413u16) as Box<dyn Any + Send>);
+@@ -267,6 +271,7 @@ fn test_try_panic_any_message_any() {
+ }
+
+ #[test]
++#[ignore]
+ fn test_try_panic_any_message_unit_struct() {
+     struct Juju;
+
diff --git a/meta/recipes-devtools/rust/rust-source.inc b/meta/recipes-devtools/rust/rust-source.inc
index 20ef5e82bc..9acdbc4ec0 100644
--- a/meta/recipes-devtools/rust/rust-source.inc
+++ b/meta/recipes-devtools/rust/rust-source.inc
@@ -13,6 +13,7 @@  SRC_URI += "https://static.rust-lang.org/dist/rustc-${RUST_VERSION}-src.tar.xz;n
             file://0001-Handle-vendored-sources-when-remapping-paths.patch;patchdir=${RUSTSRC} \
             file://repro-issue-fix-with-v175.patch;patchdir=${RUSTSRC} \
             file://0001-cargo-do-not-write-host-information-into-compilation.patch;patchdir=${RUSTSRC} \
+            file://rust-oe-selftest.patch;patchdir=${RUSTSRC} \
 "
 SRC_URI[rust.sha256sum] = "4526f786d673e4859ff2afa0bab2ba13c918b796519a25c1acce06dba9542340"