mirror of
https://github.com/postgres/postgres.git
synced 2025-05-31 00:01:57 -04:00
Improve implementation of pg_attribute_always_inline.
Avoid compiler warnings on MSVC (which doesn't want to see both __forceinline and inline) and ancient GCC (which doesn't have __attribute__((always_inline))). Don't force inline-ing when building at -O0, as the programmer is probably hoping for exact source-to-object-line correspondence in that case. (For the moment this only works for GCC; maybe we can extend it later.) Make pg_attribute_always_inline be syntactically a drop-in replacement for inline, rather than an additional wart. And improve the comments. Thomas Munro and Michail Nikolaev, small tweaks by me Discussion: https://postgr.es/m/32278.1514863068@sss.pgh.pa.us Discussion: https://postgr.es/m/CANtu0oiYp74brgntKOxgg1FK5+t8uQ05guSiFU6FYz_5KUhr6Q@mail.gmail.com
This commit is contained in:
parent
e0a0deca38
commit
434e6e1484
@ -161,8 +161,7 @@ static void ExecParallelHashJoinPartitionOuter(HashJoinState *node);
|
|||||||
* the other one is "outer".
|
* the other one is "outer".
|
||||||
* ----------------------------------------------------------------
|
* ----------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
pg_attribute_always_inline
|
static pg_attribute_always_inline TupleTableSlot *
|
||||||
static inline TupleTableSlot *
|
|
||||||
ExecHashJoinImpl(PlanState *pstate, bool parallel)
|
ExecHashJoinImpl(PlanState *pstate, bool parallel)
|
||||||
{
|
{
|
||||||
HashJoinState *node = castNode(HashJoinState, pstate);
|
HashJoinState *node = castNode(HashJoinState, pstate);
|
||||||
|
@ -146,14 +146,21 @@
|
|||||||
#define pg_attribute_noreturn()
|
#define pg_attribute_noreturn()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* GCC, Sunpro and XLC support always_inline via __attribute__ */
|
/*
|
||||||
#if defined(__GNUC__)
|
* Use "pg_attribute_always_inline" in place of "inline" for functions that
|
||||||
#define pg_attribute_always_inline __attribute__((always_inline))
|
* we wish to force inlining of, even when the compiler's heuristics would
|
||||||
/* msvc via a special keyword */
|
* choose not to. But, if possible, don't force inlining in unoptimized
|
||||||
|
* debug builds.
|
||||||
|
*/
|
||||||
|
#if (defined(__GNUC__) && __GNUC__ > 3 && defined(__OPTIMIZE__)) || defined(__SUNPRO_C) || defined(__IBMC__)
|
||||||
|
/* GCC > 3, Sunpro and XLC support always_inline via __attribute__ */
|
||||||
|
#define pg_attribute_always_inline __attribute__((always_inline)) inline
|
||||||
#elif defined(_MSC_VER)
|
#elif defined(_MSC_VER)
|
||||||
|
/* MSVC has a special keyword for this */
|
||||||
#define pg_attribute_always_inline __forceinline
|
#define pg_attribute_always_inline __forceinline
|
||||||
#else
|
#else
|
||||||
#define pg_attribute_always_inline
|
/* Otherwise, the best we can do is to say "inline" */
|
||||||
|
#define pg_attribute_always_inline inline
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user