Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sf28P-000UFx-8n for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Aug 2024 18:57:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sf27O-0007f9-Tp for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Aug 2024 18:56:11 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sf27O-0007f1-KF for pgsql-hackers@lists.postgresql.org; Fri, 16 Aug 2024 18:56:11 +0000 Received: from mail-io1-xd29.google.com ([2607:f8b0:4864:20::d29]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sf27M-0055jy-NZ for pgsql-hackers@lists.postgresql.org; Fri, 16 Aug 2024 18:56:10 +0000 Received: by mail-io1-xd29.google.com with SMTP id ca18e2360f4ac-81fad534a04so125910039f.1 for ; Fri, 16 Aug 2024 11:56:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723834568; x=1724439368; darn=lists.postgresql.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=dcI0dVgapF5SZb92dRhKGHWGVo1Fv5m5ejzWADcx5x8=; b=LGl0xmwNkuRfAim1hPM2Fau2MAlztFrKG9BHqyXwL9vDuAiHYHJ5/ufLHplEDrRF4u QM4cpvLa11AQG5i4gkFKSplTbysVPjaNFGjtOM3DFFSTSF2/nJn9uOV+IjEVSypkj34s N6qsie2H/2V7ny4hQQro7vNxaM5MQYJhry9X3iVJJNj0X0EY3v1wZBesRGd3K+KcdvaH TwYOCtYT3aqncQC5ErP3csparUi2nnHHmgFTVgdOsTHVadO5gt0IwbqBb/yrWX8PkOF4 nC7PsC5pNXXjFkRX6PPcwLx0aRjpvl5avNL+lGknnSZMmVjSQQSJPh/5I9tBlMVonUjJ pfbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723834568; x=1724439368; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=dcI0dVgapF5SZb92dRhKGHWGVo1Fv5m5ejzWADcx5x8=; b=ryHE0Hdr+wWmohtigAt/3CRPAXx8JwQPE2cYnn3lQ1bbP4kKdkWxuucdAcZYF/CALY mPSDqXdoF6LWX5L6Wbm/l+XyGCMUD+GCfBTlsLsMn78H9TT4UA8AtnyGrmkDcPn68Iel mDUQK+ogx0za0f+jkKgtQstRTTnKlKvPAh6cqcrwBsT4HtITP6XX3JIH+LTn9yrbDO3u ceOkuhhkRi3XfmSxLWf01DihR5gbOKtbDIREAIGAzxqzCApsQFVk2BJbm9pafJfdKBBM 9tbUM7TarjyGpiZcKwYF8w0Et7plmqySmTspTskXjxkyGAp72cMfJSR6Va3v8dAikGKM SfUg== X-Forwarded-Encrypted: i=1; AJvYcCVKsYRADqtlvY8Ux4iExiTabb4cHXJUeYBidJjU+xHijpz1iHbyctABDScwdpgOHqRdJRdhc3wy37pV/min@lists.postgresql.org X-Gm-Message-State: AOJu0Yym83sAHLtDVKuj1UaUZCt5BPuKK8w2hulhmEi366auZw3urqrd EgDyTKlYNdnzdpL2kdX+uIrf6+hEwdf3l8aX3twmFsGImmwmwAQ9 X-Google-Smtp-Source: AGHT+IEcT/ugmAbk847T9+fkXeCb57K+V84Ls4aP5txPRBUfml5qEkms7DlfJA/yw/QaJVshKfBtuA== X-Received: by 2002:a05:6e02:1e06:b0:39a:eb4d:4335 with SMTP id e9e14a558f8ab-39d26cdf9f2mr44666095ab.4.1723834567705; Fri, 16 Aug 2024 11:56:07 -0700 (PDT) Received: from nathan (162-195-168-172.lightspeed.stlsmo.sbcglobal.net. [162.195.168.172]) by smtp.gmail.com with ESMTPSA id e9e14a558f8ab-39d1ec02fa6sm15137205ab.31.2024.08.16.11.56.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Aug 2024 11:56:07 -0700 (PDT) Date: Fri, 16 Aug 2024 13:56:05 -0500 From: Nathan Bossart To: Alexander Lakhin Cc: Joseph Koshakow , jian he , Heikki Linnakangas , Matthew Kim , Tom Lane , PostgreSQL Hackers , Andres Freund Subject: Re: Remove dependence on integer wrapping Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Fri, Aug 16, 2024 at 01:35:01PM -0500, Nathan Bossart wrote: > On Fri, Aug 16, 2024 at 09:00:00PM +0300, Alexander Lakhin wrote: >> #6  0x00005576cf627c68 in bms_singleton_member (a=0x5576d09f7fb0) at bitmapset.c:691 >> 691                             if (result >= 0 || HAS_MULTIPLE_ONES(w)) > > At a glance, this appears to be caused by the RIGHTMOST_ONE macro: > > #define RIGHTMOST_ONE(x) ((signedbitmapword) (x) & -((signedbitmapword) (x))) I believe hand-rolling the two's complement calculation should be sufficient to avoid depending on -fwrapv here. godbolt.org indicates that it produces roughly the same code, too. diff --git a/src/backend/nodes/bitmapset.c b/src/backend/nodes/bitmapset.c index cd05c642b0..d37a997c0e 100644 --- a/src/backend/nodes/bitmapset.c +++ b/src/backend/nodes/bitmapset.c @@ -67,7 +67,7 @@ * we get zero. *---------- */ -#define RIGHTMOST_ONE(x) ((signedbitmapword) (x) & -((signedbitmapword) (x))) +#define RIGHTMOST_ONE(x) ((bitmapword) (x) & (~((bitmapword) (x)) + 1)) #define HAS_MULTIPLE_ONES(x) ((bitmapword) RIGHTMOST_ONE(x) != (x)) -- nathan