diff options
author | Peter Eisentraut | 2019-03-25 08:35:29 +0000 |
---|---|---|
committer | Peter Eisentraut | 2019-03-25 08:37:03 +0000 |
commit | 481018f2804065cb5ed1cde75b7c0596aeef959a (patch) | |
tree | 045013c91eb4fe8747a7b4ab0a5e36cd44d3d078 /src/include/c.h | |
parent | 572e3e6634e55accf95e2bcfb1340019c86a21dc (diff) |
Add macro to cast away volatile without allowing changes to underlying type
This adds unvolatize(), which works just like unconstify() but for volatile.
Discussion: https://www.postgresql.org/message-id/flat/7a5cbea7-b8df-e910-0f10-04014bcad701%402ndquadrant.com
Diffstat (limited to 'src/include/c.h')
-rw-r--r-- | src/include/c.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/include/c.h b/src/include/c.h index 658be50e0d3..33c95181952 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -1122,7 +1122,7 @@ typedef union PGAlignedXLogBlock #endif /* - * Macro that allows to cast constness away from an expression, but doesn't + * Macro that allows to cast constness and volatile away from an expression, but doesn't * allow changing the underlying type. Enforcement of the latter * currently only works for gcc like compilers. * @@ -1141,9 +1141,15 @@ typedef union PGAlignedXLogBlock (StaticAssertExpr(__builtin_types_compatible_p(__typeof(expr), const underlying_type), \ "wrong cast"), \ (underlying_type) (expr)) +#define unvolatize(underlying_type, expr) \ + (StaticAssertExpr(__builtin_types_compatible_p(__typeof(expr), volatile underlying_type), \ + "wrong cast"), \ + (underlying_type) (expr)) #else #define unconstify(underlying_type, expr) \ ((underlying_type) (expr)) +#define unvolatize(underlying_type, expr) \ + ((underlying_type) (expr)) #endif /* ---------------------------------------------------------------- |