-
Notifications
You must be signed in to change notification settings - Fork 12.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Ptr::to_option method #6604
Conversation
#[inline(always)] | ||
fn to_option(&const self) -> Option<T> { | ||
if self.is_null() { None } else { | ||
Some(unsafe { **self }) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm concerned about this line. Will this be problematic?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, to_option
isn't a safe function. Raw pointers can point to invalid locations so the unsafe block is incorrectly assuming the operation is safe.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Dang, yeah that makes sense. I dunno if this is a lost cause then. :(
Converting unsafe pointers to Option-something seems useful but this implementation has a couple things that concern me. It looks like it is returning a copy of It should be unsafe because it dereferences an arbitrary pointer. |
@brson Fixed to use an |
`match_wildcard` improvements fixes: rust-lang#6604 fixes: rust-lang#5733 fixes: rust-lang#6862 rust-lang#5733 is only fixed in the normal case, if different paths are used for the variants then the same problem will occur. It's cause by `def_path_str` returning an utterly useless result. I haven't dug into why yet. For rust-lang#6604 there should be some discussion before accepting this. It's easy enough to change the message rather than disable the lint for `Option` and `Result`. changelog: Attempt to find a common path prefix for `match_wildcard_for_single_variants` and `wildcard_enum_match_arm` changelog: Don't lint op `Option` and `Result` for `match_wildcard_for_single_variants` and `wildcard_enum_match_arm` changelog: Consider `or` patterns and `Self` prefix for `match_wildcard_for_single_variants` and `wildcard_enum_match_arm`
No description provided.