Change bit field enums to use uint64_t
as underlying type
#1320
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 godotengine/godot#85444.
As discussed in the issue above, this would change the underlying integer type for enums declared with
VARIANT_BITFIELD_CAST
to beuint64_t
instead of the defaultint
.This helps resolve an issue where MSVC will currently truncate any enum values larger than 2^31 for enums that don't have an explicit underlying type, which is affecting
RenderingServer::ArrayFormat
, as seen in the issue above.Note that this technically opens up for other potential future problems, where someone on the Godot side of things could define a regular
int
-backed enum, bind it withVARIANT_BITFIELD_CAST
and then include it in something like aGDREGISTER_NATIVE_STRUCT
, which would lead to an ABI difference and potentially memory corruption.