Rollup merge of #142673 - oli-obk:uninit-read-mem, r=RalfJung
Show the offset, length and memory of uninit read errors r? ``@RalfJung`` I want to improve memory dumps in general. Not sure yet how to do so best within rust diagnostics, but in a perfect world I could generate a dummy in-memory file (that contains the rendered memory dump) that we then can then provide regular rustc `Span`s to. So we'd basically report normal diagnostics for them with squiggly lines and everything.
This commit is contained in:
@@ -2,17 +2,17 @@ use std::mem;
|
|||||||
|
|
||||||
use rustc_errors::{Diag, DiagArgName, DiagArgValue, DiagMessage, IntoDiagArg};
|
use rustc_errors::{Diag, DiagArgName, DiagArgValue, DiagMessage, IntoDiagArg};
|
||||||
use rustc_middle::mir::AssertKind;
|
use rustc_middle::mir::AssertKind;
|
||||||
use rustc_middle::mir::interpret::{AllocId, Provenance, ReportedErrorInfo};
|
use rustc_middle::mir::interpret::{AllocId, Provenance, ReportedErrorInfo, UndefinedBehaviorInfo};
|
||||||
use rustc_middle::query::TyCtxtAt;
|
use rustc_middle::query::TyCtxtAt;
|
||||||
|
use rustc_middle::ty::ConstInt;
|
||||||
use rustc_middle::ty::layout::LayoutError;
|
use rustc_middle::ty::layout::LayoutError;
|
||||||
use rustc_middle::ty::{ConstInt, TyCtxt};
|
|
||||||
use rustc_span::{Span, Symbol};
|
use rustc_span::{Span, Symbol};
|
||||||
|
|
||||||
use super::CompileTimeMachine;
|
use super::CompileTimeMachine;
|
||||||
use crate::errors::{self, FrameNote, ReportErrorExt};
|
use crate::errors::{self, FrameNote, ReportErrorExt};
|
||||||
use crate::interpret::{
|
use crate::interpret::{
|
||||||
CtfeProvenance, ErrorHandled, Frame, InterpErrorInfo, InterpErrorKind, MachineStopType,
|
CtfeProvenance, ErrorHandled, Frame, InterpCx, InterpErrorInfo, InterpErrorKind,
|
||||||
Pointer, err_inval, err_machine_stop,
|
MachineStopType, Pointer, err_inval, err_machine_stop,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// The CTFE machine has some custom error kinds.
|
/// The CTFE machine has some custom error kinds.
|
||||||
@@ -163,7 +163,7 @@ pub fn get_span_and_frames<'tcx>(
|
|||||||
/// You can use it to add a stacktrace of current execution according to
|
/// You can use it to add a stacktrace of current execution according to
|
||||||
/// `get_span_and_frames` or just give context on where the const eval error happened.
|
/// `get_span_and_frames` or just give context on where the const eval error happened.
|
||||||
pub(super) fn report<'tcx, C, F>(
|
pub(super) fn report<'tcx, C, F>(
|
||||||
tcx: TyCtxt<'tcx>,
|
ecx: &InterpCx<'tcx, CompileTimeMachine<'tcx>>,
|
||||||
error: InterpErrorKind<'tcx>,
|
error: InterpErrorKind<'tcx>,
|
||||||
span: Span,
|
span: Span,
|
||||||
get_span_and_frames: C,
|
get_span_and_frames: C,
|
||||||
@@ -173,6 +173,7 @@ where
|
|||||||
C: FnOnce() -> (Span, Vec<FrameNote>),
|
C: FnOnce() -> (Span, Vec<FrameNote>),
|
||||||
F: FnOnce(&mut Diag<'_>, Span, Vec<FrameNote>),
|
F: FnOnce(&mut Diag<'_>, Span, Vec<FrameNote>),
|
||||||
{
|
{
|
||||||
|
let tcx = ecx.tcx.tcx;
|
||||||
// Special handling for certain errors
|
// Special handling for certain errors
|
||||||
match error {
|
match error {
|
||||||
// Don't emit a new diagnostic for these errors, they are already reported elsewhere or
|
// Don't emit a new diagnostic for these errors, they are already reported elsewhere or
|
||||||
@@ -198,6 +199,20 @@ where
|
|||||||
InterpErrorKind::ResourceExhaustion(_) | InterpErrorKind::InvalidProgram(_)
|
InterpErrorKind::ResourceExhaustion(_) | InterpErrorKind::InvalidProgram(_)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if let InterpErrorKind::UndefinedBehavior(UndefinedBehaviorInfo::InvalidUninitBytes(
|
||||||
|
Some((alloc_id, _access)),
|
||||||
|
)) = error
|
||||||
|
{
|
||||||
|
let bytes = ecx.print_alloc_bytes_for_diagnostics(alloc_id);
|
||||||
|
let info = ecx.get_alloc_info(alloc_id);
|
||||||
|
let raw_bytes = errors::RawBytesNote {
|
||||||
|
size: info.size.bytes(),
|
||||||
|
align: info.align.bytes(),
|
||||||
|
bytes,
|
||||||
|
};
|
||||||
|
err.subdiagnostic(raw_bytes);
|
||||||
|
}
|
||||||
|
|
||||||
error.add_args(&mut err);
|
error.add_args(&mut err);
|
||||||
|
|
||||||
mk(&mut err, span, frames);
|
mk(&mut err, span, frames);
|
||||||
|
|||||||
@@ -411,7 +411,7 @@ fn report_eval_error<'tcx>(
|
|||||||
let instance = with_no_trimmed_paths!(cid.instance.to_string());
|
let instance = with_no_trimmed_paths!(cid.instance.to_string());
|
||||||
|
|
||||||
super::report(
|
super::report(
|
||||||
*ecx.tcx,
|
ecx,
|
||||||
error,
|
error,
|
||||||
DUMMY_SP,
|
DUMMY_SP,
|
||||||
|| super::get_span_and_frames(ecx.tcx, ecx.stack()),
|
|| super::get_span_and_frames(ecx.tcx, ecx.stack()),
|
||||||
@@ -451,7 +451,7 @@ fn report_validation_error<'tcx>(
|
|||||||
errors::RawBytesNote { size: info.size.bytes(), align: info.align.bytes(), bytes };
|
errors::RawBytesNote { size: info.size.bytes(), align: info.align.bytes(), bytes };
|
||||||
|
|
||||||
crate::const_eval::report(
|
crate::const_eval::report(
|
||||||
*ecx.tcx,
|
ecx,
|
||||||
error,
|
error,
|
||||||
DUMMY_SP,
|
DUMMY_SP,
|
||||||
|| crate::const_eval::get_span_and_frames(ecx.tcx, ecx.stack()),
|
|| crate::const_eval::get_span_and_frames(ecx.tcx, ecx.stack()),
|
||||||
|
|||||||
@@ -394,7 +394,7 @@ impl<'rt, 'tcx, M: Machine<'tcx>> ValidityVisitor<'rt, 'tcx, M> {
|
|||||||
interp_ok(try_validation!(
|
interp_ok(try_validation!(
|
||||||
self.ecx.read_immediate(val),
|
self.ecx.read_immediate(val),
|
||||||
self.path,
|
self.path,
|
||||||
Ub(InvalidUninitBytes(None)) =>
|
Ub(InvalidUninitBytes(_)) =>
|
||||||
Uninit { expected },
|
Uninit { expected },
|
||||||
// The `Unsup` cases can only occur during CTFE
|
// The `Unsup` cases can only occur during CTFE
|
||||||
Unsup(ReadPointerAsInt(_)) =>
|
Unsup(ReadPointerAsInt(_)) =>
|
||||||
|
|||||||
@@ -702,8 +702,11 @@ impl<Prov: Provenance, Extra, Bytes: AllocBytes> Allocation<Prov, Extra, Bytes>
|
|||||||
read_provenance: bool,
|
read_provenance: bool,
|
||||||
) -> AllocResult<Scalar<Prov>> {
|
) -> AllocResult<Scalar<Prov>> {
|
||||||
// First and foremost, if anything is uninit, bail.
|
// First and foremost, if anything is uninit, bail.
|
||||||
if self.init_mask.is_range_initialized(range).is_err() {
|
if let Err(bad) = self.init_mask.is_range_initialized(range) {
|
||||||
return Err(AllocError::InvalidUninitBytes(None));
|
return Err(AllocError::InvalidUninitBytes(Some(BadBytesAccess {
|
||||||
|
access: range,
|
||||||
|
bad,
|
||||||
|
})));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the integer part of the result. We HAVE TO check provenance before returning this!
|
// Get the integer part of the result. We HAVE TO check provenance before returning this!
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
//@ignore-target: windows # No pthreads on Windows
|
//@ignore-target: windows # No pthreads on Windows
|
||||||
|
//@ normalize-stderr-test: "(\n)ALLOC \(.*\) \{\n(.*\n)*\}(\n)" -> "${1}ALLOC DUMP${3}"
|
||||||
|
//@ normalize-stderr-test: "\[0x[0-9a-z]..0x[0-9a-z]\]" -> "[0xX..0xY]"
|
||||||
|
|
||||||
/// Test that destroying a pthread_cond twice fails, even without a check for number validity
|
/// Test that destroying a pthread_cond twice fails, even without a check for number validity
|
||||||
|
|
||||||
@@ -15,6 +17,6 @@ fn main() {
|
|||||||
libc::pthread_cond_destroy(cond.as_mut_ptr());
|
libc::pthread_cond_destroy(cond.as_mut_ptr());
|
||||||
|
|
||||||
libc::pthread_cond_destroy(cond.as_mut_ptr());
|
libc::pthread_cond_destroy(cond.as_mut_ptr());
|
||||||
//~^ ERROR: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
//~^ ERROR: /Undefined Behavior: reading memory .*, but memory is uninitialized/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0xX..0xY], but memory is uninitialized at [0xX..0xY], and this operation requires initialized memory
|
||||||
--> tests/fail-dep/concurrency/libc_pthread_cond_double_destroy.rs:LL:CC
|
--> tests/fail-dep/concurrency/libc_pthread_cond_double_destroy.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | libc::pthread_cond_destroy(cond.as_mut_ptr());
|
LL | libc::pthread_cond_destroy(cond.as_mut_ptr());
|
||||||
@@ -9,6 +9,9 @@ LL | libc::pthread_cond_destroy(cond.as_mut_ptr());
|
|||||||
= note: BACKTRACE:
|
= note: BACKTRACE:
|
||||||
= note: inside `main` at tests/fail-dep/concurrency/libc_pthread_cond_double_destroy.rs:LL:CC
|
= note: inside `main` at tests/fail-dep/concurrency/libc_pthread_cond_double_destroy.rs:LL:CC
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0xX..0xY], in this allocation:
|
||||||
|
ALLOC DUMP
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
//@ignore-target: windows # No pthreads on Windows
|
//@ignore-target: windows # No pthreads on Windows
|
||||||
//@ignore-target: apple # Our macOS condattr don't have any fields so we do not notice this.
|
//@ignore-target: apple # Our macOS condattr don't have any fields so we do not notice this.
|
||||||
|
//@ normalize-stderr-test: "(\n)ALLOC \(.*\) \{\n(.*\n)*\}(\n)" -> "${1}ALLOC DUMP${3}"
|
||||||
|
//@ normalize-stderr-test: "\[0x[0-9a-z]..0x[0-9a-z]\]" -> "[0xX..0xY]"
|
||||||
|
|
||||||
/// Test that destroying a pthread_condattr twice fails, even without a check for number validity
|
/// Test that destroying a pthread_condattr twice fails, even without a check for number validity
|
||||||
|
|
||||||
@@ -13,6 +15,6 @@ fn main() {
|
|||||||
libc::pthread_condattr_destroy(attr.as_mut_ptr());
|
libc::pthread_condattr_destroy(attr.as_mut_ptr());
|
||||||
|
|
||||||
libc::pthread_condattr_destroy(attr.as_mut_ptr());
|
libc::pthread_condattr_destroy(attr.as_mut_ptr());
|
||||||
//~^ ERROR: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
//~^ ERROR: /Undefined Behavior: reading memory .*, but memory is uninitialized/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0xX..0xY], but memory is uninitialized at [0xX..0xY], and this operation requires initialized memory
|
||||||
--> tests/fail-dep/concurrency/libc_pthread_condattr_double_destroy.rs:LL:CC
|
--> tests/fail-dep/concurrency/libc_pthread_condattr_double_destroy.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | libc::pthread_condattr_destroy(attr.as_mut_ptr());
|
LL | libc::pthread_condattr_destroy(attr.as_mut_ptr());
|
||||||
@@ -9,6 +9,9 @@ LL | libc::pthread_condattr_destroy(attr.as_mut_ptr());
|
|||||||
= note: BACKTRACE:
|
= note: BACKTRACE:
|
||||||
= note: inside `main` at tests/fail-dep/concurrency/libc_pthread_condattr_double_destroy.rs:LL:CC
|
= note: inside `main` at tests/fail-dep/concurrency/libc_pthread_condattr_double_destroy.rs:LL:CC
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0xX..0xY], in this allocation:
|
||||||
|
ALLOC DUMP
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
//@ignore-target: windows # No pthreads on Windows
|
//@ignore-target: windows # No pthreads on Windows
|
||||||
|
//@ normalize-stderr-test: "(\n)ALLOC \(.*\) \{\n(.*\n)*\}(\n)" -> "${1}ALLOC DUMP${3}"
|
||||||
|
//@ normalize-stderr-test: "\[0x[0-9a-z]..0x[0-9a-z]\]" -> "[0xX..0xY]"
|
||||||
|
|
||||||
/// Test that destroying a pthread_mutex twice fails, even without a check for number validity
|
/// Test that destroying a pthread_mutex twice fails, even without a check for number validity
|
||||||
|
|
||||||
@@ -16,6 +18,6 @@ fn main() {
|
|||||||
libc::pthread_mutex_destroy(mutex.as_mut_ptr());
|
libc::pthread_mutex_destroy(mutex.as_mut_ptr());
|
||||||
|
|
||||||
libc::pthread_mutex_destroy(mutex.as_mut_ptr());
|
libc::pthread_mutex_destroy(mutex.as_mut_ptr());
|
||||||
//~^ ERROR: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
//~^ ERROR: /Undefined Behavior: reading memory .*, but memory is uninitialized/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0xX..0xY], but memory is uninitialized at [0xX..0xY], and this operation requires initialized memory
|
||||||
--> tests/fail-dep/concurrency/libc_pthread_mutex_double_destroy.rs:LL:CC
|
--> tests/fail-dep/concurrency/libc_pthread_mutex_double_destroy.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | libc::pthread_mutex_destroy(mutex.as_mut_ptr());
|
LL | libc::pthread_mutex_destroy(mutex.as_mut_ptr());
|
||||||
@@ -9,6 +9,9 @@ LL | libc::pthread_mutex_destroy(mutex.as_mut_ptr());
|
|||||||
= note: BACKTRACE:
|
= note: BACKTRACE:
|
||||||
= note: inside `main` at tests/fail-dep/concurrency/libc_pthread_mutex_double_destroy.rs:LL:CC
|
= note: inside `main` at tests/fail-dep/concurrency/libc_pthread_mutex_double_destroy.rs:LL:CC
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0xX..0xY], in this allocation:
|
||||||
|
ALLOC DUMP
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
//@ignore-target: windows # No pthreads on Windows
|
//@ignore-target: windows # No pthreads on Windows
|
||||||
|
//@ normalize-stderr-test: "(\n)ALLOC \(.*\) \{\n(.*\n)*\}(\n)" -> "${1}ALLOC DUMP${3}"
|
||||||
|
//@ normalize-stderr-test: "\[0x[0-9a-z]..0x[0-9a-z]\]" -> "[0xX..0xY]"
|
||||||
|
|
||||||
/// Test that destroying a pthread_mutexattr twice fails, even without a check for number validity
|
/// Test that destroying a pthread_mutexattr twice fails, even without a check for number validity
|
||||||
|
|
||||||
@@ -12,6 +14,6 @@ fn main() {
|
|||||||
libc::pthread_mutexattr_destroy(attr.as_mut_ptr());
|
libc::pthread_mutexattr_destroy(attr.as_mut_ptr());
|
||||||
|
|
||||||
libc::pthread_mutexattr_destroy(attr.as_mut_ptr());
|
libc::pthread_mutexattr_destroy(attr.as_mut_ptr());
|
||||||
//~^ ERROR: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
//~^ ERROR: /Undefined Behavior: reading memory .*, but memory is uninitialized/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0xX..0xY], but memory is uninitialized at [0xX..0xY], and this operation requires initialized memory
|
||||||
--> tests/fail-dep/concurrency/libc_pthread_mutexattr_double_destroy.rs:LL:CC
|
--> tests/fail-dep/concurrency/libc_pthread_mutexattr_double_destroy.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | libc::pthread_mutexattr_destroy(attr.as_mut_ptr());
|
LL | libc::pthread_mutexattr_destroy(attr.as_mut_ptr());
|
||||||
@@ -9,6 +9,9 @@ LL | libc::pthread_mutexattr_destroy(attr.as_mut_ptr());
|
|||||||
= note: BACKTRACE:
|
= note: BACKTRACE:
|
||||||
= note: inside `main` at tests/fail-dep/concurrency/libc_pthread_mutexattr_double_destroy.rs:LL:CC
|
= note: inside `main` at tests/fail-dep/concurrency/libc_pthread_mutexattr_double_destroy.rs:LL:CC
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0xX..0xY], in this allocation:
|
||||||
|
ALLOC DUMP
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
//@ignore-target: windows # No pthreads on Windows
|
//@ignore-target: windows # No pthreads on Windows
|
||||||
|
//@ normalize-stderr-test: "(\n)ALLOC \(.*\) \{\n(.*\n)*\}(\n)" -> "${1}ALLOC DUMP${3}"
|
||||||
|
//@ normalize-stderr-test: "\[0x[0-9a-z]..0x[0-9a-z]\]" -> "[0xX..0xY]"
|
||||||
|
|
||||||
/// Test that destroying a pthread_rwlock twice fails, even without a check for number validity
|
/// Test that destroying a pthread_rwlock twice fails, even without a check for number validity
|
||||||
|
|
||||||
@@ -9,6 +11,6 @@ fn main() {
|
|||||||
libc::pthread_rwlock_destroy(&mut lock);
|
libc::pthread_rwlock_destroy(&mut lock);
|
||||||
|
|
||||||
libc::pthread_rwlock_destroy(&mut lock);
|
libc::pthread_rwlock_destroy(&mut lock);
|
||||||
//~^ ERROR: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
//~^ ERROR: /Undefined Behavior: reading memory .*, but memory is uninitialized/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0xX..0xY], but memory is uninitialized at [0xX..0xY], and this operation requires initialized memory
|
||||||
--> tests/fail-dep/concurrency/libc_pthread_rwlock_double_destroy.rs:LL:CC
|
--> tests/fail-dep/concurrency/libc_pthread_rwlock_double_destroy.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | libc::pthread_rwlock_destroy(&mut lock);
|
LL | libc::pthread_rwlock_destroy(&mut lock);
|
||||||
@@ -9,6 +9,9 @@ LL | libc::pthread_rwlock_destroy(&mut lock);
|
|||||||
= note: BACKTRACE:
|
= note: BACKTRACE:
|
||||||
= note: inside `main` at tests/fail-dep/concurrency/libc_pthread_rwlock_double_destroy.rs:LL:CC
|
= note: inside `main` at tests/fail-dep/concurrency/libc_pthread_rwlock_double_destroy.rs:LL:CC
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0xX..0xY], in this allocation:
|
||||||
|
ALLOC DUMP
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0x0..0x4], but memory is uninitialized at [0x0..0x4], and this operation requires initialized memory
|
||||||
--> tests/fail/function_calls/arg_inplace_observe_after.rs:LL:CC
|
--> tests/fail/function_calls/arg_inplace_observe_after.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | _observe = non_copy.0;
|
LL | _observe = non_copy.0;
|
||||||
@@ -9,6 +9,11 @@ LL | _observe = non_copy.0;
|
|||||||
= note: BACKTRACE:
|
= note: BACKTRACE:
|
||||||
= note: inside `main` at tests/fail/function_calls/arg_inplace_observe_after.rs:LL:CC
|
= note: inside `main` at tests/fail/function_calls/arg_inplace_observe_after.rs:LL:CC
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0x0..0x4], in this allocation:
|
||||||
|
ALLOC (stack variable, size: 4, align: 4) {
|
||||||
|
__ __ __ __ │ ░░░░
|
||||||
|
}
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0x0..0x4], but memory is uninitialized at [0x0..0x4], and this operation requires initialized memory
|
||||||
--> tests/fail/function_calls/arg_inplace_observe_during.rs:LL:CC
|
--> tests/fail/function_calls/arg_inplace_observe_during.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | unsafe { ptr.read() };
|
LL | unsafe { ptr.read() };
|
||||||
@@ -14,6 +14,11 @@ note: inside `main`
|
|||||||
LL | Call(_unit = change_arg(Move(*ptr), ptr), ReturnTo(after_call), UnwindContinue())
|
LL | Call(_unit = change_arg(Move(*ptr), ptr), ReturnTo(after_call), UnwindContinue())
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0x0..0x4], in this allocation:
|
||||||
|
ALLOC (stack variable, size: 4, align: 4) {
|
||||||
|
__ __ __ __ │ ░░░░
|
||||||
|
}
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0x0..0x4], but memory is uninitialized at [0x0..0x4], and this operation requires initialized memory
|
||||||
--> tests/fail/function_calls/return_pointer_aliasing_read.rs:LL:CC
|
--> tests/fail/function_calls/return_pointer_aliasing_read.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | unsafe { ptr.read() };
|
LL | unsafe { ptr.read() };
|
||||||
@@ -14,6 +14,11 @@ note: inside `main`
|
|||||||
LL | Call(*ptr = myfun(ptr), ReturnTo(after_call), UnwindContinue())
|
LL | Call(*ptr = myfun(ptr), ReturnTo(after_call), UnwindContinue())
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0x0..0x4], in this allocation:
|
||||||
|
ALLOC (stack variable, size: 4, align: 4) {
|
||||||
|
__ __ __ __ │ ░░░░
|
||||||
|
}
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ thread 'main' panicked at tests/fail/function_calls/return_pointer_on_unwind.rs:
|
|||||||
explicit panic
|
explicit panic
|
||||||
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
|
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
|
||||||
note: in Miri, you may have to set `MIRIFLAGS=-Zmiri-env-forward=RUST_BACKTRACE` for the environment variable to have an effect
|
note: in Miri, you may have to set `MIRIFLAGS=-Zmiri-env-forward=RUST_BACKTRACE` for the environment variable to have an effect
|
||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0x0..0x4], but memory is uninitialized at [0x0..0x4], and this operation requires initialized memory
|
||||||
--> tests/fail/function_calls/return_pointer_on_unwind.rs:LL:CC
|
--> tests/fail/function_calls/return_pointer_on_unwind.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | dbg!(x.0);
|
LL | dbg!(x.0);
|
||||||
@@ -15,6 +15,19 @@ LL | dbg!(x.0);
|
|||||||
= note: inside `main` at RUSTLIB/std/src/macros.rs:LL:CC
|
= note: inside `main` at RUSTLIB/std/src/macros.rs:LL:CC
|
||||||
= note: this error originates in the macro `dbg` (in Nightly builds, run with -Z macro-backtrace for more info)
|
= note: this error originates in the macro `dbg` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0x0..0x4], in this allocation:
|
||||||
|
ALLOC (stack variable, size: 132, align: 4) {
|
||||||
|
0x00 │ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ │ ░░░░░░░░░░░░░░░░
|
||||||
|
0x10 │ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ │ ░░░░░░░░░░░░░░░░
|
||||||
|
0x20 │ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ │ ░░░░░░░░░░░░░░░░
|
||||||
|
0x30 │ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ │ ░░░░░░░░░░░░░░░░
|
||||||
|
0x40 │ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ │ ░░░░░░░░░░░░░░░░
|
||||||
|
0x50 │ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ │ ░░░░░░░░░░░░░░░░
|
||||||
|
0x60 │ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ │ ░░░░░░░░░░░░░░░░
|
||||||
|
0x70 │ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ │ ░░░░░░░░░░░░░░░░
|
||||||
|
0x80 │ __ __ __ __ │ ░░░░
|
||||||
|
}
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
//@compile-flags: -Zmiri-disable-validation
|
//@compile-flags: -Zmiri-disable-validation
|
||||||
|
//@ normalize-stderr-test: "(\n)ALLOC \(.*\) \{\n(.*\n)*\}(\n)" -> "${1}ALLOC DUMP${3}"
|
||||||
|
//@ normalize-stderr-test: "\[0x[0-9a-z]..0x[0-9a-z]\]" -> "[0xX..0xY]"
|
||||||
|
|
||||||
#![feature(core_intrinsics, custom_mir)]
|
#![feature(core_intrinsics, custom_mir)]
|
||||||
use std::intrinsics::mir::*;
|
use std::intrinsics::mir::*;
|
||||||
|
|
||||||
@@ -9,7 +12,7 @@ use std::intrinsics::mir::*;
|
|||||||
pub unsafe fn deref_meta(p: *const *const [i32]) -> usize {
|
pub unsafe fn deref_meta(p: *const *const [i32]) -> usize {
|
||||||
mir! {
|
mir! {
|
||||||
{
|
{
|
||||||
RET = PtrMetadata(*p); //~ ERROR: Undefined Behavior: using uninitialized data
|
RET = PtrMetadata(*p); //~ ERROR: /Undefined Behavior: .* but memory is uninitialized/
|
||||||
Return()
|
Return()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0xX..0xY], but memory is uninitialized at [0xX..0xY], and this operation requires initialized memory
|
||||||
--> tests/fail/intrinsics/ptr_metadata_uninit_slice_data.rs:LL:CC
|
--> tests/fail/intrinsics/ptr_metadata_uninit_slice_data.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | RET = PtrMetadata(*p);
|
LL | RET = PtrMetadata(*p);
|
||||||
@@ -14,6 +14,9 @@ note: inside `main`
|
|||||||
LL | let _meta = deref_meta(p.as_ptr().cast());
|
LL | let _meta = deref_meta(p.as_ptr().cast());
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0xX..0xY], in this allocation:
|
||||||
|
ALLOC DUMP
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
//@compile-flags: -Zmiri-disable-validation
|
//@compile-flags: -Zmiri-disable-validation
|
||||||
|
//@ normalize-stderr-test: "(\n)ALLOC \(.*\) \{\n(.*\n)*\}(\n)" -> "${1}ALLOC DUMP${3}"
|
||||||
|
//@ normalize-stderr-test: "\[0x[0-9a-z]+..0x[0-9a-z]+\]" -> "[0xX..0xY]"
|
||||||
|
|
||||||
#![feature(core_intrinsics, custom_mir)]
|
#![feature(core_intrinsics, custom_mir)]
|
||||||
use std::intrinsics::mir::*;
|
use std::intrinsics::mir::*;
|
||||||
|
|
||||||
@@ -9,7 +12,7 @@ use std::intrinsics::mir::*;
|
|||||||
pub unsafe fn deref_meta(p: *const *const [i32]) -> usize {
|
pub unsafe fn deref_meta(p: *const *const [i32]) -> usize {
|
||||||
mir! {
|
mir! {
|
||||||
{
|
{
|
||||||
RET = PtrMetadata(*p); //~ ERROR: Undefined Behavior: using uninitialized data
|
RET = PtrMetadata(*p); //~ ERROR: /Undefined Behavior: .* but memory is uninitialized/
|
||||||
Return()
|
Return()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ LL | (*p.as_mut_ptr().cast::<[*const i32; 2]>())[0] = 4 as *const i32;
|
|||||||
= note: BACKTRACE:
|
= note: BACKTRACE:
|
||||||
= note: inside `main` at tests/fail/intrinsics/ptr_metadata_uninit_slice_len.rs:LL:CC
|
= note: inside `main` at tests/fail/intrinsics/ptr_metadata_uninit_slice_len.rs:LL:CC
|
||||||
|
|
||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0xX..0xY], but memory is uninitialized at [0xX..0xY], and this operation requires initialized memory
|
||||||
--> tests/fail/intrinsics/ptr_metadata_uninit_slice_len.rs:LL:CC
|
--> tests/fail/intrinsics/ptr_metadata_uninit_slice_len.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | RET = PtrMetadata(*p);
|
LL | RET = PtrMetadata(*p);
|
||||||
@@ -28,6 +28,9 @@ note: inside `main`
|
|||||||
LL | let _meta = deref_meta(p.as_ptr().cast());
|
LL | let _meta = deref_meta(p.as_ptr().cast());
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0xX..0xY], in this allocation:
|
||||||
|
ALLOC DUMP
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error; 1 warning emitted
|
error: aborting due to 1 previous error; 1 warning emitted
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
//@compile-flags: -Zmiri-disable-validation
|
//@compile-flags: -Zmiri-disable-validation
|
||||||
|
//@ normalize-stderr-test: "(\n)ALLOC \(.*\) \{\n(.*\n)*\}(\n)" -> "${1}ALLOC DUMP${3}"
|
||||||
|
//@ normalize-stderr-test: "\[0x[0-9a-z]..0x[0-9a-z]\]" -> "[0xX..0xY]"
|
||||||
|
|
||||||
#![feature(core_intrinsics, custom_mir)]
|
#![feature(core_intrinsics, custom_mir)]
|
||||||
use std::intrinsics::mir::*;
|
use std::intrinsics::mir::*;
|
||||||
|
|
||||||
@@ -9,7 +12,7 @@ use std::intrinsics::mir::*;
|
|||||||
pub unsafe fn deref_meta(p: *const *const i32) -> () {
|
pub unsafe fn deref_meta(p: *const *const i32) -> () {
|
||||||
mir! {
|
mir! {
|
||||||
{
|
{
|
||||||
RET = PtrMetadata(*p); //~ ERROR: Undefined Behavior: using uninitialized data
|
RET = PtrMetadata(*p); //~ ERROR: /Undefined Behavior: .*, but memory is uninitialized/
|
||||||
Return()
|
Return()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0xX..0xY], but memory is uninitialized at [0xX..0xY], and this operation requires initialized memory
|
||||||
--> tests/fail/intrinsics/ptr_metadata_uninit_thin.rs:LL:CC
|
--> tests/fail/intrinsics/ptr_metadata_uninit_thin.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | RET = PtrMetadata(*p);
|
LL | RET = PtrMetadata(*p);
|
||||||
@@ -14,6 +14,9 @@ note: inside `main`
|
|||||||
LL | let _meta = deref_meta(p.as_ptr());
|
LL | let _meta = deref_meta(p.as_ptr());
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0xX..0xY], in this allocation:
|
||||||
|
ALLOC DUMP
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -4,11 +4,14 @@
|
|||||||
//
|
//
|
||||||
// See <https://github.com/rust-lang/miri/issues/4237>.
|
// See <https://github.com/rust-lang/miri/issues/4237>.
|
||||||
|
|
||||||
|
//@ normalize-stderr-test: "(\n)ALLOC \(.*\) \{\n(.*\n)*\}(\n)" -> "${1}ALLOC DUMP${3}"
|
||||||
|
//@ normalize-stderr-test: "\[0x[0-9a-z]..0x[0-9a-z]\]" -> "[0xX..0xY]"
|
||||||
|
|
||||||
use std::mem::MaybeUninit;
|
use std::mem::MaybeUninit;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let uninit: MaybeUninit<i32> = MaybeUninit::uninit();
|
let uninit: MaybeUninit<i32> = MaybeUninit::uninit();
|
||||||
let bad_ref: &i32 = unsafe { uninit.assume_init_ref() };
|
let bad_ref: &i32 = unsafe { uninit.assume_init_ref() };
|
||||||
let &(0 | _) = bad_ref;
|
let &(0 | _) = bad_ref;
|
||||||
//~^ ERROR: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
//~^ ERROR: /Undefined Behavior: .*, but memory is uninitialized .* requires initialized memory/
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0xX..0xY], but memory is uninitialized at [0xX..0xY], and this operation requires initialized memory
|
||||||
--> tests/fail/read_from_trivial_switch.rs:LL:CC
|
--> tests/fail/read_from_trivial_switch.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | let &(0 | _) = bad_ref;
|
LL | let &(0 | _) = bad_ref;
|
||||||
@@ -9,6 +9,9 @@ LL | let &(0 | _) = bad_ref;
|
|||||||
= note: BACKTRACE:
|
= note: BACKTRACE:
|
||||||
= note: inside `main` at tests/fail/read_from_trivial_switch.rs:LL:CC
|
= note: inside `main` at tests/fail/read_from_trivial_switch.rs:LL:CC
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0xX..0xY], in this allocation:
|
||||||
|
ALLOC DUMP
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
//@ normalize-stderr-test: "(\n)ALLOC \(.*\) \{\n(.*\n)*\}(\n)" -> "${1}ALLOC DUMP${3}"
|
||||||
|
//@ normalize-stderr-test: "\[0x[0-9a-z]..0x[0-9a-z]\]" -> "[0xX..0xY]"
|
||||||
|
|
||||||
use std::mem;
|
use std::mem;
|
||||||
|
|
||||||
// We have three fields to avoid the ScalarPair optimization.
|
// We have three fields to avoid the ScalarPair optimization.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0xX..0xY], but memory is uninitialized at [0xX..0xY], and this operation requires initialized memory
|
||||||
--> tests/fail/uninit/padding-enum.rs:LL:CC
|
--> tests/fail/uninit/padding-enum.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | let _val = *c.add(padding_offset);
|
LL | let _val = *c.add(padding_offset);
|
||||||
@@ -9,6 +9,9 @@ LL | let _val = *c.add(padding_offset);
|
|||||||
= note: BACKTRACE:
|
= note: BACKTRACE:
|
||||||
= note: inside `main` at tests/fail/uninit/padding-enum.rs:LL:CC
|
= note: inside `main` at tests/fail/uninit/padding-enum.rs:LL:CC
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0xX..0xY], in this allocation:
|
||||||
|
ALLOC DUMP
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
//@ normalize-stderr-test: "(\n)ALLOC \(.*\) \{\n(.*\n)*\}(\n)" -> "${1}ALLOC DUMP${3}"
|
||||||
|
//@ normalize-stderr-test: "\[0x[0-9a-z]..0x[0-9a-z]\]" -> "[0xX..0xY]"
|
||||||
|
|
||||||
#![feature(core_intrinsics)]
|
#![feature(core_intrinsics)]
|
||||||
|
|
||||||
use std::mem::{self, MaybeUninit};
|
use std::mem::{self, MaybeUninit};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0xX..0xY], but memory is uninitialized at [0xX..0xY], and this operation requires initialized memory
|
||||||
--> tests/fail/uninit/padding-pair.rs:LL:CC
|
--> tests/fail/uninit/padding-pair.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | let v = unsafe { *z.offset(first_undef) };
|
LL | let v = unsafe { *z.offset(first_undef) };
|
||||||
@@ -9,6 +9,9 @@ LL | let v = unsafe { *z.offset(first_undef) };
|
|||||||
= note: BACKTRACE:
|
= note: BACKTRACE:
|
||||||
= note: inside `main` at tests/fail/uninit/padding-pair.rs:LL:CC
|
= note: inside `main` at tests/fail/uninit/padding-pair.rs:LL:CC
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0xX..0xY], in this allocation:
|
||||||
|
ALLOC DUMP
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0x1..0x2], but memory is uninitialized at [0x1..0x2], and this operation requires initialized memory
|
||||||
--> tests/fail/uninit/padding-struct.rs:LL:CC
|
--> tests/fail/uninit/padding-struct.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | let _val = *c.add(1);
|
LL | let _val = *c.add(1);
|
||||||
@@ -9,6 +9,11 @@ LL | let _val = *c.add(1);
|
|||||||
= note: BACKTRACE:
|
= note: BACKTRACE:
|
||||||
= note: inside `main` at tests/fail/uninit/padding-struct.rs:LL:CC
|
= note: inside `main` at tests/fail/uninit/padding-struct.rs:LL:CC
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0x1..0x2], in this allocation:
|
||||||
|
ALLOC (stack variable, size: 4, align: 2) {
|
||||||
|
00 __ 00 00 │ .░..
|
||||||
|
}
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
//@ normalize-stderr-test: "(\n)ALLOC \(.*\) \{\n(.*\n)*\}(\n)" -> "${1}ALLOC DUMP${3}"
|
||||||
|
//@ normalize-stderr-test: "\[0x[0-9a-z]..0x[0-9a-z]\]" -> "[0xX..0xY]"
|
||||||
|
|
||||||
use std::mem;
|
use std::mem;
|
||||||
|
|
||||||
// If this is `None`, the metadata becomes padding.
|
// If this is `None`, the metadata becomes padding.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0xX..0xY], but memory is uninitialized at [0xX..0xY], and this operation requires initialized memory
|
||||||
--> tests/fail/uninit/padding-wide-ptr.rs:LL:CC
|
--> tests/fail/uninit/padding-wide-ptr.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | let _val = *c.add(mem::size_of::<*const u8>());
|
LL | let _val = *c.add(mem::size_of::<*const u8>());
|
||||||
@@ -9,6 +9,9 @@ LL | let _val = *c.add(mem::size_of::<*const u8>());
|
|||||||
= note: BACKTRACE:
|
= note: BACKTRACE:
|
||||||
= note: inside `main` at tests/fail/uninit/padding-wide-ptr.rs:LL:CC
|
= note: inside `main` at tests/fail/uninit/padding-wide-ptr.rs:LL:CC
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0xX..0xY], in this allocation:
|
||||||
|
ALLOC DUMP
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
//@ normalize-stderr-test: "(\n)ALLOC \(.*\) \{\n(.*\n)*\}(\n)" -> "${1}ALLOC DUMP${3}"
|
||||||
|
//@ normalize-stderr-test: "\[0x[0-9a-z]..0x[0-9a-z]\]" -> "[0xX..0xY]"
|
||||||
|
|
||||||
#![feature(core_intrinsics)]
|
#![feature(core_intrinsics)]
|
||||||
|
|
||||||
use std::mem::{self, MaybeUninit};
|
use std::mem::{self, MaybeUninit};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0xX..0xY], but memory is uninitialized at [0xX..0xY], and this operation requires initialized memory
|
||||||
--> tests/fail/uninit/transmute-pair-uninit.rs:LL:CC
|
--> tests/fail/uninit/transmute-pair-uninit.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | let v = unsafe { *z.offset(first_undef) };
|
LL | let v = unsafe { *z.offset(first_undef) };
|
||||||
@@ -9,6 +9,9 @@ LL | let v = unsafe { *z.offset(first_undef) };
|
|||||||
= note: BACKTRACE:
|
= note: BACKTRACE:
|
||||||
= note: inside `main` at tests/fail/uninit/transmute-pair-uninit.rs:LL:CC
|
= note: inside `main` at tests/fail/uninit/transmute-pair-uninit.rs:LL:CC
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0xX..0xY], in this allocation:
|
||||||
|
ALLOC DUMP
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0x5..0x6], but memory is uninitialized at [0x5..0x6], and this operation requires initialized memory
|
||||||
--> tests/fail/uninit/uninit_byte_read.rs:LL:CC
|
--> tests/fail/uninit/uninit_byte_read.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | let undef = unsafe { *v.as_ptr().add(5) };
|
LL | let undef = unsafe { *v.as_ptr().add(5) };
|
||||||
@@ -9,6 +9,11 @@ LL | let undef = unsafe { *v.as_ptr().add(5) };
|
|||||||
= note: BACKTRACE:
|
= note: BACKTRACE:
|
||||||
= note: inside `main` at tests/fail/uninit/uninit_byte_read.rs:LL:CC
|
= note: inside `main` at tests/fail/uninit/uninit_byte_read.rs:LL:CC
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0x5..0x6], in this allocation:
|
||||||
|
ALLOC (Rust heap, size: 10, align: 1) {
|
||||||
|
__ __ __ __ __ __ __ __ __ __ │ ░░░░░░░░░░
|
||||||
|
}
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0x0..0x4], but memory is uninitialized at [0x0..0x4], and this operation requires initialized memory
|
||||||
--> tests/fail/validity/invalid_int_op.rs:LL:CC
|
--> tests/fail/validity/invalid_int_op.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | let i = unsafe { std::mem::MaybeUninit::<i32>::uninit().assume_init() };
|
LL | let i = unsafe { std::mem::MaybeUninit::<i32>::uninit().assume_init() };
|
||||||
@@ -9,6 +9,11 @@ LL | let i = unsafe { std::mem::MaybeUninit::<i32>::uninit().assume_init() }
|
|||||||
= note: BACKTRACE:
|
= note: BACKTRACE:
|
||||||
= note: inside `main` at tests/fail/validity/invalid_int_op.rs:LL:CC
|
= note: inside `main` at tests/fail/validity/invalid_int_op.rs:LL:CC
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0x0..0x4], in this allocation:
|
||||||
|
ALLOC (stack variable, size: 4, align: 4) {
|
||||||
|
__ __ __ __ │ ░░░░
|
||||||
|
}
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|||||||
@@ -20,6 +20,6 @@ fn partial_init() {
|
|||||||
assert!(*slice_ptr == 0);
|
assert!(*slice_ptr == 0);
|
||||||
assert!(*slice_ptr.offset(1) == 0);
|
assert!(*slice_ptr.offset(1) == 0);
|
||||||
// Reading the third is UB!
|
// Reading the third is UB!
|
||||||
let _val = *slice_ptr.offset(2); //~ ERROR: Undefined Behavior: using uninitialized data
|
let _val = *slice_ptr.offset(2); //~ ERROR: /Undefined Behavior: reading memory.*, but memory is uninitialized/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ note: inside `main`
|
|||||||
LL | partial_init();
|
LL | partial_init();
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
|
error: Undefined Behavior: reading memory at ALLOC[0x2..0x3], but memory is uninitialized at [0x2..0x3], and this operation requires initialized memory
|
||||||
--> tests/native-lib/fail/tracing/partial_init.rs:LL:CC
|
--> tests/native-lib/fail/tracing/partial_init.rs:LL:CC
|
||||||
|
|
|
|
||||||
LL | let _val = *slice_ptr.offset(2);
|
LL | let _val = *slice_ptr.offset(2);
|
||||||
@@ -33,6 +33,11 @@ note: inside `main`
|
|||||||
LL | partial_init();
|
LL | partial_init();
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Uninitialized memory occurred at ALLOC[0x2..0x3], in this allocation:
|
||||||
|
ALLOC (stack variable, size: 3, align: 1) {
|
||||||
|
╾00[wildcard] (1 ptr byte)╼ ╾00[wildcard] (1 ptr byte)╼ __ │ ━━░
|
||||||
|
}
|
||||||
|
|
||||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||||
|
|
||||||
error: aborting due to 1 previous error; 1 warning emitted
|
error: aborting due to 1 previous error; 1 warning emitted
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC0[0x0..0x4], but memory is uninitialized at [0x1..0x4], and this operation requires initialized memory
|
||||||
--> $DIR/invalid-patterns.rs:40:32
|
--> $DIR/invalid-patterns.rs:40:32
|
||||||
|
|
|
|
||||||
LL | get_flag::<false, { unsafe { char_raw.character } }>();
|
LL | get_flag::<false, { unsafe { char_raw.character } }>();
|
||||||
| ^^^^^^^^^^^^^^^^^^ evaluation of `main::{constant#7}` failed here
|
| ^^^^^^^^^^^^^^^^^^ evaluation of `main::{constant#7}` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 4, align: 4) {
|
||||||
|
ff __ __ __ │ .░░░
|
||||||
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered 0x42, but expected a boolean
|
error[E0080]: constructing invalid value: encountered 0x42, but expected a boolean
|
||||||
--> $DIR/invalid-patterns.rs:42:14
|
--> $DIR/invalid-patterns.rs:42:14
|
||||||
@@ -26,11 +30,15 @@ LL | get_flag::<{ unsafe { bool_raw.boolean } }, { unsafe { char_raw.character
|
|||||||
42 │ B
|
42 │ B
|
||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC1[0x0..0x4], but memory is uninitialized at [0x1..0x4], and this operation requires initialized memory
|
||||||
--> $DIR/invalid-patterns.rs:44:58
|
--> $DIR/invalid-patterns.rs:44:58
|
||||||
|
|
|
|
||||||
LL | get_flag::<{ unsafe { bool_raw.boolean } }, { unsafe { char_raw.character } }>();
|
LL | get_flag::<{ unsafe { bool_raw.boolean } }, { unsafe { char_raw.character } }>();
|
||||||
| ^^^^^^^^^^^^^^^^^^ evaluation of `main::{constant#11}` failed here
|
| ^^^^^^^^^^^^^^^^^^ evaluation of `main::{constant#11}` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 4, align: 4) {
|
||||||
|
ff __ __ __ │ .░░░
|
||||||
|
}
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/invalid-patterns.rs:31:21
|
--> $DIR/invalid-patterns.rs:31:21
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC0[0x0..0x4], but memory is uninitialized at [0x1..0x4], and this operation requires initialized memory
|
||||||
--> $DIR/invalid-patterns.rs:40:32
|
--> $DIR/invalid-patterns.rs:40:32
|
||||||
|
|
|
|
||||||
LL | get_flag::<false, { unsafe { char_raw.character } }>();
|
LL | get_flag::<false, { unsafe { char_raw.character } }>();
|
||||||
| ^^^^^^^^^^^^^^^^^^ evaluation of `main::{constant#7}` failed here
|
| ^^^^^^^^^^^^^^^^^^ evaluation of `main::{constant#7}` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 4, align: 4) {
|
||||||
|
ff __ __ __ │ .░░░
|
||||||
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered 0x42, but expected a boolean
|
error[E0080]: constructing invalid value: encountered 0x42, but expected a boolean
|
||||||
--> $DIR/invalid-patterns.rs:42:14
|
--> $DIR/invalid-patterns.rs:42:14
|
||||||
@@ -26,11 +30,15 @@ LL | get_flag::<{ unsafe { bool_raw.boolean } }, { unsafe { char_raw.character
|
|||||||
42 │ B
|
42 │ B
|
||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC1[0x0..0x4], but memory is uninitialized at [0x1..0x4], and this operation requires initialized memory
|
||||||
--> $DIR/invalid-patterns.rs:44:58
|
--> $DIR/invalid-patterns.rs:44:58
|
||||||
|
|
|
|
||||||
LL | get_flag::<{ unsafe { bool_raw.boolean } }, { unsafe { char_raw.character } }>();
|
LL | get_flag::<{ unsafe { bool_raw.boolean } }, { unsafe { char_raw.character } }>();
|
||||||
| ^^^^^^^^^^^^^^^^^^ evaluation of `main::{constant#11}` failed here
|
| ^^^^^^^^^^^^^^^^^^ evaluation of `main::{constant#11}` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 4, align: 4) {
|
||||||
|
ff __ __ __ │ .░░░
|
||||||
|
}
|
||||||
|
|
||||||
error[E0308]: mismatched types
|
error[E0308]: mismatched types
|
||||||
--> $DIR/invalid-patterns.rs:31:21
|
--> $DIR/invalid-patterns.rs:31:21
|
||||||
|
|||||||
@@ -33,12 +33,20 @@ error[E0080]: reading memory at ALLOC2[0x0..0x1], but memory is uninitialized at
|
|||||||
|
|
|
|
||||||
LL | compare_bytes(MaybeUninit::uninit().as_ptr(), [1].as_ptr(), 1)
|
LL | compare_bytes(MaybeUninit::uninit().as_ptr(), [1].as_ptr(), 1)
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `main::LHS_UNINIT` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `main::LHS_UNINIT` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 1, align: 1) {
|
||||||
|
__ │ ░
|
||||||
|
}
|
||||||
|
|
||||||
error[E0080]: reading memory at ALLOC3[0x0..0x1], but memory is uninitialized at [0x0..0x1], and this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC3[0x0..0x1], but memory is uninitialized at [0x0..0x1], and this operation requires initialized memory
|
||||||
--> $DIR/const-compare-bytes-ub.rs:33:9
|
--> $DIR/const-compare-bytes-ub.rs:33:9
|
||||||
|
|
|
|
||||||
LL | compare_bytes([1].as_ptr(), MaybeUninit::uninit().as_ptr(), 1)
|
LL | compare_bytes([1].as_ptr(), MaybeUninit::uninit().as_ptr(), 1)
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `main::RHS_UNINIT` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `main::RHS_UNINIT` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 1, align: 1) {
|
||||||
|
__ │ ░
|
||||||
|
}
|
||||||
|
|
||||||
error[E0080]: unable to turn pointer into integer
|
error[E0080]: unable to turn pointer into integer
|
||||||
--> $DIR/const-compare-bytes-ub.rs:37:9
|
--> $DIR/const-compare-bytes-ub.rs:37:9
|
||||||
|
|||||||
13
tests/ui/consts/const-err-enum-discriminant.32bit.stderr
Normal file
13
tests/ui/consts/const-err-enum-discriminant.32bit.stderr
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
error[E0080]: reading memory at ALLOC0[0x0..0x4], but memory is uninitialized at [0x0..0x4], and this operation requires initialized memory
|
||||||
|
--> $DIR/const-err-enum-discriminant.rs:10:21
|
||||||
|
|
|
||||||
|
LL | Boo = [unsafe { Foo { b: () }.a }; 4][3],
|
||||||
|
| ^^^^^^^^^^^^^^^ evaluation of `Bar::Boo::{constant#0}` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 4, align: 4) {
|
||||||
|
__ __ __ __ │ ░░░░
|
||||||
|
}
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0080`.
|
||||||
13
tests/ui/consts/const-err-enum-discriminant.64bit.stderr
Normal file
13
tests/ui/consts/const-err-enum-discriminant.64bit.stderr
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
error[E0080]: reading memory at ALLOC0[0x0..0x8], but memory is uninitialized at [0x0..0x8], and this operation requires initialized memory
|
||||||
|
--> $DIR/const-err-enum-discriminant.rs:10:21
|
||||||
|
|
|
||||||
|
LL | Boo = [unsafe { Foo { b: () }.a }; 4][3],
|
||||||
|
| ^^^^^^^^^^^^^^^ evaluation of `Bar::Boo::{constant#0}` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 8, align: 8) {
|
||||||
|
__ __ __ __ __ __ __ __ │ ░░░░░░░░
|
||||||
|
}
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0080`.
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
//@ stderr-per-bitwidth
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
union Foo {
|
union Foo {
|
||||||
a: isize,
|
a: isize,
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
|
||||||
--> $DIR/const-err-enum-discriminant.rs:8:21
|
|
||||||
|
|
|
||||||
LL | Boo = [unsafe { Foo { b: () }.a }; 4][3],
|
|
||||||
| ^^^^^^^^^^^^^^^ evaluation of `Bar::Boo::{constant#0}` failed here
|
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0080`.
|
|
||||||
@@ -43,11 +43,15 @@ LL | const I32_REF_U64_UNION: u64 = unsafe { Nonsense { int_32_ref: &3 }.uin
|
|||||||
= help: this code performed an operation that depends on the underlying bytes representing a pointer
|
= help: this code performed an operation that depends on the underlying bytes representing a pointer
|
||||||
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
||||||
|
|
||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC2[0x0..0x10], but memory is uninitialized at [0x8..0x10], and this operation requires initialized memory
|
||||||
--> $DIR/const-pointer-values-in-various-types.rs:42:47
|
--> $DIR/const-pointer-values-in-various-types.rs:42:47
|
||||||
|
|
|
|
||||||
LL | const I32_REF_U128_UNION: u128 = unsafe { Nonsense { int_32_ref: &3 }.uint_128 };
|
LL | const I32_REF_U128_UNION: u128 = unsafe { Nonsense { int_32_ref: &3 }.uint_128 };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `main::I32_REF_U128_UNION` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `main::I32_REF_U128_UNION` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 16, align: 16) {
|
||||||
|
╾ALLOC0<imm>╼ __ __ __ __ __ __ __ __ │ ╾──────╼░░░░░░░░
|
||||||
|
}
|
||||||
|
|
||||||
error[E0080]: unable to turn pointer into integer
|
error[E0080]: unable to turn pointer into integer
|
||||||
--> $DIR/const-pointer-values-in-various-types.rs:45:43
|
--> $DIR/const-pointer-values-in-various-types.rs:45:43
|
||||||
@@ -85,11 +89,15 @@ LL | const I32_REF_I64_UNION: i64 = unsafe { Nonsense { int_32_ref: &3 }.int
|
|||||||
= help: this code performed an operation that depends on the underlying bytes representing a pointer
|
= help: this code performed an operation that depends on the underlying bytes representing a pointer
|
||||||
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
||||||
|
|
||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC3[0x0..0x10], but memory is uninitialized at [0x8..0x10], and this operation requires initialized memory
|
||||||
--> $DIR/const-pointer-values-in-various-types.rs:57:47
|
--> $DIR/const-pointer-values-in-various-types.rs:57:47
|
||||||
|
|
|
|
||||||
LL | const I32_REF_I128_UNION: i128 = unsafe { Nonsense { int_32_ref: &3 }.int_128 };
|
LL | const I32_REF_I128_UNION: i128 = unsafe { Nonsense { int_32_ref: &3 }.int_128 };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `main::I32_REF_I128_UNION` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `main::I32_REF_I128_UNION` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 16, align: 16) {
|
||||||
|
╾ALLOC1<imm>╼ __ __ __ __ __ __ __ __ │ ╾──────╼░░░░░░░░
|
||||||
|
}
|
||||||
|
|
||||||
error[E0080]: unable to turn pointer into integer
|
error[E0080]: unable to turn pointer into integer
|
||||||
--> $DIR/const-pointer-values-in-various-types.rs:60:45
|
--> $DIR/const-pointer-values-in-various-types.rs:60:45
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC0[0x1..0x2], but memory is uninitialized at [0x1..0x2], and this operation requires initialized memory
|
||||||
--> $DIR/ub-enum-overwrite.rs:11:14
|
--> $DIR/ub-enum-overwrite.rs:11:14
|
||||||
|
|
|
|
||||||
LL | unsafe { *p }
|
LL | unsafe { *p }
|
||||||
| ^^ evaluation of `_` failed here
|
| ^^ evaluation of `_` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 2, align: 1) {
|
||||||
|
01 __ │ .░
|
||||||
|
}
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
// Strip out raw byte dumps to make comparison platform-independent:
|
// Strip out raw byte dumps to make comparison platform-independent:
|
||||||
//@ normalize-stderr: "(the raw bytes of the constant) \(size: [0-9]*, align: [0-9]*\)" -> "$1 (size: $$SIZE, align: $$ALIGN)"
|
//@ normalize-stderr: "(the raw bytes of the constant) \(size: [0-9]*, align: [0-9]*\)" -> "$1 (size: $$SIZE, align: $$ALIGN)"
|
||||||
//@ normalize-stderr: "([0-9a-f][0-9a-f] |╾─*ALLOC[0-9]+(\+[a-z0-9]+)?(<imm>)?─*╼ )+ *│.*" -> "HEX_DUMP"
|
//@ normalize-stderr: "([0-9a-f][0-9a-f] |__ |╾─*ALLOC[0-9]+(\+[a-z0-9]+)?(<imm>)?─*╼ )+ *│.*" -> "HEX_DUMP"
|
||||||
//@ normalize-stderr: "0x0+" -> "0x0"
|
//@ normalize-stderr: "0x0+" -> "0x0"
|
||||||
|
//@ normalize-stderr: "0x[0-9](\.\.|\])" -> "0x%$1"
|
||||||
//@ dont-require-annotations: NOTE
|
//@ dont-require-annotations: NOTE
|
||||||
|
|
||||||
#![feature(never_type)]
|
#![feature(never_type)]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
error[E0080]: constructing invalid value at .<enum-tag>: encountered 0x01, but expected a valid enum tag
|
error[E0080]: constructing invalid value at .<enum-tag>: encountered 0x01, but expected a valid enum tag
|
||||||
--> $DIR/ub-enum.rs:29:1
|
--> $DIR/ub-enum.rs:30:1
|
||||||
|
|
|
|
||||||
LL | const BAD_ENUM: Enum = unsafe { mem::transmute(1usize) };
|
LL | const BAD_ENUM: Enum = unsafe { mem::transmute(1usize) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -10,7 +10,7 @@ LL | const BAD_ENUM: Enum = unsafe { mem::transmute(1usize) };
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: unable to turn pointer into integer
|
error[E0080]: unable to turn pointer into integer
|
||||||
--> $DIR/ub-enum.rs:32:1
|
--> $DIR/ub-enum.rs:33:1
|
||||||
|
|
|
|
||||||
LL | const BAD_ENUM_PTR: Enum = unsafe { mem::transmute(&1) };
|
LL | const BAD_ENUM_PTR: Enum = unsafe { mem::transmute(&1) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_ENUM_PTR` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_ENUM_PTR` failed here
|
||||||
@@ -19,7 +19,7 @@ LL | const BAD_ENUM_PTR: Enum = unsafe { mem::transmute(&1) };
|
|||||||
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
||||||
|
|
||||||
error[E0080]: unable to turn pointer into integer
|
error[E0080]: unable to turn pointer into integer
|
||||||
--> $DIR/ub-enum.rs:35:1
|
--> $DIR/ub-enum.rs:36:1
|
||||||
|
|
|
|
||||||
LL | const BAD_ENUM_WRAPPED: Wrap<Enum> = unsafe { mem::transmute(&1) };
|
LL | const BAD_ENUM_WRAPPED: Wrap<Enum> = unsafe { mem::transmute(&1) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_ENUM_WRAPPED` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_ENUM_WRAPPED` failed here
|
||||||
@@ -28,7 +28,7 @@ LL | const BAD_ENUM_WRAPPED: Wrap<Enum> = unsafe { mem::transmute(&1) };
|
|||||||
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
||||||
|
|
||||||
error[E0080]: constructing invalid value at .<enum-tag>: encountered 0x0, but expected a valid enum tag
|
error[E0080]: constructing invalid value at .<enum-tag>: encountered 0x0, but expected a valid enum tag
|
||||||
--> $DIR/ub-enum.rs:47:1
|
--> $DIR/ub-enum.rs:48:1
|
||||||
|
|
|
|
||||||
LL | const BAD_ENUM2: Enum2 = unsafe { mem::transmute(0usize) };
|
LL | const BAD_ENUM2: Enum2 = unsafe { mem::transmute(0usize) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -39,7 +39,7 @@ LL | const BAD_ENUM2: Enum2 = unsafe { mem::transmute(0usize) };
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: unable to turn pointer into integer
|
error[E0080]: unable to turn pointer into integer
|
||||||
--> $DIR/ub-enum.rs:49:1
|
--> $DIR/ub-enum.rs:50:1
|
||||||
|
|
|
|
||||||
LL | const BAD_ENUM2_PTR: Enum2 = unsafe { mem::transmute(&0) };
|
LL | const BAD_ENUM2_PTR: Enum2 = unsafe { mem::transmute(&0) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_ENUM2_PTR` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_ENUM2_PTR` failed here
|
||||||
@@ -48,7 +48,7 @@ LL | const BAD_ENUM2_PTR: Enum2 = unsafe { mem::transmute(&0) };
|
|||||||
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
||||||
|
|
||||||
error[E0080]: unable to turn pointer into integer
|
error[E0080]: unable to turn pointer into integer
|
||||||
--> $DIR/ub-enum.rs:52:1
|
--> $DIR/ub-enum.rs:53:1
|
||||||
|
|
|
|
||||||
LL | const BAD_ENUM2_WRAPPED: Wrap<Enum2> = unsafe { mem::transmute(&0) };
|
LL | const BAD_ENUM2_WRAPPED: Wrap<Enum2> = unsafe { mem::transmute(&0) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_ENUM2_WRAPPED` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_ENUM2_WRAPPED` failed here
|
||||||
@@ -56,14 +56,18 @@ LL | const BAD_ENUM2_WRAPPED: Wrap<Enum2> = unsafe { mem::transmute(&0) };
|
|||||||
= help: this code performed an operation that depends on the underlying bytes representing a pointer
|
= help: this code performed an operation that depends on the underlying bytes representing a pointer
|
||||||
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
||||||
|
|
||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC0[0x%..0x%], but memory is uninitialized at [0x%..0x%], and this operation requires initialized memory
|
||||||
--> $DIR/ub-enum.rs:61:41
|
--> $DIR/ub-enum.rs:62:41
|
||||||
|
|
|
|
||||||
LL | const BAD_ENUM2_UNDEF: Enum2 = unsafe { MaybeUninit { uninit: () }.init };
|
LL | const BAD_ENUM2_UNDEF: Enum2 = unsafe { MaybeUninit { uninit: () }.init };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_ENUM2_UNDEF` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_ENUM2_UNDEF` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: $SIZE, align: $ALIGN) {
|
||||||
|
HEX_DUMP
|
||||||
|
}
|
||||||
|
|
||||||
error[E0080]: unable to turn pointer into integer
|
error[E0080]: unable to turn pointer into integer
|
||||||
--> $DIR/ub-enum.rs:65:1
|
--> $DIR/ub-enum.rs:66:1
|
||||||
|
|
|
|
||||||
LL | const BAD_ENUM2_OPTION_PTR: Option<Enum2> = unsafe { mem::transmute(&0) };
|
LL | const BAD_ENUM2_OPTION_PTR: Option<Enum2> = unsafe { mem::transmute(&0) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_ENUM2_OPTION_PTR` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_ENUM2_OPTION_PTR` failed here
|
||||||
@@ -72,7 +76,7 @@ LL | const BAD_ENUM2_OPTION_PTR: Option<Enum2> = unsafe { mem::transmute(&0) };
|
|||||||
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
||||||
|
|
||||||
error[E0080]: constructing invalid value at .<enum-tag>: encountered an uninhabited enum variant
|
error[E0080]: constructing invalid value at .<enum-tag>: encountered an uninhabited enum variant
|
||||||
--> $DIR/ub-enum.rs:82:1
|
--> $DIR/ub-enum.rs:83:1
|
||||||
|
|
|
|
||||||
LL | const BAD_UNINHABITED_VARIANT1: UninhDiscriminant = unsafe { mem::transmute(1u8) };
|
LL | const BAD_UNINHABITED_VARIANT1: UninhDiscriminant = unsafe { mem::transmute(1u8) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -83,7 +87,7 @@ LL | const BAD_UNINHABITED_VARIANT1: UninhDiscriminant = unsafe { mem::transmute
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value at .<enum-tag>: encountered an uninhabited enum variant
|
error[E0080]: constructing invalid value at .<enum-tag>: encountered an uninhabited enum variant
|
||||||
--> $DIR/ub-enum.rs:84:1
|
--> $DIR/ub-enum.rs:85:1
|
||||||
|
|
|
|
||||||
LL | const BAD_UNINHABITED_VARIANT2: UninhDiscriminant = unsafe { mem::transmute(3u8) };
|
LL | const BAD_UNINHABITED_VARIANT2: UninhDiscriminant = unsafe { mem::transmute(3u8) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -94,7 +98,7 @@ LL | const BAD_UNINHABITED_VARIANT2: UninhDiscriminant = unsafe { mem::transmute
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value at .<enum-variant(Some)>.0.1: encountered 0xffffffff, but expected a valid unicode scalar value (in `0..=0x10FFFF` but not in `0xD800..=0xDFFF`)
|
error[E0080]: constructing invalid value at .<enum-variant(Some)>.0.1: encountered 0xffffffff, but expected a valid unicode scalar value (in `0..=0x10FFFF` but not in `0xD800..=0xDFFF`)
|
||||||
--> $DIR/ub-enum.rs:92:1
|
--> $DIR/ub-enum.rs:93:1
|
||||||
|
|
|
|
||||||
LL | const BAD_OPTION_CHAR: Option<(char, char)> = Some(('x', unsafe { mem::transmute(!0u32) }));
|
LL | const BAD_OPTION_CHAR: Option<(char, char)> = Some(('x', unsafe { mem::transmute(!0u32) }));
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -105,19 +109,19 @@ LL | const BAD_OPTION_CHAR: Option<(char, char)> = Some(('x', unsafe { mem::tran
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value at .<enum-tag>: encountered an uninhabited enum variant
|
error[E0080]: constructing invalid value at .<enum-tag>: encountered an uninhabited enum variant
|
||||||
--> $DIR/ub-enum.rs:97:77
|
--> $DIR/ub-enum.rs:98:77
|
||||||
|
|
|
|
||||||
LL | const BAD_UNINHABITED_WITH_DATA1: Result<(i32, Never), (i32, !)> = unsafe { mem::transmute(0u64) };
|
LL | const BAD_UNINHABITED_WITH_DATA1: Result<(i32, Never), (i32, !)> = unsafe { mem::transmute(0u64) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_UNINHABITED_WITH_DATA1` failed here
|
| ^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_UNINHABITED_WITH_DATA1` failed here
|
||||||
|
|
||||||
error[E0080]: constructing invalid value at .<enum-tag>: encountered an uninhabited enum variant
|
error[E0080]: constructing invalid value at .<enum-tag>: encountered an uninhabited enum variant
|
||||||
--> $DIR/ub-enum.rs:99:77
|
--> $DIR/ub-enum.rs:100:77
|
||||||
|
|
|
|
||||||
LL | const BAD_UNINHABITED_WITH_DATA2: Result<(i32, !), (i32, Never)> = unsafe { mem::transmute(0u64) };
|
LL | const BAD_UNINHABITED_WITH_DATA2: Result<(i32, !), (i32, Never)> = unsafe { mem::transmute(0u64) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_UNINHABITED_WITH_DATA2` failed here
|
| ^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_UNINHABITED_WITH_DATA2` failed here
|
||||||
|
|
||||||
error[E0080]: read discriminant of an uninhabited enum variant
|
error[E0080]: read discriminant of an uninhabited enum variant
|
||||||
--> $DIR/ub-enum.rs:105:9
|
--> $DIR/ub-enum.rs:106:9
|
||||||
|
|
|
|
||||||
LL | std::mem::discriminant(&*(&() as *const () as *const Never));
|
LL | std::mem::discriminant(&*(&() as *const () as *const Never));
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `TEST_ICE_89765` failed inside this call
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `TEST_ICE_89765` failed inside this call
|
||||||
|
|||||||
@@ -37,11 +37,15 @@ LL | const NULL_USIZE: NonZero<usize> = unsafe { mem::transmute(0usize) };
|
|||||||
HEX_DUMP
|
HEX_DUMP
|
||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC2[0x0..0x1], but memory is uninitialized at [0x0..0x1], and this operation requires initialized memory
|
||||||
--> $DIR/ub-nonnull.rs:36:38
|
--> $DIR/ub-nonnull.rs:36:38
|
||||||
|
|
|
|
||||||
LL | const UNINIT: NonZero<u8> = unsafe { MaybeUninit { uninit: () }.init };
|
LL | const UNINIT: NonZero<u8> = unsafe { MaybeUninit { uninit: () }.init };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `UNINIT` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `UNINIT` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: $SIZE, align: $ALIGN) {
|
||||||
|
__ │ ░
|
||||||
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered 42, but expected something in the range 10..=30
|
error[E0080]: constructing invalid value: encountered 42, but expected something in the range 10..=30
|
||||||
--> $DIR/ub-nonnull.rs:44:1
|
--> $DIR/ub-nonnull.rs:44:1
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
// ignore-tidy-linelength
|
// ignore-tidy-linelength
|
||||||
// Strip out raw byte dumps to make comparison platform-independent:
|
// Strip out raw byte dumps to make comparison platform-independent:
|
||||||
//@ normalize-stderr: "(the raw bytes of the constant) \(size: [0-9]*, align: [0-9]*\)" -> "$1 (size: $$SIZE, align: $$ALIGN)"
|
//@ normalize-stderr: "(the raw bytes of the constant) \(size: [0-9]*, align: [0-9]*\)" -> "$1 (size: $$SIZE, align: $$ALIGN)"
|
||||||
//@ normalize-stderr: "([0-9a-f][0-9a-f] |╾─*ALLOC[0-9]+(\+[a-z0-9]+)?(<imm>)?─*╼ )+ *│.*" -> "HEX_DUMP"
|
//@ normalize-stderr: "([0-9a-f][0-9a-f] |__ |╾─*ALLOC[0-9]+(\+[a-z0-9]+)?(<imm>)?─*╼ )+ *│.*" -> "HEX_DUMP"
|
||||||
//@ dont-require-annotations: NOTE
|
//@ dont-require-annotations: NOTE
|
||||||
|
//@ normalize-stderr: "0x[0-9](\.\.|\])" -> "0x%$1"
|
||||||
|
|
||||||
#![allow(invalid_value)]
|
#![allow(invalid_value)]
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
error[E0080]: constructing invalid value: encountered an unaligned reference (required 2 byte alignment but found 1)
|
error[E0080]: constructing invalid value: encountered an unaligned reference (required 2 byte alignment but found 1)
|
||||||
--> $DIR/ub-ref-ptr.rs:17:1
|
--> $DIR/ub-ref-ptr.rs:18:1
|
||||||
|
|
|
|
||||||
LL | const UNALIGNED: &u16 = unsafe { mem::transmute(&[0u8; 4]) };
|
LL | const UNALIGNED: &u16 = unsafe { mem::transmute(&[0u8; 4]) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -10,7 +10,7 @@ LL | const UNALIGNED: &u16 = unsafe { mem::transmute(&[0u8; 4]) };
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered an unaligned box (required 2 byte alignment but found 1)
|
error[E0080]: constructing invalid value: encountered an unaligned box (required 2 byte alignment but found 1)
|
||||||
--> $DIR/ub-ref-ptr.rs:20:1
|
--> $DIR/ub-ref-ptr.rs:21:1
|
||||||
|
|
|
|
||||||
LL | const UNALIGNED_BOX: Box<u16> = unsafe { mem::transmute(&[0u8; 4]) };
|
LL | const UNALIGNED_BOX: Box<u16> = unsafe { mem::transmute(&[0u8; 4]) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -21,7 +21,7 @@ LL | const UNALIGNED_BOX: Box<u16> = unsafe { mem::transmute(&[0u8; 4]) };
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered a null reference
|
error[E0080]: constructing invalid value: encountered a null reference
|
||||||
--> $DIR/ub-ref-ptr.rs:23:1
|
--> $DIR/ub-ref-ptr.rs:24:1
|
||||||
|
|
|
|
||||||
LL | const NULL: &u16 = unsafe { mem::transmute(0usize) };
|
LL | const NULL: &u16 = unsafe { mem::transmute(0usize) };
|
||||||
| ^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -32,7 +32,7 @@ LL | const NULL: &u16 = unsafe { mem::transmute(0usize) };
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered a null box
|
error[E0080]: constructing invalid value: encountered a null box
|
||||||
--> $DIR/ub-ref-ptr.rs:26:1
|
--> $DIR/ub-ref-ptr.rs:27:1
|
||||||
|
|
|
|
||||||
LL | const NULL_BOX: Box<u16> = unsafe { mem::transmute(0usize) };
|
LL | const NULL_BOX: Box<u16> = unsafe { mem::transmute(0usize) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -43,7 +43,7 @@ LL | const NULL_BOX: Box<u16> = unsafe { mem::transmute(0usize) };
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: unable to turn pointer into integer
|
error[E0080]: unable to turn pointer into integer
|
||||||
--> $DIR/ub-ref-ptr.rs:33:1
|
--> $DIR/ub-ref-ptr.rs:34:1
|
||||||
|
|
|
|
||||||
LL | const REF_AS_USIZE: usize = unsafe { mem::transmute(&0) };
|
LL | const REF_AS_USIZE: usize = unsafe { mem::transmute(&0) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `REF_AS_USIZE` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `REF_AS_USIZE` failed here
|
||||||
@@ -52,7 +52,7 @@ LL | const REF_AS_USIZE: usize = unsafe { mem::transmute(&0) };
|
|||||||
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
||||||
|
|
||||||
error[E0080]: unable to turn pointer into integer
|
error[E0080]: unable to turn pointer into integer
|
||||||
--> $DIR/ub-ref-ptr.rs:36:39
|
--> $DIR/ub-ref-ptr.rs:37:39
|
||||||
|
|
|
|
||||||
LL | const REF_AS_USIZE_SLICE: &[usize] = &[unsafe { mem::transmute(&0) }];
|
LL | const REF_AS_USIZE_SLICE: &[usize] = &[unsafe { mem::transmute(&0) }];
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `REF_AS_USIZE_SLICE` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `REF_AS_USIZE_SLICE` failed here
|
||||||
@@ -61,13 +61,13 @@ LL | const REF_AS_USIZE_SLICE: &[usize] = &[unsafe { mem::transmute(&0) }];
|
|||||||
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
||||||
|
|
||||||
note: erroneous constant encountered
|
note: erroneous constant encountered
|
||||||
--> $DIR/ub-ref-ptr.rs:36:38
|
--> $DIR/ub-ref-ptr.rs:37:38
|
||||||
|
|
|
|
||||||
LL | const REF_AS_USIZE_SLICE: &[usize] = &[unsafe { mem::transmute(&0) }];
|
LL | const REF_AS_USIZE_SLICE: &[usize] = &[unsafe { mem::transmute(&0) }];
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error[E0080]: unable to turn pointer into integer
|
error[E0080]: unable to turn pointer into integer
|
||||||
--> $DIR/ub-ref-ptr.rs:39:86
|
--> $DIR/ub-ref-ptr.rs:40:86
|
||||||
|
|
|
|
||||||
LL | const REF_AS_USIZE_BOX_SLICE: Box<[usize]> = unsafe { mem::transmute::<&[usize], _>(&[mem::transmute(&0)]) };
|
LL | const REF_AS_USIZE_BOX_SLICE: Box<[usize]> = unsafe { mem::transmute::<&[usize], _>(&[mem::transmute(&0)]) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^ evaluation of `REF_AS_USIZE_BOX_SLICE` failed here
|
| ^^^^^^^^^^^^^^^^^^^^ evaluation of `REF_AS_USIZE_BOX_SLICE` failed here
|
||||||
@@ -76,13 +76,13 @@ LL | const REF_AS_USIZE_BOX_SLICE: Box<[usize]> = unsafe { mem::transmute::<&[us
|
|||||||
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
||||||
|
|
||||||
note: erroneous constant encountered
|
note: erroneous constant encountered
|
||||||
--> $DIR/ub-ref-ptr.rs:39:85
|
--> $DIR/ub-ref-ptr.rs:40:85
|
||||||
|
|
|
|
||||||
LL | const REF_AS_USIZE_BOX_SLICE: Box<[usize]> = unsafe { mem::transmute::<&[usize], _>(&[mem::transmute(&0)]) };
|
LL | const REF_AS_USIZE_BOX_SLICE: Box<[usize]> = unsafe { mem::transmute::<&[usize], _>(&[mem::transmute(&0)]) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered a dangling reference (0x539[noalloc] has no provenance)
|
error[E0080]: constructing invalid value: encountered a dangling reference (0x539[noalloc] has no provenance)
|
||||||
--> $DIR/ub-ref-ptr.rs:42:1
|
--> $DIR/ub-ref-ptr.rs:43:1
|
||||||
|
|
|
|
||||||
LL | const USIZE_AS_REF: &'static u8 = unsafe { mem::transmute(1337usize) };
|
LL | const USIZE_AS_REF: &'static u8 = unsafe { mem::transmute(1337usize) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -93,7 +93,7 @@ LL | const USIZE_AS_REF: &'static u8 = unsafe { mem::transmute(1337usize) };
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered a dangling box (0x539[noalloc] has no provenance)
|
error[E0080]: constructing invalid value: encountered a dangling box (0x539[noalloc] has no provenance)
|
||||||
--> $DIR/ub-ref-ptr.rs:45:1
|
--> $DIR/ub-ref-ptr.rs:46:1
|
||||||
|
|
|
|
||||||
LL | const USIZE_AS_BOX: Box<u8> = unsafe { mem::transmute(1337usize) };
|
LL | const USIZE_AS_BOX: Box<u8> = unsafe { mem::transmute(1337usize) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -103,14 +103,18 @@ LL | const USIZE_AS_BOX: Box<u8> = unsafe { mem::transmute(1337usize) };
|
|||||||
HEX_DUMP
|
HEX_DUMP
|
||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC3[0x%..0x%], but memory is uninitialized at [0x%..0x%], and this operation requires initialized memory
|
||||||
--> $DIR/ub-ref-ptr.rs:48:41
|
--> $DIR/ub-ref-ptr.rs:49:41
|
||||||
|
|
|
|
||||||
LL | const UNINIT_PTR: *const i32 = unsafe { MaybeUninit { uninit: () }.init };
|
LL | const UNINIT_PTR: *const i32 = unsafe { MaybeUninit { uninit: () }.init };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `UNINIT_PTR` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `UNINIT_PTR` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: $SIZE, align: $ALIGN) {
|
||||||
|
HEX_DUMP
|
||||||
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered null pointer, but expected a function pointer
|
error[E0080]: constructing invalid value: encountered null pointer, but expected a function pointer
|
||||||
--> $DIR/ub-ref-ptr.rs:51:1
|
--> $DIR/ub-ref-ptr.rs:52:1
|
||||||
|
|
|
|
||||||
LL | const NULL_FN_PTR: fn() = unsafe { mem::transmute(0usize) };
|
LL | const NULL_FN_PTR: fn() = unsafe { mem::transmute(0usize) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -120,14 +124,18 @@ LL | const NULL_FN_PTR: fn() = unsafe { mem::transmute(0usize) };
|
|||||||
HEX_DUMP
|
HEX_DUMP
|
||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC4[0x%..0x%], but memory is uninitialized at [0x%..0x%], and this operation requires initialized memory
|
||||||
--> $DIR/ub-ref-ptr.rs:53:38
|
--> $DIR/ub-ref-ptr.rs:54:38
|
||||||
|
|
|
|
||||||
LL | const UNINIT_FN_PTR: fn() = unsafe { MaybeUninit { uninit: () }.init };
|
LL | const UNINIT_FN_PTR: fn() = unsafe { MaybeUninit { uninit: () }.init };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `UNINIT_FN_PTR` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `UNINIT_FN_PTR` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: $SIZE, align: $ALIGN) {
|
||||||
|
HEX_DUMP
|
||||||
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered 0xd[noalloc], but expected a function pointer
|
error[E0080]: constructing invalid value: encountered 0xd[noalloc], but expected a function pointer
|
||||||
--> $DIR/ub-ref-ptr.rs:55:1
|
--> $DIR/ub-ref-ptr.rs:56:1
|
||||||
|
|
|
|
||||||
LL | const DANGLING_FN_PTR: fn() = unsafe { mem::transmute(13usize) };
|
LL | const DANGLING_FN_PTR: fn() = unsafe { mem::transmute(13usize) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -138,7 +146,7 @@ LL | const DANGLING_FN_PTR: fn() = unsafe { mem::transmute(13usize) };
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered ALLOC2<imm>, but expected a function pointer
|
error[E0080]: constructing invalid value: encountered ALLOC2<imm>, but expected a function pointer
|
||||||
--> $DIR/ub-ref-ptr.rs:57:1
|
--> $DIR/ub-ref-ptr.rs:58:1
|
||||||
|
|
|
|
||||||
LL | const DATA_FN_PTR: fn() = unsafe { mem::transmute(&13) };
|
LL | const DATA_FN_PTR: fn() = unsafe { mem::transmute(&13) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -149,7 +157,7 @@ LL | const DATA_FN_PTR: fn() = unsafe { mem::transmute(&13) };
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: accessing memory based on pointer with alignment 1, but alignment 4 is required
|
error[E0080]: accessing memory based on pointer with alignment 1, but alignment 4 is required
|
||||||
--> $DIR/ub-ref-ptr.rs:64:5
|
--> $DIR/ub-ref-ptr.rs:65:5
|
||||||
|
|
|
|
||||||
LL | ptr.read();
|
LL | ptr.read();
|
||||||
| ^^^^^^^^^^ evaluation of `UNALIGNED_READ` failed here
|
| ^^^^^^^^^^ evaluation of `UNALIGNED_READ` failed here
|
||||||
|
|||||||
@@ -6,9 +6,10 @@ use std::{ptr, mem};
|
|||||||
|
|
||||||
// Strip out raw byte dumps to make comparison platform-independent:
|
// Strip out raw byte dumps to make comparison platform-independent:
|
||||||
//@ normalize-stderr: "(the raw bytes of the constant) \(size: [0-9]*, align: [0-9]*\)" -> "$1 (size: $$SIZE, align: $$ALIGN)"
|
//@ normalize-stderr: "(the raw bytes of the constant) \(size: [0-9]*, align: [0-9]*\)" -> "$1 (size: $$SIZE, align: $$ALIGN)"
|
||||||
//@ normalize-stderr: "([0-9a-f][0-9a-f] |╾─*ALLOC[0-9]+(\+[a-z0-9]+)?(<imm>)?─*╼ )+ *│.*" -> "HEX_DUMP"
|
//@ normalize-stderr: "([0-9a-f][0-9a-f] |__ |╾─*ALLOC[0-9]+(\+[a-z0-9]+)?(<imm>)?─*╼ )+ *│.*" -> "HEX_DUMP"
|
||||||
//@ normalize-stderr: "offset \d+" -> "offset N"
|
//@ normalize-stderr: "offset \d+" -> "offset N"
|
||||||
//@ normalize-stderr: "size \d+" -> "size N"
|
//@ normalize-stderr: "size \d+" -> "size N"
|
||||||
|
//@ normalize-stderr: "0x[0-9](\.\.|\])" -> "0x%$1"
|
||||||
//@ dont-require-annotations: NOTE
|
//@ dont-require-annotations: NOTE
|
||||||
|
|
||||||
/// A newtype wrapper to prevent MIR generation from inserting reborrows that would affect the error
|
/// A newtype wrapper to prevent MIR generation from inserting reborrows that would affect the error
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
error[E0080]: constructing invalid value: encountered a dangling reference (going beyond the bounds of its allocation)
|
error[E0080]: constructing invalid value: encountered a dangling reference (going beyond the bounds of its allocation)
|
||||||
--> $DIR/ub-wide-ptr.rs:39:1
|
--> $DIR/ub-wide-ptr.rs:40:1
|
||||||
|
|
|
|
||||||
LL | const STR_TOO_LONG: &str = unsafe { mem::transmute((&42u8, 999usize)) };
|
LL | const STR_TOO_LONG: &str = unsafe { mem::transmute((&42u8, 999usize)) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -10,7 +10,7 @@ LL | const STR_TOO_LONG: &str = unsafe { mem::transmute((&42u8, 999usize)) };
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value at .0: encountered invalid reference metadata: slice is bigger than largest supported object
|
error[E0080]: constructing invalid value at .0: encountered invalid reference metadata: slice is bigger than largest supported object
|
||||||
--> $DIR/ub-wide-ptr.rs:41:1
|
--> $DIR/ub-wide-ptr.rs:42:1
|
||||||
|
|
|
|
||||||
LL | const NESTED_STR_MUCH_TOO_LONG: (&str,) = (unsafe { mem::transmute((&42, usize::MAX)) },);
|
LL | const NESTED_STR_MUCH_TOO_LONG: (&str,) = (unsafe { mem::transmute((&42, usize::MAX)) },);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -21,7 +21,7 @@ LL | const NESTED_STR_MUCH_TOO_LONG: (&str,) = (unsafe { mem::transmute((&42, us
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: unable to turn pointer into integer
|
error[E0080]: unable to turn pointer into integer
|
||||||
--> $DIR/ub-wide-ptr.rs:44:1
|
--> $DIR/ub-wide-ptr.rs:45:1
|
||||||
|
|
|
|
||||||
LL | const STR_LENGTH_PTR: &str = unsafe { mem::transmute((&42u8, &3)) };
|
LL | const STR_LENGTH_PTR: &str = unsafe { mem::transmute((&42u8, &3)) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `STR_LENGTH_PTR` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `STR_LENGTH_PTR` failed here
|
||||||
@@ -30,7 +30,7 @@ LL | const STR_LENGTH_PTR: &str = unsafe { mem::transmute((&42u8, &3)) };
|
|||||||
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
||||||
|
|
||||||
error[E0080]: unable to turn pointer into integer
|
error[E0080]: unable to turn pointer into integer
|
||||||
--> $DIR/ub-wide-ptr.rs:47:1
|
--> $DIR/ub-wide-ptr.rs:48:1
|
||||||
|
|
|
|
||||||
LL | const MY_STR_LENGTH_PTR: &MyStr = unsafe { mem::transmute((&42u8, &3)) };
|
LL | const MY_STR_LENGTH_PTR: &MyStr = unsafe { mem::transmute((&42u8, &3)) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `MY_STR_LENGTH_PTR` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `MY_STR_LENGTH_PTR` failed here
|
||||||
@@ -39,7 +39,7 @@ LL | const MY_STR_LENGTH_PTR: &MyStr = unsafe { mem::transmute((&42u8, &3)) };
|
|||||||
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered invalid reference metadata: slice is bigger than largest supported object
|
error[E0080]: constructing invalid value: encountered invalid reference metadata: slice is bigger than largest supported object
|
||||||
--> $DIR/ub-wide-ptr.rs:49:1
|
--> $DIR/ub-wide-ptr.rs:50:1
|
||||||
|
|
|
|
||||||
LL | const MY_STR_MUCH_TOO_LONG: &MyStr = unsafe { mem::transmute((&42u8, usize::MAX)) };
|
LL | const MY_STR_MUCH_TOO_LONG: &MyStr = unsafe { mem::transmute((&42u8, usize::MAX)) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -50,7 +50,7 @@ LL | const MY_STR_MUCH_TOO_LONG: &MyStr = unsafe { mem::transmute((&42u8, usize:
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value at .<deref>: encountered uninitialized memory, but expected a string
|
error[E0080]: constructing invalid value at .<deref>: encountered uninitialized memory, but expected a string
|
||||||
--> $DIR/ub-wide-ptr.rs:53:1
|
--> $DIR/ub-wide-ptr.rs:54:1
|
||||||
|
|
|
|
||||||
LL | const STR_NO_INIT: &str = unsafe { mem::transmute::<&[_], _>(&[MaybeUninit::<u8> { uninit: () }]) };
|
LL | const STR_NO_INIT: &str = unsafe { mem::transmute::<&[_], _>(&[MaybeUninit::<u8> { uninit: () }]) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -61,7 +61,7 @@ LL | const STR_NO_INIT: &str = unsafe { mem::transmute::<&[_], _>(&[MaybeUninit:
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value at .<deref>.0: encountered uninitialized memory, but expected a string
|
error[E0080]: constructing invalid value at .<deref>.0: encountered uninitialized memory, but expected a string
|
||||||
--> $DIR/ub-wide-ptr.rs:56:1
|
--> $DIR/ub-wide-ptr.rs:57:1
|
||||||
|
|
|
|
||||||
LL | const MYSTR_NO_INIT: &MyStr = unsafe { mem::transmute::<&[_], _>(&[MaybeUninit::<u8> { uninit: () }]) };
|
LL | const MYSTR_NO_INIT: &MyStr = unsafe { mem::transmute::<&[_], _>(&[MaybeUninit::<u8> { uninit: () }]) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -71,14 +71,18 @@ LL | const MYSTR_NO_INIT: &MyStr = unsafe { mem::transmute::<&[_], _>(&[MaybeUni
|
|||||||
HEX_DUMP
|
HEX_DUMP
|
||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC32[0x%..0x%], but memory is uninitialized at [0x%..0x%], and this operation requires initialized memory
|
||||||
--> $DIR/ub-wide-ptr.rs:63:1
|
--> $DIR/ub-wide-ptr.rs:64:1
|
||||||
|
|
|
|
||||||
LL | const SLICE_LENGTH_UNINIT: &[u8] = unsafe {
|
LL | const SLICE_LENGTH_UNINIT: &[u8] = unsafe {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `SLICE_LENGTH_UNINIT` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `SLICE_LENGTH_UNINIT` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: $SIZE, align: $ALIGN) {
|
||||||
|
HEX_DUMP
|
||||||
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered a dangling reference (going beyond the bounds of its allocation)
|
error[E0080]: constructing invalid value: encountered a dangling reference (going beyond the bounds of its allocation)
|
||||||
--> $DIR/ub-wide-ptr.rs:69:1
|
--> $DIR/ub-wide-ptr.rs:70:1
|
||||||
|
|
|
|
||||||
LL | const SLICE_TOO_LONG: &[u8] = unsafe { mem::transmute((&42u8, 999usize)) };
|
LL | const SLICE_TOO_LONG: &[u8] = unsafe { mem::transmute((&42u8, 999usize)) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -89,7 +93,7 @@ LL | const SLICE_TOO_LONG: &[u8] = unsafe { mem::transmute((&42u8, 999usize)) };
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered invalid reference metadata: slice is bigger than largest supported object
|
error[E0080]: constructing invalid value: encountered invalid reference metadata: slice is bigger than largest supported object
|
||||||
--> $DIR/ub-wide-ptr.rs:72:1
|
--> $DIR/ub-wide-ptr.rs:73:1
|
||||||
|
|
|
|
||||||
LL | const SLICE_TOO_LONG_OVERFLOW: &[u32] = unsafe { mem::transmute((&42u32, isize::MAX)) };
|
LL | const SLICE_TOO_LONG_OVERFLOW: &[u32] = unsafe { mem::transmute((&42u32, isize::MAX)) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -100,7 +104,7 @@ LL | const SLICE_TOO_LONG_OVERFLOW: &[u32] = unsafe { mem::transmute((&42u32, is
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: unable to turn pointer into integer
|
error[E0080]: unable to turn pointer into integer
|
||||||
--> $DIR/ub-wide-ptr.rs:75:1
|
--> $DIR/ub-wide-ptr.rs:76:1
|
||||||
|
|
|
|
||||||
LL | const SLICE_LENGTH_PTR: &[u8] = unsafe { mem::transmute((&42u8, &3)) };
|
LL | const SLICE_LENGTH_PTR: &[u8] = unsafe { mem::transmute((&42u8, &3)) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `SLICE_LENGTH_PTR` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `SLICE_LENGTH_PTR` failed here
|
||||||
@@ -109,7 +113,7 @@ LL | const SLICE_LENGTH_PTR: &[u8] = unsafe { mem::transmute((&42u8, &3)) };
|
|||||||
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered a dangling box (going beyond the bounds of its allocation)
|
error[E0080]: constructing invalid value: encountered a dangling box (going beyond the bounds of its allocation)
|
||||||
--> $DIR/ub-wide-ptr.rs:78:1
|
--> $DIR/ub-wide-ptr.rs:79:1
|
||||||
|
|
|
|
||||||
LL | const SLICE_TOO_LONG_BOX: Box<[u8]> = unsafe { mem::transmute((&42u8, 999usize)) };
|
LL | const SLICE_TOO_LONG_BOX: Box<[u8]> = unsafe { mem::transmute((&42u8, 999usize)) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -120,7 +124,7 @@ LL | const SLICE_TOO_LONG_BOX: Box<[u8]> = unsafe { mem::transmute((&42u8, 999us
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: unable to turn pointer into integer
|
error[E0080]: unable to turn pointer into integer
|
||||||
--> $DIR/ub-wide-ptr.rs:81:1
|
--> $DIR/ub-wide-ptr.rs:82:1
|
||||||
|
|
|
|
||||||
LL | const SLICE_LENGTH_PTR_BOX: Box<[u8]> = unsafe { mem::transmute((&42u8, &3)) };
|
LL | const SLICE_LENGTH_PTR_BOX: Box<[u8]> = unsafe { mem::transmute((&42u8, &3)) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `SLICE_LENGTH_PTR_BOX` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `SLICE_LENGTH_PTR_BOX` failed here
|
||||||
@@ -129,7 +133,7 @@ LL | const SLICE_LENGTH_PTR_BOX: Box<[u8]> = unsafe { mem::transmute((&42u8, &3)
|
|||||||
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
|
||||||
|
|
||||||
error[E0080]: constructing invalid value at .<deref>[0]: encountered 0x03, but expected a boolean
|
error[E0080]: constructing invalid value at .<deref>[0]: encountered 0x03, but expected a boolean
|
||||||
--> $DIR/ub-wide-ptr.rs:85:1
|
--> $DIR/ub-wide-ptr.rs:86:1
|
||||||
|
|
|
|
||||||
LL | const SLICE_CONTENT_INVALID: &[bool] = &[unsafe { mem::transmute(3u8) }];
|
LL | const SLICE_CONTENT_INVALID: &[bool] = &[unsafe { mem::transmute(3u8) }];
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -140,13 +144,13 @@ LL | const SLICE_CONTENT_INVALID: &[bool] = &[unsafe { mem::transmute(3u8) }];
|
|||||||
}
|
}
|
||||||
|
|
||||||
note: erroneous constant encountered
|
note: erroneous constant encountered
|
||||||
--> $DIR/ub-wide-ptr.rs:85:40
|
--> $DIR/ub-wide-ptr.rs:86:40
|
||||||
|
|
|
|
||||||
LL | const SLICE_CONTENT_INVALID: &[bool] = &[unsafe { mem::transmute(3u8) }];
|
LL | const SLICE_CONTENT_INVALID: &[bool] = &[unsafe { mem::transmute(3u8) }];
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error[E0080]: constructing invalid value at .<deref>.0: encountered 0x03, but expected a boolean
|
error[E0080]: constructing invalid value at .<deref>.0: encountered 0x03, but expected a boolean
|
||||||
--> $DIR/ub-wide-ptr.rs:91:1
|
--> $DIR/ub-wide-ptr.rs:92:1
|
||||||
|
|
|
|
||||||
LL | const MYSLICE_PREFIX_BAD: &MySliceBool = &MySlice(unsafe { mem::transmute(3u8) }, [false]);
|
LL | const MYSLICE_PREFIX_BAD: &MySliceBool = &MySlice(unsafe { mem::transmute(3u8) }, [false]);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -157,13 +161,13 @@ LL | const MYSLICE_PREFIX_BAD: &MySliceBool = &MySlice(unsafe { mem::transmute(3
|
|||||||
}
|
}
|
||||||
|
|
||||||
note: erroneous constant encountered
|
note: erroneous constant encountered
|
||||||
--> $DIR/ub-wide-ptr.rs:91:42
|
--> $DIR/ub-wide-ptr.rs:92:42
|
||||||
|
|
|
|
||||||
LL | const MYSLICE_PREFIX_BAD: &MySliceBool = &MySlice(unsafe { mem::transmute(3u8) }, [false]);
|
LL | const MYSLICE_PREFIX_BAD: &MySliceBool = &MySlice(unsafe { mem::transmute(3u8) }, [false]);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error[E0080]: constructing invalid value at .<deref>.1[0]: encountered 0x03, but expected a boolean
|
error[E0080]: constructing invalid value at .<deref>.1[0]: encountered 0x03, but expected a boolean
|
||||||
--> $DIR/ub-wide-ptr.rs:94:1
|
--> $DIR/ub-wide-ptr.rs:95:1
|
||||||
|
|
|
|
||||||
LL | const MYSLICE_SUFFIX_BAD: &MySliceBool = &MySlice(true, [unsafe { mem::transmute(3u8) }]);
|
LL | const MYSLICE_SUFFIX_BAD: &MySliceBool = &MySlice(true, [unsafe { mem::transmute(3u8) }]);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -174,19 +178,23 @@ LL | const MYSLICE_SUFFIX_BAD: &MySliceBool = &MySlice(true, [unsafe { mem::tran
|
|||||||
}
|
}
|
||||||
|
|
||||||
note: erroneous constant encountered
|
note: erroneous constant encountered
|
||||||
--> $DIR/ub-wide-ptr.rs:94:42
|
--> $DIR/ub-wide-ptr.rs:95:42
|
||||||
|
|
|
|
||||||
LL | const MYSLICE_SUFFIX_BAD: &MySliceBool = &MySlice(true, [unsafe { mem::transmute(3u8) }]);
|
LL | const MYSLICE_SUFFIX_BAD: &MySliceBool = &MySlice(true, [unsafe { mem::transmute(3u8) }]);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC33[0x%..0x%], but memory is uninitialized at [0x%..0x%], and this operation requires initialized memory
|
||||||
--> $DIR/ub-wide-ptr.rs:101:1
|
--> $DIR/ub-wide-ptr.rs:102:1
|
||||||
|
|
|
|
||||||
LL | const RAW_SLICE_LENGTH_UNINIT: *const [u8] = unsafe {
|
LL | const RAW_SLICE_LENGTH_UNINIT: *const [u8] = unsafe {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `RAW_SLICE_LENGTH_UNINIT` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `RAW_SLICE_LENGTH_UNINIT` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: $SIZE, align: $ALIGN) {
|
||||||
|
HEX_DUMP
|
||||||
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value at .0: encountered ALLOC12<imm>, but expected a vtable pointer
|
error[E0080]: constructing invalid value at .0: encountered ALLOC12<imm>, but expected a vtable pointer
|
||||||
--> $DIR/ub-wide-ptr.rs:109:1
|
--> $DIR/ub-wide-ptr.rs:110:1
|
||||||
|
|
|
|
||||||
LL | const TRAIT_OBJ_SHORT_VTABLE_1: W<&dyn Trait> = unsafe { mem::transmute(W((&92u8, &3u8))) };
|
LL | const TRAIT_OBJ_SHORT_VTABLE_1: W<&dyn Trait> = unsafe { mem::transmute(W((&92u8, &3u8))) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -197,7 +205,7 @@ LL | const TRAIT_OBJ_SHORT_VTABLE_1: W<&dyn Trait> = unsafe { mem::transmute(W((
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value at .0: encountered ALLOC14<imm>, but expected a vtable pointer
|
error[E0080]: constructing invalid value at .0: encountered ALLOC14<imm>, but expected a vtable pointer
|
||||||
--> $DIR/ub-wide-ptr.rs:112:1
|
--> $DIR/ub-wide-ptr.rs:113:1
|
||||||
|
|
|
|
||||||
LL | const TRAIT_OBJ_SHORT_VTABLE_2: W<&dyn Trait> = unsafe { mem::transmute(W((&92u8, &3u64))) };
|
LL | const TRAIT_OBJ_SHORT_VTABLE_2: W<&dyn Trait> = unsafe { mem::transmute(W((&92u8, &3u64))) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -208,7 +216,7 @@ LL | const TRAIT_OBJ_SHORT_VTABLE_2: W<&dyn Trait> = unsafe { mem::transmute(W((
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value at .0: encountered 0x4[noalloc], but expected a vtable pointer
|
error[E0080]: constructing invalid value at .0: encountered 0x4[noalloc], but expected a vtable pointer
|
||||||
--> $DIR/ub-wide-ptr.rs:115:1
|
--> $DIR/ub-wide-ptr.rs:116:1
|
||||||
|
|
|
|
||||||
LL | const TRAIT_OBJ_INT_VTABLE: W<&dyn Trait> = unsafe { mem::transmute(W((&92u8, 4usize))) };
|
LL | const TRAIT_OBJ_INT_VTABLE: W<&dyn Trait> = unsafe { mem::transmute(W((&92u8, 4usize))) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -219,7 +227,7 @@ LL | const TRAIT_OBJ_INT_VTABLE: W<&dyn Trait> = unsafe { mem::transmute(W((&92u
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered ALLOC17<imm>, but expected a vtable pointer
|
error[E0080]: constructing invalid value: encountered ALLOC17<imm>, but expected a vtable pointer
|
||||||
--> $DIR/ub-wide-ptr.rs:117:1
|
--> $DIR/ub-wide-ptr.rs:118:1
|
||||||
|
|
|
|
||||||
LL | const TRAIT_OBJ_UNALIGNED_VTABLE: &dyn Trait = unsafe { mem::transmute((&92u8, &[0u8; 128])) };
|
LL | const TRAIT_OBJ_UNALIGNED_VTABLE: &dyn Trait = unsafe { mem::transmute((&92u8, &[0u8; 128])) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -230,7 +238,7 @@ LL | const TRAIT_OBJ_UNALIGNED_VTABLE: &dyn Trait = unsafe { mem::transmute((&92
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered ALLOC19<imm>, but expected a vtable pointer
|
error[E0080]: constructing invalid value: encountered ALLOC19<imm>, but expected a vtable pointer
|
||||||
--> $DIR/ub-wide-ptr.rs:119:1
|
--> $DIR/ub-wide-ptr.rs:120:1
|
||||||
|
|
|
|
||||||
LL | const TRAIT_OBJ_BAD_DROP_FN_NULL: &dyn Trait = unsafe { mem::transmute((&92u8, &[0usize; 8])) };
|
LL | const TRAIT_OBJ_BAD_DROP_FN_NULL: &dyn Trait = unsafe { mem::transmute((&92u8, &[0usize; 8])) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -241,7 +249,7 @@ LL | const TRAIT_OBJ_BAD_DROP_FN_NULL: &dyn Trait = unsafe { mem::transmute((&92
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered ALLOC21<imm>, but expected a vtable pointer
|
error[E0080]: constructing invalid value: encountered ALLOC21<imm>, but expected a vtable pointer
|
||||||
--> $DIR/ub-wide-ptr.rs:121:1
|
--> $DIR/ub-wide-ptr.rs:122:1
|
||||||
|
|
|
|
||||||
LL | const TRAIT_OBJ_BAD_DROP_FN_INT: &dyn Trait = unsafe { mem::transmute((&92u8, &[1usize; 8])) };
|
LL | const TRAIT_OBJ_BAD_DROP_FN_INT: &dyn Trait = unsafe { mem::transmute((&92u8, &[1usize; 8])) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -252,7 +260,7 @@ LL | const TRAIT_OBJ_BAD_DROP_FN_INT: &dyn Trait = unsafe { mem::transmute((&92u
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value at .0: encountered ALLOC23<imm>, but expected a vtable pointer
|
error[E0080]: constructing invalid value at .0: encountered ALLOC23<imm>, but expected a vtable pointer
|
||||||
--> $DIR/ub-wide-ptr.rs:123:1
|
--> $DIR/ub-wide-ptr.rs:124:1
|
||||||
|
|
|
|
||||||
LL | const TRAIT_OBJ_BAD_DROP_FN_NOT_FN_PTR: W<&dyn Trait> = unsafe { mem::transmute(W((&92u8, &[&42u8; 8]))) };
|
LL | const TRAIT_OBJ_BAD_DROP_FN_NOT_FN_PTR: W<&dyn Trait> = unsafe { mem::transmute(W((&92u8, &[&42u8; 8]))) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -263,7 +271,7 @@ LL | const TRAIT_OBJ_BAD_DROP_FN_NOT_FN_PTR: W<&dyn Trait> = unsafe { mem::trans
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value at .<deref>.<dyn-downcast>: encountered 0x03, but expected a boolean
|
error[E0080]: constructing invalid value at .<deref>.<dyn-downcast>: encountered 0x03, but expected a boolean
|
||||||
--> $DIR/ub-wide-ptr.rs:127:1
|
--> $DIR/ub-wide-ptr.rs:128:1
|
||||||
|
|
|
|
||||||
LL | const TRAIT_OBJ_CONTENT_INVALID: &dyn Trait = unsafe { mem::transmute::<_, &bool>(&3u8) };
|
LL | const TRAIT_OBJ_CONTENT_INVALID: &dyn Trait = unsafe { mem::transmute::<_, &bool>(&3u8) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -274,7 +282,7 @@ LL | const TRAIT_OBJ_CONTENT_INVALID: &dyn Trait = unsafe { mem::transmute::<_,
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered null pointer, but expected a vtable pointer
|
error[E0080]: constructing invalid value: encountered null pointer, but expected a vtable pointer
|
||||||
--> $DIR/ub-wide-ptr.rs:131:1
|
--> $DIR/ub-wide-ptr.rs:132:1
|
||||||
|
|
|
|
||||||
LL | const RAW_TRAIT_OBJ_VTABLE_NULL: *const dyn Trait = unsafe { mem::transmute((&92u8, 0usize)) };
|
LL | const RAW_TRAIT_OBJ_VTABLE_NULL: *const dyn Trait = unsafe { mem::transmute((&92u8, 0usize)) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -285,7 +293,7 @@ LL | const RAW_TRAIT_OBJ_VTABLE_NULL: *const dyn Trait = unsafe { mem::transmute
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered ALLOC28<imm>, but expected a vtable pointer
|
error[E0080]: constructing invalid value: encountered ALLOC28<imm>, but expected a vtable pointer
|
||||||
--> $DIR/ub-wide-ptr.rs:133:1
|
--> $DIR/ub-wide-ptr.rs:134:1
|
||||||
|
|
|
|
||||||
LL | const RAW_TRAIT_OBJ_VTABLE_INVALID: *const dyn Trait = unsafe { mem::transmute((&92u8, &3u64)) };
|
LL | const RAW_TRAIT_OBJ_VTABLE_INVALID: *const dyn Trait = unsafe { mem::transmute((&92u8, &3u64)) };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -296,7 +304,7 @@ LL | const RAW_TRAIT_OBJ_VTABLE_INVALID: *const dyn Trait = unsafe { mem::transm
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered null pointer, but expected a vtable pointer
|
error[E0080]: constructing invalid value: encountered null pointer, but expected a vtable pointer
|
||||||
--> $DIR/ub-wide-ptr.rs:140:1
|
--> $DIR/ub-wide-ptr.rs:141:1
|
||||||
|
|
|
|
||||||
LL | static mut RAW_TRAIT_OBJ_VTABLE_NULL_THROUGH_REF: *const dyn Trait = unsafe {
|
LL | static mut RAW_TRAIT_OBJ_VTABLE_NULL_THROUGH_REF: *const dyn Trait = unsafe {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
@@ -307,7 +315,7 @@ LL | static mut RAW_TRAIT_OBJ_VTABLE_NULL_THROUGH_REF: *const dyn Trait = unsafe
|
|||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered ALLOC31<imm>, but expected a vtable pointer
|
error[E0080]: constructing invalid value: encountered ALLOC31<imm>, but expected a vtable pointer
|
||||||
--> $DIR/ub-wide-ptr.rs:144:1
|
--> $DIR/ub-wide-ptr.rs:145:1
|
||||||
|
|
|
|
||||||
LL | static mut RAW_TRAIT_OBJ_VTABLE_INVALID_THROUGH_REF: *const dyn Trait = unsafe {
|
LL | static mut RAW_TRAIT_OBJ_VTABLE_INVALID_THROUGH_REF: *const dyn Trait = unsafe {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it is undefined behavior to use this value
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
//@ dont-require-annotations: NOTE
|
//@ dont-require-annotations: NOTE
|
||||||
|
//@ normalize-stderr: "(the raw bytes of the constant) \(size: [0-9]*, align: [0-9]*\)" -> "$1 (size: $$SIZE, align: $$ALIGN)"
|
||||||
|
|
||||||
type Field1 = i32;
|
type Field1 = i32;
|
||||||
type Field2 = f32;
|
type Field2 = f32;
|
||||||
|
|||||||
@@ -1,17 +1,21 @@
|
|||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC0[0x0..0x8], but memory is uninitialized at [0x4..0x8], and this operation requires initialized memory
|
||||||
--> $DIR/union-const-eval-field.rs:28:37
|
--> $DIR/union-const-eval-field.rs:29:37
|
||||||
|
|
|
|
||||||
LL | const FIELD3: Field3 = unsafe { UNION.field3 };
|
LL | const FIELD3: Field3 = unsafe { UNION.field3 };
|
||||||
| ^^^^^^^^^^^^ evaluation of `read_field3::FIELD3` failed here
|
| ^^^^^^^^^^^^ evaluation of `read_field3::FIELD3` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: $SIZE, align: $ALIGN) {
|
||||||
|
00 00 80 3f __ __ __ __ │ ...?░░░░
|
||||||
|
}
|
||||||
|
|
||||||
note: erroneous constant encountered
|
note: erroneous constant encountered
|
||||||
--> $DIR/union-const-eval-field.rs:30:5
|
--> $DIR/union-const-eval-field.rs:31:5
|
||||||
|
|
|
|
||||||
LL | FIELD3
|
LL | FIELD3
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
note: erroneous constant encountered
|
note: erroneous constant encountered
|
||||||
--> $DIR/union-const-eval-field.rs:30:5
|
--> $DIR/union-const-eval-field.rs:31:5
|
||||||
|
|
|
|
||||||
LL | FIELD3
|
LL | FIELD3
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|||||||
@@ -1,20 +1,32 @@
|
|||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC0[0x0..0x8], but memory is uninitialized at [0x4..0x8], and this operation requires initialized memory
|
||||||
--> $DIR/union-ice.rs:14:33
|
--> $DIR/union-ice.rs:14:33
|
||||||
|
|
|
|
||||||
LL | const FIELD3: Field3 = unsafe { UNION.field3 };
|
LL | const FIELD3: Field3 = unsafe { UNION.field3 };
|
||||||
| ^^^^^^^^^^^^ evaluation of `FIELD3` failed here
|
| ^^^^^^^^^^^^ evaluation of `FIELD3` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 8, align: 8) {
|
||||||
|
00 00 80 3f __ __ __ __ │ ...?░░░░
|
||||||
|
}
|
||||||
|
|
||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC1[0x0..0x8], but memory is uninitialized at [0x4..0x8], and this operation requires initialized memory
|
||||||
--> $DIR/union-ice.rs:19:17
|
--> $DIR/union-ice.rs:19:17
|
||||||
|
|
|
|
||||||
LL | b: unsafe { UNION.field3 },
|
LL | b: unsafe { UNION.field3 },
|
||||||
| ^^^^^^^^^^^^ evaluation of `FIELD_PATH` failed here
|
| ^^^^^^^^^^^^ evaluation of `FIELD_PATH` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 8, align: 8) {
|
||||||
|
00 00 80 3f __ __ __ __ │ ...?░░░░
|
||||||
|
}
|
||||||
|
|
||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC2[0x0..0x8], but memory is uninitialized at [0x4..0x8], and this operation requires initialized memory
|
||||||
--> $DIR/union-ice.rs:31:18
|
--> $DIR/union-ice.rs:31:18
|
||||||
|
|
|
|
||||||
LL | unsafe { UNION.field3 },
|
LL | unsafe { UNION.field3 },
|
||||||
| ^^^^^^^^^^^^ evaluation of `FIELD_PATH2` failed here
|
| ^^^^^^^^^^^^ evaluation of `FIELD_PATH2` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 8, align: 8) {
|
||||||
|
00 00 80 3f __ __ __ __ │ ...?░░░░
|
||||||
|
}
|
||||||
|
|
||||||
error: aborting due to 3 previous errors
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
|
|||||||
@@ -9,11 +9,15 @@ LL | const BAD_BOOL: bool = unsafe { DummyUnion { u8: 42 }.bool };
|
|||||||
2a │ *
|
2a │ *
|
||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC0[0x0..0x1], but memory is uninitialized at [0x0..0x1], and this operation requires initialized memory
|
||||||
--> $DIR/union-ub.rs:35:36
|
--> $DIR/union-ub.rs:35:36
|
||||||
|
|
|
|
||||||
LL | const UNINIT_BOOL: bool = unsafe { DummyUnion { unit: () }.bool };
|
LL | const UNINIT_BOOL: bool = unsafe { DummyUnion { unit: () }.bool };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `UNINIT_BOOL` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `UNINIT_BOOL` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 1, align: 1) {
|
||||||
|
__ │ ░
|
||||||
|
}
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|||||||
@@ -9,11 +9,15 @@ LL | const BAD_BOOL: bool = unsafe { DummyUnion { u8: 42 }.bool };
|
|||||||
2a │ *
|
2a │ *
|
||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC0[0x0..0x1], but memory is uninitialized at [0x0..0x1], and this operation requires initialized memory
|
||||||
--> $DIR/union-ub.rs:35:36
|
--> $DIR/union-ub.rs:35:36
|
||||||
|
|
|
|
||||||
LL | const UNINIT_BOOL: bool = unsafe { DummyUnion { unit: () }.bool };
|
LL | const UNINIT_BOOL: bool = unsafe { DummyUnion { unit: () }.bool };
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `UNINIT_BOOL` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `UNINIT_BOOL` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 1, align: 1) {
|
||||||
|
__ │ ░
|
||||||
|
}
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,10 @@ error[E0080]: reading memory at ALLOC0[0x0..0x4], but memory is uninitialized at
|
|||||||
|
|
|
|
||||||
LL | std::intrinsics::raw_eq(&(1_u8, 2_u16), &(1_u8, 2_u16))
|
LL | std::intrinsics::raw_eq(&(1_u8, 2_u16), &(1_u8, 2_u16))
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `RAW_EQ_PADDING` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `RAW_EQ_PADDING` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 4, align: 2) {
|
||||||
|
01 __ 02 00 │ .░..
|
||||||
|
}
|
||||||
|
|
||||||
error[E0080]: unable to turn pointer into integer
|
error[E0080]: unable to turn pointer into integer
|
||||||
--> $DIR/intrinsic-raw_eq-const-bad.rs:9:5
|
--> $DIR/intrinsic-raw_eq-const-bad.rs:9:5
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const BAD: pattern_type!(u32 is 1..) = unsafe { std::mem::transmute(0) };
|
|||||||
//~^ ERROR: constructing invalid value: encountered 0
|
//~^ ERROR: constructing invalid value: encountered 0
|
||||||
|
|
||||||
const BAD_UNINIT: pattern_type!(u32 is 1..) =
|
const BAD_UNINIT: pattern_type!(u32 is 1..) =
|
||||||
//~^ ERROR: using uninitialized data, but this operation requires initialized memory
|
//~^ ERROR: this operation requires initialized memory
|
||||||
unsafe { std::mem::transmute(std::mem::MaybeUninit::<u32>::uninit()) };
|
unsafe { std::mem::transmute(std::mem::MaybeUninit::<u32>::uninit()) };
|
||||||
|
|
||||||
const BAD_PTR: pattern_type!(usize is 1..) = unsafe { std::mem::transmute(&42) };
|
const BAD_PTR: pattern_type!(usize is 1..) = unsafe { std::mem::transmute(&42) };
|
||||||
@@ -27,7 +27,7 @@ const BAD_FOO: Foo = Foo(Bar(unsafe { std::mem::transmute(0) }));
|
|||||||
//~^ ERROR: constructing invalid value at .0.0: encountered 0
|
//~^ ERROR: constructing invalid value at .0.0: encountered 0
|
||||||
|
|
||||||
const CHAR_UNINIT: pattern_type!(char is 'A'..'Z') =
|
const CHAR_UNINIT: pattern_type!(char is 'A'..'Z') =
|
||||||
//~^ ERROR: using uninitialized data, but this operation requires initialized memory
|
//~^ ERROR: this operation requires initialized memory
|
||||||
unsafe { std::mem::transmute(std::mem::MaybeUninit::<u32>::uninit()) };
|
unsafe { std::mem::transmute(std::mem::MaybeUninit::<u32>::uninit()) };
|
||||||
|
|
||||||
const CHAR_OOB_PAT: pattern_type!(char is 'A'..'Z') = unsafe { std::mem::transmute('a') };
|
const CHAR_OOB_PAT: pattern_type!(char is 'A'..'Z') = unsafe { std::mem::transmute('a') };
|
||||||
|
|||||||
@@ -9,11 +9,15 @@ LL | const BAD: pattern_type!(u32 is 1..) = unsafe { std::mem::transmute(0) };
|
|||||||
HEX_DUMP
|
HEX_DUMP
|
||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC0[0x0..0x4], but memory is uninitialized at [0x0..0x4], and this operation requires initialized memory
|
||||||
--> $DIR/validity.rs:13:1
|
--> $DIR/validity.rs:13:1
|
||||||
|
|
|
|
||||||
LL | const BAD_UNINIT: pattern_type!(u32 is 1..) =
|
LL | const BAD_UNINIT: pattern_type!(u32 is 1..) =
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_UNINIT` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `BAD_UNINIT` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 4, align: 4) {
|
||||||
|
__ __ __ __ │ ░░░░
|
||||||
|
}
|
||||||
|
|
||||||
error[E0080]: unable to turn pointer into integer
|
error[E0080]: unable to turn pointer into integer
|
||||||
--> $DIR/validity.rs:17:1
|
--> $DIR/validity.rs:17:1
|
||||||
@@ -46,11 +50,15 @@ LL | const BAD_FOO: Foo = Foo(Bar(unsafe { std::mem::transmute(0) }));
|
|||||||
HEX_DUMP
|
HEX_DUMP
|
||||||
}
|
}
|
||||||
|
|
||||||
error[E0080]: using uninitialized data, but this operation requires initialized memory
|
error[E0080]: reading memory at ALLOC1[0x0..0x4], but memory is uninitialized at [0x0..0x4], and this operation requires initialized memory
|
||||||
--> $DIR/validity.rs:29:1
|
--> $DIR/validity.rs:29:1
|
||||||
|
|
|
|
||||||
LL | const CHAR_UNINIT: pattern_type!(char is 'A'..'Z') =
|
LL | const CHAR_UNINIT: pattern_type!(char is 'A'..'Z') =
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `CHAR_UNINIT` failed here
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `CHAR_UNINIT` failed here
|
||||||
|
|
|
||||||
|
= note: the raw bytes of the constant (size: 4, align: 4) {
|
||||||
|
__ __ __ __ │ ░░░░
|
||||||
|
}
|
||||||
|
|
||||||
error[E0080]: constructing invalid value: encountered 97, but expected something in the range 65..=89
|
error[E0080]: constructing invalid value: encountered 97, but expected something in the range 65..=89
|
||||||
--> $DIR/validity.rs:33:1
|
--> $DIR/validity.rs:33:1
|
||||||
|
|||||||
Reference in New Issue
Block a user