-
-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Segfault when coercing optional pointers to optional allowzero pointers #3929
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
Comments
The big problem here is that Such a cast produces a |
I thought optional pointers were just ordinary pointers under the hood with a bit of compiler-type checking on top? How are their low level representations any different? |
The idea is to encode the absence of a value with const Opt = struct {
ptr: *allowzero u32,
empty: u1,
}; |
@LemonBoy Ah -- Thanks. What is an allowzero optional pointer even supposed to mean, though? As you say, null is how we encode the absence of a value, which by design is, naturally, 0. So why isn't 'empty' above superfluous in general? |
Not all the address spaces are born equal :) on some systems the zero address is addressable. |
Even on x86, zero is addressable - in my Zig-based kernel though, the byte at zero isn't usable because I was running into a segfault - possibly this one, actually - when using allowzero, and I figured one byte wasn't worth it. |
Closes ziglang#2746 Closes ziglang#2802 Closes ziglang#2855 Closes ziglang#2895 Closes ziglang#2981 Closes ziglang#3054 Closes ziglang#3158 Closes ziglang#3259 Closes ziglang#3371 Closes ziglang#3376 Closes ziglang#3387 Closes ziglang#3529 Closes ziglang#3653 Closes ziglang#3750 Closes ziglang#3778 Closes ziglang#3882 Closes ziglang#3915 Closes ziglang#3929 Closes ziglang#3961 Closes ziglang#3988 Closes ziglang#4123 Closes ziglang#7448
Closes ziglang#1994 Closes ziglang#2140 Closes ziglang#2746 Closes ziglang#2802 Closes ziglang#2855 Closes ziglang#2895 Closes ziglang#2981 Closes ziglang#3054 Closes ziglang#3158 Closes ziglang#3234 Closes ziglang#3259 Closes ziglang#3371 Closes ziglang#3376 Closes ziglang#3387 Closes ziglang#3529 Closes ziglang#3653 Closes ziglang#3750 Closes ziglang#3778 Closes ziglang#3882 Closes ziglang#3915 Closes ziglang#3929 Closes ziglang#3961 Closes ziglang#3988 Closes ziglang#4123 Closes ziglang#7448
Closes ziglang#1957 Closes ziglang#1994 Closes ziglang#2140 Closes ziglang#2746 Closes ziglang#2802 Closes ziglang#2855 Closes ziglang#2895 Closes ziglang#2981 Closes ziglang#3054 Closes ziglang#3158 Closes ziglang#3234 Closes ziglang#3259 Closes ziglang#3371 Closes ziglang#3376 Closes ziglang#3387 Closes ziglang#3529 Closes ziglang#3653 Closes ziglang#3750 Closes ziglang#3778 Closes ziglang#3882 Closes ziglang#3915 Closes ziglang#3929 Closes ziglang#3961 Closes ziglang#3988 Closes ziglang#4123 Closes ziglang#7448
Closes ziglang#1957 Closes ziglang#1994 Closes ziglang#2140 Closes ziglang#2746 Closes ziglang#2802 Closes ziglang#2855 Closes ziglang#2895 Closes ziglang#2981 Closes ziglang#3054 Closes ziglang#3158 Closes ziglang#3234 Closes ziglang#3259 Closes ziglang#3371 Closes ziglang#3376 Closes ziglang#3387 Closes ziglang#3529 Closes ziglang#3653 Closes ziglang#3750 Closes ziglang#3778 Closes ziglang#3882 Closes ziglang#3915 Closes ziglang#3929 Closes ziglang#3961 Closes ziglang#3988 Closes ziglang#4123 Closes ziglang#7448
Closes ziglang#1957 Closes ziglang#1994 Closes ziglang#2140 Closes ziglang#2746 Closes ziglang#2802 Closes ziglang#2855 Closes ziglang#2895 Closes ziglang#2981 Closes ziglang#3054 Closes ziglang#3158 Closes ziglang#3234 Closes ziglang#3259 Closes ziglang#3371 Closes ziglang#3376 Closes ziglang#3387 Closes ziglang#3529 Closes ziglang#3653 Closes ziglang#3750 Closes ziglang#3778 Closes ziglang#3882 Closes ziglang#3915 Closes ziglang#3929 Closes ziglang#3961 Closes ziglang#3988 Closes ziglang#4123 Closes ziglang#7448
Closes ziglang#1957 Closes ziglang#1994 Closes ziglang#2140 Closes ziglang#2746 Closes ziglang#2802 Closes ziglang#2855 Closes ziglang#2895 Closes ziglang#2981 Closes ziglang#3054 Closes ziglang#3158 Closes ziglang#3234 Closes ziglang#3259 Closes ziglang#3371 Closes ziglang#3376 Closes ziglang#3387 Closes ziglang#3529 Closes ziglang#3653 Closes ziglang#3750 Closes ziglang#3778 Closes ziglang#3882 Closes ziglang#3915 Closes ziglang#3929 Closes ziglang#3961 Closes ziglang#3988 Closes ziglang#4123 Closes ziglang#7448
Closes ziglang#1957 Closes ziglang#1994 Closes ziglang#2140 Closes ziglang#2746 Closes ziglang#2802 Closes ziglang#2855 Closes ziglang#2895 Closes ziglang#2981 Closes ziglang#3054 Closes ziglang#3158 Closes ziglang#3234 Closes ziglang#3259 Closes ziglang#3371 Closes ziglang#3376 Closes ziglang#3387 Closes ziglang#3529 Closes ziglang#3653 Closes ziglang#3750 Closes ziglang#3778 Closes ziglang#3882 Closes ziglang#3915 Closes ziglang#3929 Closes ziglang#3961 Closes ziglang#3988 Closes ziglang#4123 Closes ziglang#7448
Example code:
Note that if either
p
orq
is not optional, there's no issue.The text was updated successfully, but these errors were encountered: