Repository navigation
Closed
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsD-confusingDiagnostics: Confusing error or lint that should be reworked.Diagnostics: Confusing error or lint that should be reworked.D-terseDiagnostics: An error or lint that doesn't give enough information about the problem at hand.Diagnostics: An error or lint that doesn't give enough information about the problem at hand.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.
Description
This code causes a const_err somewhere in the standard library:
#![feature(const_swap)]
#![feature(const_mut_refs)]
use std::{
mem::{self, MaybeUninit},
ptr,
};
const X: () = {
let mut ptr1 = &1;
let mut ptr2 = &2;
// Swap them, bytewise.
unsafe {
ptr::swap_nonoverlapping(
&mut ptr1 as *mut _ as *mut MaybeUninit<u8>,
&mut ptr2 as *mut _ as *mut MaybeUninit<u8>,
mem::size_of::<&i32>(),
);
}
};When the rust-src package is not installed, the error is pretty unreadable:
error: any use of this value will cause an error
|
::: src/lib.rs:8:1
|
8 | / const X: () = {
9 | | let mut ptr1 = &1;
10 | | let mut ptr2 = &2;
11 | |
... |
19 | | }
20 | | };
| |__-
|
= note: `#[deny(const_err)]` on by default
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, [see issue #71800 <https://github.com/rust-lang/rust/issues/71800>](https://github.com/rust-lang/rust/issues/71800)
This is missing the key information of what goes wrong! With rust-src, the following is added, making it much clearer:
--> /home/r/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ptr/mod.rs:1151:9
|
1151 | copy_nonoverlapping(src, tmp.as_mut_ptr(), 1);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| unable to turn pointer into raw bytes
| inside `std::ptr::read::<MaybeUninit<u8>>` at /home/r/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ptr/mod.rs:1151:9
| inside `mem::swap_simple::<MaybeUninit<u8>>` at /home/r/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/mem/mod.rs:768:17
| inside `ptr::swap_nonoverlapping_simple::<MaybeUninit<u8>>` at /home/r/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ptr/mod.rs:968:9
| inside `swap_nonoverlapping::<MaybeUninit<u8>>` at /home/r/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ptr/mod.rs:949:14
| inside `X` at test.rs:14:9
If the sources are missing, we should probably still show the error, even if we cannot attach it to any code.
Cc @rust-lang/wg-const-eval
Reacted by Jake Goulding and beef
Metadata
Metadata
Assignees
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsD-confusingDiagnostics: Confusing error or lint that should be reworked.Diagnostics: Confusing error or lint that should be reworked.D-terseDiagnostics: An error or lint that doesn't give enough information about the problem at hand.Diagnostics: An error or lint that doesn't give enough information about the problem at hand.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.
Activity
RalfJung commentedon Jun 6, 2022
Cc @rust-lang/wg-diagnostics : IMO it is a bug in the rustc diagnostic printing that it entirely omits information attached to spans where the source is missing. Is there anything we can do about that?
estebank commentedon Jun 6, 2022
We could emit the information as a
noteinstead of a label, but the wording would likely refer to "this blah", making it seem like it's referring to whatever is being pointed at in the main window. That might cause things to be misinterpreted. Another option would be to emit a note whenrustc-srcisn't present asking the user to install it when we encounter cases like this one.oli-obk commentedon Nov 13, 2022
Has this been resolved by #103970 ?
albertlarsan68 commentedon Nov 13, 2022
The error message is
without
rust-srcinstalled, andwith the
rust-srccomponent installed withrustc 1.67.0-nightly (6284998a2 2022-11-12)onx86_64-pc-windows-msvcRalfJung commentedon Nov 13, 2022
So it does not seem entirely resolved -- the 'unable to copy parts of a pointer from memory at alloc6+0x1' is still missing completely when rust-src is not installed.
oli-obk commentedon Nov 15, 2022
ugh... I'm slowly wondering if we should enable
-Z simulate-remapped-rust-src-base=/rustc/xyz -Z translate-remapped-path-to-local-path=nofor all ui tests just to actually see the way diagnostics are shown to users normallyRalfJung commentedon Nov 15, 2022
Yeah if that is possible that would probably be good.
oli-obk commentedon Nov 15, 2022
Well... either way, I found a way to fix this specific diagnostic, so once that is landed I'll experiment with unconditionally setting that flag on all ui tests.
Auto merge of rust-lang#104449 - oli-obk:unhide_unknown_spans, r=este…