-
Notifications
You must be signed in to change notification settings - Fork 13.3k
Add Ptr::to_option method #6604
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
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.