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 1sbiGq-000t6R-6a for pgsql-hackers@arkaria.postgresql.org; Wed, 07 Aug 2024 15:08:12 +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 1sbiGo-0086MH-FA for pgsql-hackers@arkaria.postgresql.org; Wed, 07 Aug 2024 15:08:10 +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 1sbiGo-0086M8-5I for pgsql-hackers@lists.postgresql.org; Wed, 07 Aug 2024 15:08:10 +0000 Received: from mail-io1-xd36.google.com ([2607:f8b0:4864:20::d36]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sbiGl-003Yp6-Ow for pgsql-hackers@lists.postgresql.org; Wed, 07 Aug 2024 15:08:08 +0000 Received: by mail-io1-xd36.google.com with SMTP id ca18e2360f4ac-81fd925287eso71679839f.3 for ; Wed, 07 Aug 2024 08:08:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723043286; x=1723648086; darn=lists.postgresql.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=GlbwmYBJwIcMl1AzWQOI44dZ1oLUE2KAJbVELfHz+9c=; b=QNkA+/kKvO/pW39/oPJcWM1jiCMoBD4k0GlqogQ+XH+0DzIjpN7ACEzV+W4vBCxqp1 cmpvynZBDnSIPdUonNqjnMXSpcUiXSzBv08Omj59GvLS+zUkgKX5Mb2EHoIwxbgYrgTF XxqmI4QX5osNKRAkgsQIMgS5JqTcTcAvRjmBdQ7gtYqou/odRZzClk16ACq0bZxePFv9 BsGDCquo7D38G+pA6dfnk1sR7vC8pC0OizfZ14RYgWLkDNBfUBUKTfoz6SKpo90seoxM FDllF2Pv4L7MEr3q/YMUA3/7AYG7SMAZAH1AZJSQeYj2LmzRVvN3YRnsEvZgKqeaJ/1L FrLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723043286; x=1723648086; h=in-reply-to: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=GlbwmYBJwIcMl1AzWQOI44dZ1oLUE2KAJbVELfHz+9c=; b=NnGjS6NgHOAOcr8VK3YW2kTGyDYQO6njszuMDy64GM0/tDEenfLS+3wfw8t6cgtnPm Zxeobl689C6tA6k5rFOgZ3geqUURQCvAUX5vTXgDOtPtE9BbHEcifTP+/CS1h32PmOAC JsFwpjkfXjBZRZFf92GNgwhWeRMZpjgO4EMYkRanVVBDcYlGw62TSXc+u5QMVKMORLCr YpaeqXEoc0VYyiYg80OtYLe8Ak1f1WIB3z4bX/ce+PoKLw/Wvxe3CSTJTvxHeAmoPyWo gSwap04fn4sZ1us1xiWuKdM/RqhwfAxNNXwgsZXrjfzy9t6EfZtAauk8rQ8us9rNCVkd sl5Q== X-Forwarded-Encrypted: i=1; AJvYcCVk6oL0PpisJe2s6NecRg6ycHJPLCXaUs2Mm7p7qE5iusXg7RIdMotp1aFwMZWWc1k3vESH2K0R2FMwbEC0OnfTUzyXBpaF9tvUf55Q1K5i5ZL1 X-Gm-Message-State: AOJu0YyvAfx1R4pLPJk+RTAE5/k7R8nyEAH0NU9Ib4crF4HRqAsj/rS4 seohCN68nR6zmWCSQ1NmhkoHvOejmg3pg3YrgIg7LLNu0eDLcAe3 X-Google-Smtp-Source: AGHT+IFVVTZ7HuZc1Tez/bWrMmjfWZ0tdfvf0WpBytd1ODPL7SWJejl/vFZqWPt0aPUaJjvMZxDchw== X-Received: by 2002:a05:6602:2c95:b0:805:3d47:19d6 with SMTP id ca18e2360f4ac-81fd435c5bfmr2637190739f.6.1723043286502; Wed, 07 Aug 2024 08:08:06 -0700 (PDT) Received: from nathan (162-195-168-172.lightspeed.stlsmo.sbcglobal.net. [162.195.168.172]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-81fd4d829aasm315383439f.46.2024.08.07.08.08.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Aug 2024 08:08:06 -0700 (PDT) Date: Wed, 7 Aug 2024 10:08:04 -0500 From: Nathan Bossart To: Matthew Kim Cc: Joseph Koshakow , jian he , Alexander Lakhin , 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=us-ascii Content-Disposition: inline In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk I started looking at 0001 again with the intent of committing it, and this caught my eye: - /* make the amount positive for digit-reconstruction loop */ - value = -value; + /* + * make the amount positive for digit-reconstruction loop, we can + * leave INT64_MIN unchanged + */ + pg_neg_s64_overflow(value, &value); The comment mentions that we can leave the minimum value unchanged, but it doesn't explain why. Can we explain why? +static inline bool +pg_neg_s64_overflow(int64 a, int64 *result) +{ + if (unlikely(a == PG_INT64_MIN)) + { + return true; + } + else + { + *result = -a; + return false; + } +} Can we add a comment that these routines do not set "result" when true is returned? -- nathan