Re: pg_verify_checksums and -fno-strict-aliasing
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Michael Banck <michael.banck@credativ.de>
Cc: Magnus Hagander <magnus@hagander.net>,
Fabien COELHO <coelho@cri.ensmp.fr>,
pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2018-08-30T21:19:28Z
Lists: pgsql-hackers
Michael Banck <michael.banck@credativ.de> writes: > Could well be I'm doing something wrong, so it would be cool if somebody > could reproduce this first. In principle, it should be enough to run > 'make clean && make CLFAGS=-O2' in the src/bin/pg_verify_checksums > subdirectory in order to get a broken executable. I can reproduce it on my Fedora 28 machine (gcc 8.1.1) by compiling pg_verify_checksums with all the normal flags except -fno-strict-aliasing. I don't see any warning, not even with -Wstrict-aliasing=2 :-(, but the generated code malfunctions as Michael describes. As best I can tell, the problem is in the inlined code from checksum_impl.h rather than in pg_verify_checksums.c itself. I think what is happening is gcc is concluding that it can optimize away the code that temporarily sets the page's checksum field to zero. Although, as Alvaro mentioned upthread, there's basically no hope of getting away from -fno-strict-aliasing for Postgres-at-large, I think it'd be a good thing if we could get checksum_impl.h to not depend on it. The whole point of that header, according to its own self-description, is to export the checksum calculation for use by external programs --- and we can't really control what compiler flags will be used by those. The fact that Michael even ran into this problem seems to be an instance of that. So, I've been fooling around trying to get it to work without -fno-strict-aliasing, but with little luck so far. regards, tom lane
Commits
-
Avoid using potentially-under-aligned page buffers.
- 44cac9346479 12.0 landed
- 5af055ed7446 9.3.25 landed
- f5c93cf92223 11.0 landed
- 826980424538 9.6.11 landed
- 10b9af3ebbed 10.6 landed
- 083d9ced14e4 9.4.20 landed
- 03ffe5553c1d 9.5.15 landed
-
Code review for pg_verify_checksums.c.
- d787af7badfe 11.0 landed
- d9c366f9e801 12.0 landed
-
Make checksum_impl.h safe to compile with -fstrict-aliasing.
- db87d3b5253f 9.3.25 landed
- 20f9cd55dd53 9.4.20 landed
- 853af991e35a 9.5.15 landed
- d6ef17ed7bba 9.6.11 landed
- c2dfbd18ce25 10.6 landed
- 9daff2fe69dc 11.0 landed
- 8c62d9d16f01 12.0 landed