tweak int2ptr diagnostics
This commit is contained in:
parent
aaaed51ab8
commit
8bd4bbe3e4
@ -21,6 +21,7 @@ pub enum TerminationInfo {
|
||||
help: Option<String>,
|
||||
history: Option<TagHistory>,
|
||||
},
|
||||
Int2PtrWithStrictProvenance,
|
||||
Deadlock,
|
||||
MultipleSymbolDefinitions {
|
||||
link_name: Symbol,
|
||||
@ -42,6 +43,11 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
Exit(code) => write!(f, "the evaluated program completed with exit code {}", code),
|
||||
Abort(msg) => write!(f, "{}", msg),
|
||||
UnsupportedInIsolation(msg) => write!(f, "{}", msg),
|
||||
Int2PtrWithStrictProvenance =>
|
||||
write!(
|
||||
f,
|
||||
"integer-to-pointer casts and `ptr::from_exposed_addr` are not supported with `-Zmiri-strict-provenance`"
|
||||
),
|
||||
StackedBorrowsUb { msg, .. } => write!(f, "{}", msg),
|
||||
Deadlock => write!(f, "the evaluated program deadlocked"),
|
||||
MultipleSymbolDefinitions { link_name, .. } =>
|
||||
@ -148,7 +154,8 @@ pub fn report_error<'tcx, 'mir>(
|
||||
let title = match info {
|
||||
Exit(code) => return Some(*code),
|
||||
Abort(_) => Some("abnormal termination"),
|
||||
UnsupportedInIsolation(_) => Some("unsupported operation"),
|
||||
UnsupportedInIsolation(_) | Int2PtrWithStrictProvenance =>
|
||||
Some("unsupported operation"),
|
||||
StackedBorrowsUb { .. } => Some("Undefined Behavior"),
|
||||
Deadlock => Some("deadlock"),
|
||||
MultipleSymbolDefinitions { .. } | SymbolShimClashing { .. } => None,
|
||||
@ -177,7 +184,7 @@ pub fn report_error<'tcx, 'mir>(
|
||||
}
|
||||
if let Some((protecting_tag, protecting_tag_span, protection_span)) = protected {
|
||||
helps.push((Some(*protecting_tag_span), format!("{:?} was protected due to {:?} which was created here", tag, protecting_tag)));
|
||||
helps.push((Some(*protection_span), "this protector is live for this call".to_string()));
|
||||
helps.push((Some(*protection_span), format!("this protector is live for this call")));
|
||||
}
|
||||
}
|
||||
None => {}
|
||||
@ -191,6 +198,8 @@ pub fn report_error<'tcx, 'mir>(
|
||||
],
|
||||
SymbolShimClashing { link_name, span } =>
|
||||
vec![(Some(*span), format!("the `{}` symbol is defined here", link_name))],
|
||||
Int2PtrWithStrictProvenance =>
|
||||
vec![(None, format!("use Strict Provenance APIs (https://doc.rust-lang.org/nightly/std/ptr/index.html#strict-provenance, https://crates.io/crates/sptr) instead"))],
|
||||
_ => vec![],
|
||||
};
|
||||
(title, helps)
|
||||
@ -471,12 +480,12 @@ fn process_diagnostics(&self, info: TopFrameInfo<'tcx>) {
|
||||
let helps = match e {
|
||||
Int2Ptr { details: true } =>
|
||||
vec![
|
||||
(None, format!("this program is using integer-to-pointer casts or (equivalently) `from_exposed_addr`,")),
|
||||
(None, format!("which means that Miri might miss pointer bugs in this program")),
|
||||
(None, format!("see https://doc.rust-lang.org/nightly/std/ptr/fn.from_exposed_addr.html for more details on that operation")),
|
||||
(None, format!("to ensure that Miri does not miss bugs in your program, use `with_addr` (https://doc.rust-lang.org/nightly/std/ptr/index.html#strict-provenance) instead")),
|
||||
(None, format!("you can then pass the `-Zmiri-strict-provenance` flag to Miri, to ensure you are not relying on `from_exposed_addr` semantics")),
|
||||
(None, format!("alternatively, the `-Zmiri-permissive-provenance` flag disables this warning")),
|
||||
(None, format!("This program is using integer-to-pointer casts or (equivalently) `ptr::from_exposed_addr`,")),
|
||||
(None, format!("which means that Miri might miss pointer bugs in this program.")),
|
||||
(None, format!("See https://doc.rust-lang.org/nightly/std/ptr/fn.from_exposed_addr.html for more details on that operation.")),
|
||||
(None, format!("To ensure that Miri does not miss bugs in your program, use Strict Provenance APIs (https://doc.rust-lang.org/nightly/std/ptr/index.html#strict-provenance, https://crates.io/crates/sptr) instead.")),
|
||||
(None, format!("You can then pass the `-Zmiri-strict-provenance` flag to Miri, to ensure you are not relying on `from_exposed_addr` semantics.")),
|
||||
(None, format!("Alternatively, the `-Zmiri-permissive-provenance` flag disables this warning.")),
|
||||
],
|
||||
_ => vec![],
|
||||
};
|
||||
|
@ -146,9 +146,7 @@ pub fn ptr_from_addr_cast(
|
||||
});
|
||||
}
|
||||
ProvenanceMode::Strict => {
|
||||
throw_unsup_format!(
|
||||
"integer-to-pointer casts and `from_exposed_addr` are not supported with `-Zmiri-strict-provenance`; use `with_addr` instead"
|
||||
)
|
||||
throw_machine_stop!(TerminationInfo::Int2PtrWithStrictProvenance);
|
||||
}
|
||||
ProvenanceMode::Permissive => {}
|
||||
}
|
||||
|
@ -2,5 +2,5 @@
|
||||
|
||||
fn main() {
|
||||
let addr = &0 as *const i32 as usize;
|
||||
let _ptr = addr as *const i32; //~ ERROR integer-to-pointer casts and `from_exposed_addr` are not supported
|
||||
let _ptr = addr as *const i32; //~ ERROR integer-to-pointer casts and `ptr::from_exposed_addr` are not supported
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
error: unsupported operation: integer-to-pointer casts and `from_exposed_addr` are not supported with `-Zmiri-strict-provenance`; use `with_addr` instead
|
||||
error: unsupported operation: integer-to-pointer casts and `ptr::from_exposed_addr` are not supported with `-Zmiri-strict-provenance`
|
||||
--> $DIR/strict_provenance_cast.rs:LL:CC
|
||||
|
|
||||
LL | let _ptr = addr as *const i32;
|
||||
| ^^^^^^^^^^^^^^^^^^ integer-to-pointer casts and `from_exposed_addr` are not supported with `-Zmiri-strict-provenance`; use `with_addr` instead
|
||||
| ^^^^^^^^^^^^^^^^^^ integer-to-pointer casts and `ptr::from_exposed_addr` are not supported with `-Zmiri-strict-provenance`
|
||||
|
|
||||
= help: this is likely not a bug in the program; it indicates that the program performed an operation that the interpreter does not support
|
||||
= help: use Strict Provenance APIs (https://doc.rust-lang.org/nightly/std/ptr/index.html#strict-provenance, https://crates.io/crates/sptr) instead
|
||||
|
||||
= note: inside `main` at $DIR/strict_provenance_cast.rs:LL:CC
|
||||
|
||||
|
@ -4,12 +4,12 @@ warning: integer-to-pointer cast
|
||||
LL | let r2 = ((r as usize) + 0) as *mut i32;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ integer-to-pointer cast
|
||||
|
|
||||
= help: this program is using integer-to-pointer casts or (equivalently) `from_exposed_addr`,
|
||||
= help: which means that Miri might miss pointer bugs in this program
|
||||
= help: see https://doc.rust-lang.org/nightly/std/ptr/fn.from_exposed_addr.html for more details on that operation
|
||||
= help: to ensure that Miri does not miss bugs in your program, use `with_addr` (https://doc.rust-lang.org/nightly/std/ptr/index.html#strict-provenance) instead
|
||||
= help: you can then pass the `-Zmiri-strict-provenance` flag to Miri, to ensure you are not relying on `from_exposed_addr` semantics
|
||||
= help: alternatively, the `-Zmiri-permissive-provenance` flag disables this warning
|
||||
= help: This program is using integer-to-pointer casts or (equivalently) `ptr::from_exposed_addr`,
|
||||
= help: which means that Miri might miss pointer bugs in this program.
|
||||
= help: See https://doc.rust-lang.org/nightly/std/ptr/fn.from_exposed_addr.html for more details on that operation.
|
||||
= help: To ensure that Miri does not miss bugs in your program, use Strict Provenance APIs (https://doc.rust-lang.org/nightly/std/ptr/index.html#strict-provenance, https://crates.io/crates/sptr) instead.
|
||||
= help: You can then pass the `-Zmiri-strict-provenance` flag to Miri, to ensure you are not relying on `from_exposed_addr` semantics.
|
||||
= help: Alternatively, the `-Zmiri-permissive-provenance` flag disables this warning.
|
||||
|
||||
= note: inside `into_raw` at $DIR/box.rs:LL:CC
|
||||
note: inside `main` at $DIR/box.rs:LL:CC
|
||||
|
@ -4,12 +4,12 @@ warning: integer-to-pointer cast
|
||||
LL | let x: &Foo = unsafe { &*(16 as *const Foo) };
|
||||
| ^^^^^^^^^^^^^^^^^^ integer-to-pointer cast
|
||||
|
|
||||
= help: this program is using integer-to-pointer casts or (equivalently) `from_exposed_addr`,
|
||||
= help: which means that Miri might miss pointer bugs in this program
|
||||
= help: see https://doc.rust-lang.org/nightly/std/ptr/fn.from_exposed_addr.html for more details on that operation
|
||||
= help: to ensure that Miri does not miss bugs in your program, use `with_addr` (https://doc.rust-lang.org/nightly/std/ptr/index.html#strict-provenance) instead
|
||||
= help: you can then pass the `-Zmiri-strict-provenance` flag to Miri, to ensure you are not relying on `from_exposed_addr` semantics
|
||||
= help: alternatively, the `-Zmiri-permissive-provenance` flag disables this warning
|
||||
= help: This program is using integer-to-pointer casts or (equivalently) `ptr::from_exposed_addr`,
|
||||
= help: which means that Miri might miss pointer bugs in this program.
|
||||
= help: See https://doc.rust-lang.org/nightly/std/ptr/fn.from_exposed_addr.html for more details on that operation.
|
||||
= help: To ensure that Miri does not miss bugs in your program, use Strict Provenance APIs (https://doc.rust-lang.org/nightly/std/ptr/index.html#strict-provenance, https://crates.io/crates/sptr) instead.
|
||||
= help: You can then pass the `-Zmiri-strict-provenance` flag to Miri, to ensure you are not relying on `from_exposed_addr` semantics.
|
||||
= help: Alternatively, the `-Zmiri-permissive-provenance` flag disables this warning.
|
||||
|
||||
= note: inside `main` at $DIR/extern_types.rs:LL:CC
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user