Turn special page pointer validation to static inline function

Inclusion of multiple macros inside another macro was pushing MSVC
past its size liimit.  Reported by buildfarm.
pull/12/head
Kevin Grittner 9 years ago
parent 1ff3f420d4
commit 56dffb5a73
  1. 23
      src/include/storage/bufpage.h

@ -297,15 +297,32 @@ typedef PageHeaderData *PageHeader;
#define PageGetSpecialSize(page) \
((uint16) (PageGetPageSize(page) - ((PageHeader)(page))->pd_special))
/*
* Using assertions, validate that the page special pointer is OK.
*
* This is intended to catch use of the pointer before page initialization.
* It is implemented as a function do to the limitations of the MSVC compiler,
* which choked on doing all these tests within another macro. We return true
* so that MacroAssert() can be used while still getting the specifics from
* the macro failure within this function.
*/
static inline bool
PageValidateSpecialPointer(Page page)
{
Assert(PageIsValid(page));
Assert(((PageHeader) (page))->pd_special <= BLCKSZ);
Assert(((PageHeader) (page))->pd_special >= SizeOfPageHeaderData);
return true;
}
/*
* PageGetSpecialPointer
* Returns pointer to special space on a page.
*/
#define PageGetSpecialPointer(page) \
( \
AssertMacro(PageIsValid(page)), \
AssertMacro(((PageHeader) (page))->pd_special <= BLCKSZ), \
AssertMacro(((PageHeader) (page))->pd_special >= SizeOfPageHeaderData), \
AssertMacro(PageValidateSpecialPointer(page)), \
(char *) ((char *) (page) + ((PageHeader) (page))->pd_special) \
)

Loading…
Cancel
Save