Implementation of sync_nonpoison and nonpoison_mutex by Aandreba · Pull Request #134663 · rust-lang/rust (original) (raw)

#19 exporting to docker image format
#19 sending tarball 20.3s done
#19 DONE 28.1s
##[endgroup]
Setting extra environment values for docker:  --env ENABLE_GCC_CODEGEN=1 --env GCC_EXEC_PREFIX=/usr/lib/gcc/
[CI_JOB_NAME=x86_64-gnu-llvm-18]
[CI_JOB_NAME=x86_64-gnu-llvm-18]
debug: `DISABLE_CI_RUSTC_IF_INCOMPATIBLE` configured.
---
sccache: Listening on address 127.0.0.1:4226
##[group]Configure the build
configure: processing command line
configure: 
configure: build.configure-args := ['--build=x86_64-unknown-linux-gnu', '--llvm-root=/usr/lib/llvm-18', '--enable-llvm-link-shared', '--set', 'rust.randomize-layout=true', '--set', 'rust.thin-lto-import-instr-limit=10', '--set', 'build.print-step-timings', '--enable-verbose-tests', '--set', 'build.metrics', '--enable-verbose-configure', '--enable-sccache', '--disable-manage-submodules', '--enable-locked-deps', '--enable-cargo-native-static', '--set', 'rust.codegen-units-std=1', '--set', 'dist.compression-profile=balanced', '--dist-compression-formats=xz', '--set', 'rust.lld=false', '--disable-dist-src', '--release-channel=nightly', '--enable-debug-assertions', '--enable-overflow-checks', '--enable-llvm-assertions', '--set', 'rust.verify-llvm-ir', '--set', 'rust.codegen-backends=llvm,cranelift,gcc', '--set', 'llvm.static-libstdcpp', '--enable-new-symbol-mangling']
configure: build.build          := x86_64-unknown-linux-gnu
configure: target.x86_64-unknown-linux-gnu.llvm-config := /usr/lib/llvm-18/bin/llvm-config
configure: llvm.link-shared     := True
configure: rust.randomize-layout := True
configure: rust.thin-lto-import-instr-limit := 10
---
  Number of decisions:   4447
  longest path:          1159 (code:    152)
  longest backtrack:       66 (code:    428)
Shared 86733 out of 152951 states by creating 14756 new states, saving 71977
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/expmed.cc: In function ‘rtx_def* extract_bit_field_1(rtx, poly_uint64, poly_uint64, int, rtx, machine_mode, machine_mode, bool, bool, rtx_def**)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/expmed.cc:1864:45: warning: ‘*(unsigned int*)((char*)&imode + offsetof(scalar_int_mode, scalar_int_mode::m_mode))’ may be used uninitialized [-Wmaybe-uninitialized]
 1864 |       rtx sub = extract_bit_field_as_subreg (mode1, op0, imode,
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
 1865 |                                              bitsize, bitnum);
      |                                              ~~~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/expmed.cc:1824:19: note: ‘*(unsigned int*)((char*)&imode + offsetof(scalar_int_mode, scalar_int_mode::m_mode))’ was declared here
 1824 |   scalar_int_mode imode;
      |                   ^~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/gimple-range-gori.cc: In member function ‘void range_def_chain::dump(FILE*, basic_block, const char*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/gimple-range-gori.cc:319:19: warning: format not a string literal and no format arguments [-Wformat-security]
  319 |           fprintf (f, prefix);
      |           ~~~~~~~~^~~~~~~~~~~
---
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/gcc.cc:7930:9: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 7930 |   write (fd, "\n\n", 2);
      |   ~~~~~~^~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/gcc.cc: In member function ‘void driver::final_actions() const’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/gcc.cc:9307:13: warning: ignoring return value of ‘int truncate(const char*, __off_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 9307 |     truncate(totruncate_file, 0);
      |     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/lto-wrapper.cc: In function ‘bool find_and_merge_options(int, off_t, const char*, vec<cl_decoded_option>, bool, vec<cl_decoded_option>*, const char*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/lto-wrapper.cc:1165:8: warning: ignoring return value of ‘ssize_t read(int, void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 1165 |   read (fd, data, length);
      |   ~~~~~^~~~~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/lto/lto-common.cc: In function ‘void lto_resolution_read(splay_tree, FILE*, lto_file*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/lto/lto-common.cc:2091:10: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 2091 |   fscanf (resolution, " ");   /* Read white space.  */
      |   ~~~~~~~^~~~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/lto/lto-common.cc:2093:9: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 2093 |   fread (obj_name, sizeof (char), name_len, resolution);
      |   ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/lto/lto-common.cc:2113:10: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 2113 |   fscanf (resolution, "%u", &num_symbols);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/gcc/jit/jit-recording.cc:32:
---
Applying io_quotes_use            to linux/blkzoned.h
Applying io_quotes_use            to linux/ipmi.h
Applying io_quotes_use            to linux/psp-dbc.h
Applying io_quotes_use            to linux/bt-bmc.h
Applying io_quotes_use            to linux/tps6594_pfsm.h
Applying io_quotes_use            to linux/cxl_mem.h
Applying io_quotes_use            to linux/wmi.h
Applying io_quotes_use            to linux/auto_fs.h
Applying io_quotes_use            to linux/mmtimer.h
Applying io_quotes_use            to linux/f2fs.h
Applying io_quotes_use            to linux/vhost.h
---
Applying machine_name             to x86_64-linux-gnu/bits/unistd_ext.h
Applying io_quotes_use            to x86_64-linux-gnu/asm/mtrr.h
Applying io_quotes_use            to x86_64-linux-gnu/asm/amd_hsmp.h
Applying machine_name             to openssl/e_os2.h
Applying io_quotes_use            to drm/xe_drm.h
Applying io_quotes_use            to drm/radeon_drm.h
Applying io_quotes_use            to drm/panfrost_drm.h
Applying io_quotes_use            to drm/etnaviv_drm.h
Applying io_quotes_use            to drm/lima_drm.h
Applying io_quotes_use            to drm/qaic_accel.h
Applying io_quotes_use            to drm/vc4_drm.h
Applying io_quotes_use            to drm/i915_drm.h
Applying io_quotes_use            to drm/omap_drm.h
Applying io_quotes_use            to drm/pvr_drm.h
Applying io_quotes_use            to drm/amdgpu_drm.h
Applying io_quotes_use            to drm/vgem_drm.h
Applying io_quotes_use            to drm/msm_drm.h
Applying io_quotes_use            to drm/v3d_drm.h
Applying io_quotes_use            to drm/exynos_drm.h
Applying io_quotes_use            to drm/nouveau_drm.h
Applying io_quotes_use            to drm/drm.h
Applying io_quotes_use            to drm/habanalabs_accel.h
Applying io_quotes_use            to drm/tegra_drm.h
Applying io_quotes_use            to rdma/rdma_user_ioctl.h
cc1: note: self-tests are not enabled in this build
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/c++tools/server.cc: In function ‘void server(bool, int, module_resolver*)’:
/checkout/obj/build/x86_64-unknown-linux-gnu/gcc/src/c++tools/server.cc:620:10: warning: ignoring return value of ‘int pipe(int*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
---
8 note: future is not `Send` as this value is used across an await
9   --> $DIR/issue-64130-non-send-future-diags.rs:17:11
10    |

11 LL |     let g = x.lock().unwrap();
-    |         - has type `MutexGuard<'_, u32>` which is not `Send`
+    |         - has type `std::sync::MutexGuard<'_, u32>` which is not `Send`
13 LL |     baz().await;
14    |           ^^^^^ await occurs here, with `g` maybe used later
15 note: required by a bound in `is_send`


The actual stderr differed from the expected stderr.
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args async-await/issue-64130-non-send-future-diags.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/async-await/issue-64130-non-send-future-diags.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/async-await/issue-64130-non-send-future-diags" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--edition=2018"
stdout: none
--- stderr -------------------------------
error: future cannot be sent between threads safely
##[error]  --> /checkout/tests/ui/async-await/issue-64130-non-send-future-diags.rs:23:13
   |
LL |     is_send(foo());
   |             ^^^^^ future returned by `foo` is not `Send`
   |
   = help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `std::sync::MutexGuard<'_, u32>`
note: future is not `Send` as this value is used across an await
  --> /checkout/tests/ui/async-await/issue-64130-non-send-future-diags.rs:17:11
   |
LL |     let g = x.lock().unwrap();
   |         - has type `std::sync::MutexGuard<'_, u32>` which is not `Send`
LL |     baz().await;
   |           ^^^^^ await occurs here, with `g` maybe used later
note: required by a bound in `is_send`
  --> /checkout/tests/ui/async-await/issue-64130-non-send-future-diags.rs:9:15
   |
LL | fn is_send<T: Send>(t: T) { }
   |               ^^^^ required by this bound in `is_send`

error: aborting due to 1 previous error
------------------------------------------


---- [ui] tests/ui/async-await/issue-71137.rs stdout ----
Saved the actual stderr to "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/async-await/issue-71137/issue-71137.stderr"
diff of stderr:

4 LL |   fake_spawn(wrong_mutex());
5    |              ^^^^^^^^^^^^^ future returned by `wrong_mutex` is not `Send`
6    |
-    = help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `MutexGuard<'_, i32>`
+    = help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `std::sync::MutexGuard<'_, i32>`
8 note: future is not `Send` as this value is used across an await
9   --> $DIR/issue-71137.rs:14:26
10    |

11 LL |     let mut guard = m.lock().unwrap();
-    |         --------- has type `MutexGuard<'_, i32>` which is not `Send`
+    |         --------- has type `std::sync::MutexGuard<'_, i32>` which is not `Send`
13 LL |     (async { "right"; }).await;
14    |                          ^^^^^ await occurs here, with `mut guard` maybe used later
15 note: required by a bound in `fake_spawn`


The actual stderr differed from the expected stderr.
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args async-await/issue-71137.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/async-await/issue-71137.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/async-await/issue-71137" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--edition=2018"
stdout: none
--- stderr -------------------------------
error: future cannot be sent between threads safely
##[error]  --> /checkout/tests/ui/async-await/issue-71137.rs:22:14
   |
LL |   fake_spawn(wrong_mutex()); //~ Error future cannot be sent between threads safely
   |              ^^^^^^^^^^^^^ future returned by `wrong_mutex` is not `Send`
   |
   = help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `std::sync::MutexGuard<'_, i32>`
note: future is not `Send` as this value is used across an await
  --> /checkout/tests/ui/async-await/issue-71137.rs:14:26
   |
LL |     let mut guard = m.lock().unwrap();
   |         --------- has type `std::sync::MutexGuard<'_, i32>` which is not `Send`
LL |     (async { "right"; }).await;
   |                          ^^^^^ await occurs here, with `mut guard` maybe used later
note: required by a bound in `fake_spawn`
  --> /checkout/tests/ui/async-await/issue-71137.rs:8:27
   |
LL | fn fake_spawn<F: Future + Send + 'static>(f: F) { }
   |                           ^^^^ required by this bound in `fake_spawn`

error: aborting due to 1 previous error
------------------------------------------


---
- error[E0277]: `MutexGuard<'_, ()>` cannot be sent between threads safely
+ error[E0277]: `std::sync::MutexGuard<'_, ()>` cannot be sent between threads safely
2   --> $DIR/issue-67893.rs:9:7
3    |
4 LL |     g(issue_67893::run())

-    |     - ^^^^^^^^^^^^^^^^^^ `MutexGuard<'_, ()>` cannot be sent between threads safely
+    |     - ^^^^^^^^^^^^^^^^^^ `std::sync::MutexGuard<'_, ()>` cannot be sent between threads safely
6    |     |
7    |     required by a bound introduced by this call
8    |

11 LL | pub async fn run() {
---
To only update this specific test, also pass `--test-args async-await/issues/issue-67893.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/async-await/issues/issue-67893.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/async-await/issues/issue-67893" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/async-await/issues/issue-67893/auxiliary" "--edition=2018"
stdout: none
--- stderr -------------------------------
error[E0277]: `std::sync::MutexGuard<'_, ()>` cannot be sent between threads safely
##[error]  --> /checkout/tests/ui/async-await/issues/issue-67893.rs:9:7
   |
LL |     g(issue_67893::run())
   |     - ^^^^^^^^^^^^^^^^^^ `std::sync::MutexGuard<'_, ()>` cannot be sent between threads safely
   |     |
   |     required by a bound introduced by this call
   |
  ::: /checkout/tests/ui/async-await/issues/auxiliary/issue_67893.rs:9:1
   |
---
  --> /checkout/tests/ui/async-await/issues/auxiliary/issue_67893.rs:9:20
   |
LL |   pub async fn run() {
   |  ____________________^
LL | |     let x: Arc<Mutex<()>> = make_arc();
LL | |     f(*x.lock().unwrap()).await;
LL | | }
   | |_^
note: required by a bound in `g`
  --> /checkout/tests/ui/async-await/issues/issue-67893.rs:6:14
   |
LL | fn g(_: impl Send) {}
   |              ^^^^ required by this bound in `g`

error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0277`.
------------------------------------------
---
To only update this specific test, also pass `--test-args issues/issue-54062.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/issues/issue-54062.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/issues/issue-54062" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers"
stdout: none
--- stderr -------------------------------
error[E0616]: field `inner` of struct `std::sync::Mutex` is private
##[error]  --> /checkout/tests/ui/issues/issue-54062.rs:10:24
   |
---
---- [ui] tests/ui/lint/must_not_suspend/mutex.rs stdout ----
Saved the actual stderr to "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/lint/must_not_suspend/mutex/mutex.stderr"
diff of stderr:

- error: `MutexGuard` held across a suspend point, but should not be
+ error: `std::sync::MutexGuard` held across a suspend point, but should not be
2   --> $DIR/mutex.rs:8:9
3    |
4 LL |     let _guard = m.lock().unwrap();


The actual stderr differed from the expected stderr.
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args lint/must_not_suspend/mutex.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/lint/must_not_suspend/mutex.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/lint/must_not_suspend/mutex" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--edition=2018"
stdout: none
--- stderr -------------------------------
error: `std::sync::MutexGuard` held across a suspend point, but should not be
##[error]  --> /checkout/tests/ui/lint/must_not_suspend/mutex.rs:8:9
   |
LL |     let _guard = m.lock().unwrap(); //~ ERROR `MutexGuard` held across
   |         ^^^^^^
LL |     other().await;
   |             ----- the value is held across this suspend point
   |
note: holding a MutexGuard across suspend points can cause deadlocks, delays, and cause Futures to not implement `Send`
  --> /checkout/tests/ui/lint/must_not_suspend/mutex.rs:8:9
   |
LL |     let _guard = m.lock().unwrap(); //~ ERROR `MutexGuard` held across
   |         ^^^^^^
help: consider using a block (`{ ... }`) to shrink the value's scope, ending before the suspend point
  --> /checkout/tests/ui/lint/must_not_suspend/mutex.rs:8:9
   |
LL |     let _guard = m.lock().unwrap(); //~ ERROR `MutexGuard` held across
   |         ^^^^^^
note: the lint level is defined here
  --> /checkout/tests/ui/lint/must_not_suspend/mutex.rs:3:9
   |
LL | #![deny(must_not_suspend)]
   |         ^^^^^^^^^^^^^^^^

error: aborting due to 1 previous error
------------------------------------------


---- [ui] tests/ui/suggestions/inner_type.rs stdout ----
Saved the actual stderr to "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/suggestions/inner_type/inner_type.stderr"
diff of stderr:

30 LL |     other_item.borrow_mut().some_mutable_method();
31    |               +++++++++++++
32 
- error[E0599]: no method named `method` found for struct `Mutex` in the current scope
+ error[E0599]: no method named `method` found for struct `std::sync::Mutex` in the current scope
34   --> $DIR/inner_type.rs:27:18
---
To only update this specific test, also pass `--test-args suggestions/inner_type.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/suggestions/inner_type.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/suggestions/inner_type" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--edition=2021"
stdout: none
--- stderr -------------------------------
error[E0599]: no method named `method` found for struct `RefCell` in the current scope
##[error]  --> /checkout/tests/ui/suggestions/inner_type.rs:17:16
   |
LL |     other_item.method();
   |                ^^^^^^ method not found in `RefCell<Struct<u32>>`
   |
note: the method `method` exists on the type `Struct<u32>`
  --> /checkout/tests/ui/suggestions/inner_type.rs:9:5
   |
LL |     pub fn method(&self) {}
   |     ^^^^^^^^^^^^^^^^^^^^
help: use `.borrow()` to borrow the `Struct<u32>`, panicking if a mutable borrow exists
   |
LL |     other_item.borrow().method();
   |               +++++++++

error[E0599]: no method named `some_mutable_method` found for struct `RefCell` in the current scope
##[error]  --> /checkout/tests/ui/suggestions/inner_type.rs:21:16
   |
LL |     other_item.some_mutable_method();
   |                ^^^^^^^^^^^^^^^^^^^ method not found in `RefCell<Struct<u32>>`
   |
note: the method `some_mutable_method` exists on the type `Struct<u32>`
  --> /checkout/tests/ui/suggestions/inner_type.rs:11:5
   |
LL |     pub fn some_mutable_method(&mut self) {}
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
help: use `.borrow_mut()` to mutably borrow the `Struct<u32>`, panicking if any borrows exist
   |
LL |     other_item.borrow_mut().some_mutable_method();
   |               +++++++++++++

error[E0599]: no method named `method` found for struct `std::sync::Mutex` in the current scope
##[error]  --> /checkout/tests/ui/suggestions/inner_type.rs:27:18
   |
LL |     another_item.method();
   |                  ^^^^^^ method not found in `Mutex<Struct<u32>>`
   |
note: the method `method` exists on the type `Struct<u32>`
  --> /checkout/tests/ui/suggestions/inner_type.rs:9:5
   |
LL |     pub fn method(&self) {}
   |     ^^^^^^^^^^^^^^^^^^^^
help: use `.lock().unwrap()` to borrow the `Struct<u32>`, blocking the current thread until it can be acquired
   |
LL |     another_item.lock().unwrap().method();
   |                 ++++++++++++++++

error[E0599]: no method named `method` found for struct `RwLock` in the current scope
##[error]  --> /checkout/tests/ui/suggestions/inner_type.rs:33:18
   |
LL |     another_item.method();
   |                  ^^^^^^ method not found in `RwLock<Struct<u32>>`
   |
note: the method `method` exists on the type `Struct<u32>`
  --> /checkout/tests/ui/suggestions/inner_type.rs:9:5
   |
LL |     pub fn method(&self) {}
   |     ^^^^^^^^^^^^^^^^^^^^
help: use `.read().unwrap()` to borrow the `Struct<u32>`, blocking the current thread until it can be acquired
   |
LL |     another_item.read().unwrap().method();
   |                 ++++++++++++++++

error[E0599]: no method named `some_mutable_method` found for struct `RwLock` in the current scope
##[error]  --> /checkout/tests/ui/suggestions/inner_type.rs:37:18
   |
LL |     another_item.some_mutable_method();
   |                  ^^^^^^^^^^^^^^^^^^^ method not found in `RwLock<Struct<u32>>`
   |
note: the method `some_mutable_method` exists on the type `Struct<u32>`
  --> /checkout/tests/ui/suggestions/inner_type.rs:11:5
   |
LL |     pub fn some_mutable_method(&mut self) {}
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
help: use `.write().unwrap()` to mutably borrow the `Struct<u32>`, blocking the current thread until it can be acquired
   |
LL |     another_item.write().unwrap().some_mutable_method();
   |                 +++++++++++++++++

error: aborting due to 5 previous errors

For more information about this error, try `rustc --explain E0599`.
---
Saved the actual stderr to "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/sync/mutexguard-sync/mutexguard-sync.stderr"
diff of stderr:

8    |
9    = help: the trait `Sync` is not implemented for `Cell<i32>`
10    = note: if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI32` instead
-    = note: required for `MutexGuard<'_, Cell<i32>>` to implement `Sync`
+    = note: required for `std::sync::MutexGuard<'_, Cell<i32>>` to implement `Sync`
12 note: required by a bound in `test_sync`
13   --> $DIR/mutexguard-sync.rs:5:17
14    |


The actual stderr differed from the expected stderr.
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args sync/mutexguard-sync.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/sync/mutexguard-sync.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/sync/mutexguard-sync" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers"
stdout: none
--- stderr -------------------------------
error[E0277]: `Cell<i32>` cannot be shared between threads safely
##[error]  --> /checkout/tests/ui/sync/mutexguard-sync.rs:11:15
   |
LL |     test_sync(guard);
   |     --------- ^^^^^ `Cell<i32>` cannot be shared between threads safely
   |     |
   |     required by a bound introduced by this call
   |
   = help: the trait `Sync` is not implemented for `Cell<i32>`
   = note: if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI32` instead
   = note: required for `std::sync::MutexGuard<'_, Cell<i32>>` to implement `Sync`
note: required by a bound in `test_sync`
  --> /checkout/tests/ui/sync/mutexguard-sync.rs:5:17
   |
LL | fn test_sync<T: Sync>(_t: T) {}
   |                 ^^^^ required by this bound in `test_sync`

error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0277`.
---

14 LL |     pub const fn new() -> std::sync::Mutex<dyn T> {}
15    |                           ^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
16    |
-    = help: within `Mutex<(dyn T + 'static)>`, the trait `Sized` is not implemented for `(dyn T + 'static)`
- note: required because it appears within the type `Mutex<(dyn T + 'static)>`
+    = help: within `std::sync::Mutex<(dyn T + 'static)>`, the trait `Sized` is not implemented for `(dyn T + 'static)`
+ note: required because it appears within the type `std::sync::Mutex<(dyn T + 'static)>`
19   --> $SRC_DIR/std/src/sync/poison/mutex.rs:LL:COL
20    = note: the return type of a function must have a statically known size
21 

27    |                  |
28    |                  implicitly returns `()` as its body has no tail or `return` expression
29    |
-    = note: expected struct `Mutex<(dyn T + 'static)>`
+    = note: expected struct `std::sync::Mutex<(dyn T + 'static)>`
31            found unit type `()`
32 
33 error: aborting due to 3 previous errors


The actual stderr differed from the expected stderr.
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args traits/const-traits/span-bug-issue-121418.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/traits/const-traits/span-bug-issue-121418.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/traits/const-traits/span-bug-issue-121418" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers"
stdout: none
--- stderr -------------------------------
error: inherent impls cannot be `const`
##[error]  --> /checkout/tests/ui/traits/const-traits/span-bug-issue-121418.rs:6:12
   |
LL | impl const dyn T {
   |      ----- ^^^^^ inherent impl for this type
   |      |
   |      `const` because of this
   |
   = note: only trait implementations may be annotated with `const`

error[E0277]: the size for values of type `(dyn T + 'static)` cannot be known at compilation time
##[error]  --> /checkout/tests/ui/traits/const-traits/span-bug-issue-121418.rs:8:27
   |
LL |     pub const fn new() -> std::sync::Mutex<dyn T> {}
   |                           ^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
   |
   = help: within `std::sync::Mutex<(dyn T + 'static)>`, the trait `Sized` is not implemented for `(dyn T + 'static)`
note: required because it appears within the type `std::sync::Mutex<(dyn T + 'static)>`
  --> /rustc/FAKE_PREFIX/library/std/src/sync/poison/mutex.rs:175:12
   = note: the return type of a function must have a statically known size

error[E0308]: mismatched types
##[error]  --> /checkout/tests/ui/traits/const-traits/span-bug-issue-121418.rs:8:27
   |
LL |     pub const fn new() -> std::sync::Mutex<dyn T> {}
   |                  ---      ^^^^^^^^^^^^^^^^^^^^^^^ expected `Mutex<dyn T>`, found `()`
   |                  |
   |                  implicitly returns `()` as its body has no tail or `return` expression
   |
   = note: expected struct `std::sync::Mutex<(dyn T + 'static)>`
           found unit type `()`

error: aborting due to 3 previous errors

Some errors have detailed explanations: E0277, E0308.
---
---- [ui] tests/ui/typeck/assign-non-lval-derefmut.rs stdout ----
Saved the actual stderr to "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/typeck/assign-non-lval-derefmut/assign-non-lval-derefmut.stderr"
diff of stderr:

11 LL |     *x.lock().unwrap() = 2;
12    |     +
13 
- error[E0368]: binary assignment operation `+=` cannot be applied to type `MutexGuard<'_, usize>`
+ error[E0368]: binary assignment operation `+=` cannot be applied to type `std::sync::MutexGuard<'_, usize>`
15   --> $DIR/assign-non-lval-derefmut.rs:7:5
16    |
17 LL |     x.lock().unwrap() += 1;

18    |     -----------------^^^^^
19    |     |
-    |     cannot use `+=` on type `MutexGuard<'_, usize>`
+    |     cannot use `+=` on type `std::sync::MutexGuard<'_, usize>`
21    |
- note: the foreign item type `MutexGuard<'_, usize>` doesn't implement `AddAssign<{integer}>`
+ note: the foreign item type `std::sync::MutexGuard<'_, usize>` doesn't implement `AddAssign<{integer}>`
23   --> $SRC_DIR/std/src/sync/poison/mutex.rs:LL:COL
24    |
25    = note: not implement `AddAssign<{integer}>`

36 LL |     y = 2;
37    |         ^ expected `MutexGuard<'_, usize>`, found integer
38    |
-    = note: expected struct `MutexGuard<'_, usize>`
+    = note: expected struct `std::sync::MutexGuard<'_, usize>`
40                 found type `{integer}`
41 help: consider dereferencing here to assign to the mutably borrowed value
42    |

43 LL |     *y = 2;
44    |     +
45 
- error[E0368]: binary assignment operation `+=` cannot be applied to type `MutexGuard<'_, usize>`
+ error[E0368]: binary assignment operation `+=` cannot be applied to type `std::sync::MutexGuard<'_, usize>`
47   --> $DIR/assign-non-lval-derefmut.rs:13:5
48    |
49 LL |     y += 1;

50    |     -^^^^^
51    |     |
-    |     cannot use `+=` on type `MutexGuard<'_, usize>`
+    |     cannot use `+=` on type `std::sync::MutexGuard<'_, usize>`
53    |
- note: the foreign item type `MutexGuard<'_, usize>` doesn't implement `AddAssign<{integer}>`
+ note: the foreign item type `std::sync::MutexGuard<'_, usize>` doesn't implement `AddAssign<{integer}>`
55   --> $SRC_DIR/std/src/sync/poison/mutex.rs:LL:COL
56    |
57    = note: not implement `AddAssign<{integer}>`


The actual stderr differed from the expected stderr.
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args typeck/assign-non-lval-derefmut.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/typeck/assign-non-lval-derefmut.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/typeck/assign-non-lval-derefmut" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers"
stdout: none
--- stderr -------------------------------
error[E0070]: invalid left-hand side of assignment
##[error]  --> /checkout/tests/ui/typeck/assign-non-lval-derefmut.rs:5:23
   |
LL |     x.lock().unwrap() = 2;
   |     ----------------- ^
   |     |
   |     cannot assign to this expression
   |
help: consider dereferencing here to assign to the mutably borrowed value
   |
LL |     *x.lock().unwrap() = 2;
   |     +

error[E0368]: binary assignment operation `+=` cannot be applied to type `std::sync::MutexGuard<'_, usize>`
##[error]  --> /checkout/tests/ui/typeck/assign-non-lval-derefmut.rs:7:5
   |
LL |     x.lock().unwrap() += 1;
   |     -----------------^^^^^
   |     |
   |     cannot use `+=` on type `std::sync::MutexGuard<'_, usize>`
   |
note: the foreign item type `std::sync::MutexGuard<'_, usize>` doesn't implement `AddAssign<{integer}>`
  --> /rustc/FAKE_PREFIX/library/std/src/sync/poison/mutex.rs:225:1
   |
   = note: not implement `AddAssign<{integer}>`
help: `+=` can be used on `usize` if you dereference the left-hand side
   |
LL |     *x.lock().unwrap() += 1;
   |     +

error[E0308]: mismatched types
##[error]  --> /checkout/tests/ui/typeck/assign-non-lval-derefmut.rs:11:9
   |
---
   = note: expected struct `std::sync::MutexGuard<'_, usize>`
                found type `{integer}`
help: consider dereferencing here to assign to the mutably borrowed value
   |
LL |     *y = 2;
   |     +

error[E0368]: binary assignment operation `+=` cannot be applied to type `std::sync::MutexGuard<'_, usize>`
##[error]  --> /checkout/tests/ui/typeck/assign-non-lval-derefmut.rs:13:5
   |
LL |     y += 1;
   |     -^^^^^
   |     |
   |     cannot use `+=` on type `std::sync::MutexGuard<'_, usize>`
   |
note: the foreign item type `std::sync::MutexGuard<'_, usize>` doesn't implement `AddAssign<{integer}>`
  --> /rustc/FAKE_PREFIX/library/std/src/sync/poison/mutex.rs:225:1
   |
   = note: not implement `AddAssign<{integer}>`
help: `+=` can be used on `usize` if you dereference the left-hand side
   |
LL |     *y += 1;
   |     +

error: aborting due to 4 previous errors

Some errors have detailed explanations: E0070, E0308, E0368.
---
-             found struct `MutexGuard<'_, &i32>`
+             found struct `std::sync::MutexGuard<'_, &i32>`
67 help: consider dereferencing the type
68    |
69 LL |     **x.lock().unwrap()


The actual stderr differed from the expected stderr.
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args typeck/deref-multi.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/typeck/deref-multi.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/typeck/deref-multi" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers"
stdout: none
--- stderr -------------------------------
error[E0308]: mismatched types
##[error]  --> /checkout/tests/ui/typeck/deref-multi.rs:2:5
   |
LL | fn a(x: &&i32) -> i32 {
   |                   --- expected `i32` because of return type
LL |     x
   |     ^ expected `i32`, found `&&i32`
   |
help: consider dereferencing the borrow
   |
LL |     **x
   |     ++

error[E0308]: mismatched types
##[error]  --> /checkout/tests/ui/typeck/deref-multi.rs:7:5
   |
LL | fn a2(x: &&&&&i32) -> i32 {
   |                       --- expected `i32` because of return type
LL |     x
   |     ^ expected `i32`, found `&&&&&i32`
   |
help: consider dereferencing the borrow
   |
LL |     *****x
   |     +++++

error[E0308]: mismatched types
##[error]  --> /checkout/tests/ui/typeck/deref-multi.rs:12:5
   |
LL | fn b(x: &i32) -> i32 {
   |                  --- expected `i32` because of return type
LL |     &x
   |     ^^ expected `i32`, found `&&i32`
   |
help: consider removing the `&` and dereferencing the borrow instead
   |
LL -     &x
LL +     *x
   |

error[E0308]: mismatched types
##[error]  --> /checkout/tests/ui/typeck/deref-multi.rs:17:5
   |
LL | fn c(x: Box<i32>) -> i32 {
   |                      --- expected `i32` because of return type
LL |     &x
   |     ^^ expected `i32`, found `&Box<i32>`
   |
   = note:   expected type `i32`
           found reference `&Box<i32>`
help: consider removing the `&` and dereferencing the borrow instead
   |
LL -     &x
LL +     *x
   |

error[E0308]: mismatched types
##[error]  --> /checkout/tests/ui/typeck/deref-multi.rs:22:5
   |
LL | fn d(x: std::sync::Mutex<&i32>) -> i32 {
   |                                    --- expected `i32` because of return type
LL |     x.lock().unwrap()
   |     ^^^^^^^^^^^^^^^^^ expected `i32`, found `MutexGuard<'_, &i32>`
   |
   = note: expected type `i32`
            found struct `std::sync::MutexGuard<'_, &i32>`
help: consider dereferencing the type
   |
LL |     **x.lock().unwrap()
   |     ++

error: aborting due to 5 previous errors

For more information about this error, try `rustc --explain E0308`.