Fix type incompatibility in htole64 and htole32 with older GCC versions #355
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.
Problem
Older versions of GCC (e.g., 4.6.4) report a type incompatibility error due to the way
&out.bytes
is passed toSTORE64L
andSTORE32L
.out.bytes
is an array (uint8_t[8]
forhtole64
,uint8_t[4]
forhtole32
).&out.bytes
producesuint8_t (*)[8]
(uint8_t (*)[4]
forhtole32
), which does not match the expecteduint8_t*
parameter inSTORE64L
andSTORE32L
.Newer compilers (e.g., GCC 4.8.5+) are more lenient, but older versions enforce strict type checking, leading to compilation errors.
Solution
Instead of passing
&out.bytes,
we passout.bytes
directly. This ensures proper type decay from an array to a pointer (uint8_t*
), making the code compatible with both older and newer GCC versions.Changes
Before:
After:
This change resolves the compilation issue while maintaining functional correctness.