Received: from malur.postgresql.org ([2a02:16a8:dc51::56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fvULx-0003P7-CB for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Aug 2018 21:19:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1fvULv-00045B-Ha for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Aug 2018 21:19:43 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fvULv-000453-76 for pgsql-hackers@lists.postgresql.org; Thu, 30 Aug 2018 21:19:43 +0000 Received: from sss.pgh.pa.us ([66.207.139.130]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fvULr-0006Ln-Uw for pgsql-hackers@postgresql.org; Thu, 30 Aug 2018 21:19:41 +0000 Received: from sss1.sss.pgh.pa.us (localhost [127.0.0.1]) by sss.pgh.pa.us (8.14.4/8.14.4) with ESMTP id w7ULJSgc025969; Thu, 30 Aug 2018 17:19:28 -0400 From: Tom Lane To: Michael Banck cc: Magnus Hagander , Fabien COELHO , pgsql-hackers Subject: Re: pg_verify_checksums and -fno-strict-aliasing In-reply-to: <1535660901.1286.8.camel@credativ.de> References: <1535618100.1286.3.camel@credativ.de> <7321.1535639966@sss.pgh.pa.us> <1535660901.1286.8.camel@credativ.de> Comments: In-reply-to Michael Banck message dated "Thu, 30 Aug 2018 22:28:21 +0200" MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <25967.1535663968.1@sss.pgh.pa.us> Date: Thu, 30 Aug 2018 17:19:28 -0400 Message-ID: <25968.1535663968@sss.pgh.pa.us> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk Michael Banck 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