From 56dffb5a73ab157fc8d35a76c1170d656a051f14 Mon Sep 17 00:00:00 2001 From: Kevin Grittner Date: Sat, 9 Apr 2016 08:17:22 -0500 Subject: [PATCH] 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. --- src/include/storage/bufpage.h | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/include/storage/bufpage.h b/src/include/storage/bufpage.h index 2ce3be765c0..bdf7b0d3c58 100644 --- a/src/include/storage/bufpage.h +++ b/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) \ )