Add counted_by attribute

From: "Tristan Partin" <tristan(at)partin(dot)io>
To: "pgsql-hackers" <pgsql-hackers(at)postgresql(dot)org>
Subject: Add counted_by attribute
Date: 2026-07-29 22:07:48
Message-ID: DKBEBF32QLUA.3L2DJRPUYNKHZ@partin.io
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

The counted_by[0] compiler attribute is fairly new. It was added in GCC
15 and Clang 18. It has been used fairly extensively in the Linux
kernel[0].

To summarize the benefits of the attribute:

- Runtime bounds checking with -DFORTIFY_SOURCE=3 and -fsanitize-bounds
- Accurate reporting of __builtin_dynamic_object_size()

While we don't use __builtin_dynamic_object_size(), I think the runtime
bounds checking improvements are easily worth the little bit of effort
to add the attribute in various locations and review the code. I think
it will improve things for buildfarm animals using ASan due to expanded
coverage.

Adding this attribute to the codebase was previously proposed back in
2024[1], but the thread never got any traction. I figured that I would
try again, but bring some patches this time. I figured that I would
start small, and then after people agree that it has value, I can look
into adding the attribute in many more places.

[0]: https://gcc.gnu.org/onlinedocs/gcc/Common-Attributes.html#index-counted_005fby
[1]: https://people.kernel.org/gustavoars/how-to-use-the-new-counted_by-attribute-in-c-and-linux
[2]: https://www.postgresql.org/message-id/ME3P282MB3166210CDE36BD485B703BF6B6C82@ME3P282MB3166.AUSP282.PROD.OUTLOOK.COM

--
Tristan Partin
PostgreSQL Contributors Team
AWS (https://aws.amazon.com)

Attachment Content-Type Size
v1-0001-Add-pg_attribute_counted_by.patch text/x-patch 1.6 KB
v1-0002-Make-use-of-counted_by-attribute.patch text/x-patch 1.7 KB

Browse pgsql-hackers by date

  From Date Subject
Next Message Peter Smith 2026-07-29 22:36:38 Re: sequencesync worker race with REFRESH SEQUENCES
Previous Message Jeff Davis 2026-07-29 21:30:33 Re: CREATE SUBSCRIPTION ... SERVER vs. pg_dump, etc.