|
|
|
@ -1122,14 +1122,14 @@ typedef union PGAlignedXLogBlock |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Macro that allows to cast constness away from a variable, but doesn't |
|
|
|
|
* Macro that allows to cast constness away from an expression, but doesn't |
|
|
|
|
* allow changing the underlying type. Enforcement of the latter |
|
|
|
|
* currently only works for gcc like compilers. |
|
|
|
|
* |
|
|
|
|
* Please note IT IS NOT SAFE to cast constness away if the variable will ever |
|
|
|
|
* Please note IT IS NOT SAFE to cast constness away if the result will ever |
|
|
|
|
* be modified (it would be undefined behaviour). Doing so anyway can cause |
|
|
|
|
* compiler misoptimizations or runtime crashes (modifying readonly memory). |
|
|
|
|
* It is only safe to use when the the variable will not be modified, but API |
|
|
|
|
* It is only safe to use when the the result will not be modified, but API |
|
|
|
|
* design or language restrictions prevent you from declaring that |
|
|
|
|
* (e.g. because a function returns both const and non-const variables). |
|
|
|
|
* |
|
|
|
@ -1137,13 +1137,13 @@ typedef union PGAlignedXLogBlock |
|
|
|
|
* be nice, but not trivial, to improve that). |
|
|
|
|
*/ |
|
|
|
|
#if defined(HAVE__BUILTIN_TYPES_COMPATIBLE_P) |
|
|
|
|
#define unconstify(underlying_type, var) \ |
|
|
|
|
(StaticAssertExpr(__builtin_types_compatible_p(__typeof(var), const underlying_type), \
|
|
|
|
|
#define unconstify(underlying_type, expr) \ |
|
|
|
|
(StaticAssertExpr(__builtin_types_compatible_p(__typeof(expr), const underlying_type), \
|
|
|
|
|
"wrong cast"), \
|
|
|
|
|
(underlying_type) (var)) |
|
|
|
|
(underlying_type) (expr)) |
|
|
|
|
#else |
|
|
|
|
#define unconstify(underlying_type, var) \ |
|
|
|
|
((underlying_type) (var)) |
|
|
|
|
#define unconstify(underlying_type, expr) \ |
|
|
|
|
((underlying_type) (expr)) |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------
|
|
|
|
|