Compiler: sizeof(Bool) must be 1, not 0 #8273
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #8272
I don't know why LLVM returns 0 for bool (
i1
). It seems that in C++ sizeof(bool) is implementation defined which isn't really good, so maybe LLVM chooses to return 0.It's also interesting to know that (before this PR):
That is, a static array of just one bool occupies one byte, per a bool occupies 0. In all other cases you have that
sizeof(T) == sizeof(T[1])
because a static array has its memory inlined.There are many ways we can solve this: we could use
sizeof(T[1])
inPointer
, when we need to know the size of memory allocated by a pointer. Or we could makesizeof(Bool)
be 1. I chose the latter because I think it's more intuitive, but I'm not sure.