[File] [PATCH] Avoid cast of address constant to integer constant in initalizer
Christos Zoulas
christos at zoulas.com
Sat Dec 21 17:53:06 UTC 2019
On Dec 20, 3:49pm, mforney at mforney.org (Michael Forney) wrote:
-- Subject: [File] [PATCH] Avoid cast of address constant to integer constant
| RCAST converts an address constant to an integer, and then to pointer. An
| integer constant cast to a pointer type is a valid address constant,
| however, a pointer cast to a integer is not an integer constant:
|
| > Cast operators in an integer constant expression shall only convert
| > arithmetic types to integer types, except as part of an operand to the
| > sizeof operator.
|
| So the result of RCAST(const void *, zlibcmp) is not technically a
| constant expression, and might be rejected by some compilers when it is
| used in an initializer for an object with static storage.
|
| Instead, just use a union so no casts are necessary.
| ---
| Initializing the second member of a union requires C99 initialization
| syntax. I couldn't figure out if file is strictly ANSI C, but if so,
| the union could be replaced with two struct members instead.
Committed, thanks! I kept the C99 init, but did not make it a transparent
union :-). Let's see if anyone complains...
christos
More information about the File
mailing list