summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2011-06-10 17:03:03 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2011-06-10 17:04:29 -0400
commitc2ba0121c73b7461331104a46d140156e847572a (patch)
tree424e4230bada5194dabf274282713b585c168271 /src/include
parentcb2d158c5808c72cbd12cbffe0b7f5dbe830760b (diff)
downloadpostgresql-c2ba0121c73b7461331104a46d140156e847572a.tar.gz
Work around gcc 4.6.0 bug that breaks WAL replay.
ReadRecord's habit of using both direct references to tmpRecPtr and references to *RecPtr (which is pointing at tmpRecPtr) triggers an optimization bug in gcc 4.6.0, which apparently has forgotten about aliasing rules. Avoid the compiler bug, and make the code more readable to boot, by getting rid of the direct references. Improve the comments while at it. Back-patch to all supported versions, in case they get built with 4.6.0. Tom Lane, with some cosmetic suggestions from Alex Hunsaker
Diffstat (limited to 'src/include')
-rw-r--r--src/include/access/xlog_internal.h12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/include/access/xlog_internal.h b/src/include/access/xlog_internal.h
index eeccdce31d..7e39630c1b 100644
--- a/src/include/access/xlog_internal.h
+++ b/src/include/access/xlog_internal.h
@@ -154,13 +154,13 @@ typedef XLogLongPageHeaderData *XLogLongPageHeader;
/* Align a record pointer to next page */
#define NextLogPage(recptr) \
do { \
- if (recptr.xrecoff % XLOG_BLCKSZ != 0) \
- recptr.xrecoff += \
- (XLOG_BLCKSZ - recptr.xrecoff % XLOG_BLCKSZ); \
- if (recptr.xrecoff >= XLogFileSize) \
+ if ((recptr).xrecoff % XLOG_BLCKSZ != 0) \
+ (recptr).xrecoff += \
+ (XLOG_BLCKSZ - (recptr).xrecoff % XLOG_BLCKSZ); \
+ if ((recptr).xrecoff >= XLogFileSize) \
{ \
- (recptr.xlogid)++; \
- recptr.xrecoff = 0; \
+ ((recptr).xlogid)++; \
+ (recptr).xrecoff = 0; \
} \
} while (0)