diff options
| author | bors <bors@rust-lang.org> | 2017-11-28 20:40:51 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-11-28 20:40:51 +0000 |
| commit | 73bca2b9fa9399751e432734f7f12bd6a37fc167 (patch) | |
| tree | 6629bc4f07a160bf15548781b88a4971c28b1bf5 /src/libcore/tests | |
| parent | 71340ca4e181b824bcefa887f1be60dd0b7352ce (diff) | |
| parent | e0f58c6a11c7990a302b47c488dc2f13fab7b9a1 (diff) | |
| download | rust-73bca2b9fa9399751e432734f7f12bd6a37fc167.tar.gz rust-73bca2b9fa9399751e432734f7f12bd6a37fc167.zip | |
Auto merge of #46094 - dtolnay:is_null, r=alexcrichton
Remove `T: Sized` on `ptr::is_null()`
Originally from #44932 -- this is purely a revert of the last commit of that PR, which was removing some changes from the previous commits in the PR. So a revert of a revert means this is code written by @cuviper!
@mikeyhew makes a compelling case in https://github.com/rust-lang/rfcs/issues/433#issuecomment-345495505 for why this is the right way to implement `is_null` for trait objects. And the behavior for slices makes sense to me as well.
```diff
impl<T: ?Sized> *const T {
- pub fn is_null(self) -> bool where T: Sized;
+ pub fn is_null(self) -> bool;
}
impl<T: ?Sized> *mut T {
- pub fn is_null(self) -> bool where T: Sized;
+ pub fn is_null(self) -> bool;
}
Diffstat (limited to 'src/libcore/tests')
| -rw-r--r-- | src/libcore/tests/ptr.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/libcore/tests/ptr.rs b/src/libcore/tests/ptr.rs index e93e9be0cd5..98436f0e1d1 100644 --- a/src/libcore/tests/ptr.rs +++ b/src/libcore/tests/ptr.rs @@ -62,6 +62,39 @@ fn test_is_null() { let mq = unsafe { mp.offset(1) }; assert!(!mq.is_null()); + + // Pointers to unsized types -- slices + let s: &mut [u8] = &mut [1, 2, 3]; + let cs: *const [u8] = s; + assert!(!cs.is_null()); + + let ms: *mut [u8] = s; + assert!(!ms.is_null()); + + let cz: *const [u8] = &[]; + assert!(!cz.is_null()); + + let mz: *mut [u8] = &mut []; + assert!(!mz.is_null()); + + let ncs: *const [u8] = null::<[u8; 3]>(); + assert!(ncs.is_null()); + + let nms: *mut [u8] = null_mut::<[u8; 3]>(); + assert!(nms.is_null()); + + // Pointers to unsized types -- trait objects + let ci: *const ToString = &3; + assert!(!ci.is_null()); + + let mi: *mut ToString = &mut 3; + assert!(!mi.is_null()); + + let nci: *const ToString = null::<isize>(); + assert!(nci.is_null()); + + let nmi: *mut ToString = null_mut::<isize>(); + assert!(nmi.is_null()); } #[test] |
