handle pointers in str
This commit is contained in:
parent
75da570d78
commit
a1507b80c2
@ -833,6 +833,7 @@ impl<'rt, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> ValueVisitor<'mir, 'tcx, M>
|
||||
self.ecx.memory.read_bytes(mplace.ptr, Size::from_bytes(len)),
|
||||
self.path,
|
||||
err_ub!(InvalidUninitBytes(..)) => { "uninitialized data in `str`" },
|
||||
err_unsup!(ReadPointerAsBytes) => { "a pointer in `str`" },
|
||||
);
|
||||
}
|
||||
ty::Array(tys, ..) | ty::Slice(tys)
|
||||
|
6
src/test/ui/consts/issue-83182.rs
Normal file
6
src/test/ui/consts/issue-83182.rs
Normal file
@ -0,0 +1,6 @@
|
||||
use std::mem;
|
||||
struct MyStr(str);
|
||||
const MYSTR_NO_INIT: &MyStr = unsafe { mem::transmute::<&[_], _>(&[&()]) };
|
||||
//~^ ERROR: it is undefined behavior to use this value
|
||||
//~| type validation failed: encountered a pointer in `str`
|
||||
fn main() {}
|
14
src/test/ui/consts/issue-83182.stderr
Normal file
14
src/test/ui/consts/issue-83182.stderr
Normal file
@ -0,0 +1,14 @@
|
||||
error[E0080]: it is undefined behavior to use this value
|
||||
--> $DIR/issue-83182.rs:3:1
|
||||
|
|
||||
LL | const MYSTR_NO_INIT: &MyStr = unsafe { mem::transmute::<&[_], _>(&[&()]) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type validation failed: encountered a pointer in `str` at .<deref>.0
|
||||
|
|
||||
= note: The rules on what exactly is undefined behavior aren't clear, so this check might be overzealous. Please open an issue on the rustc repository if you believe it should not be considered undefined behavior.
|
||||
= note: the raw bytes of the constant (size: 16, align: 8) {
|
||||
╾───────alloc3────────╼ 01 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
}
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0080`.
|
Loading…
x
Reference in New Issue
Block a user