warn_unused_results
Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
From: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
To: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2020-10-17T06:57:51Z
Lists: pgsql-hackers
Attachments
- 0001-Add-pg_nodiscard-function-declaration-specifier.patch (text/plain) patch 0001
- 0002-Add-pg_nodiscard-decorations-to-some-functions.patch (text/plain) patch 0002
- 0003-Silence-some-pg_nodiscard-warnings.patch (text/plain) patch 0003
Forgetting to assign the return value of list APIs such as lappend() is a perennial favorite. The compiler can help point out such mistakes. GCC has an attribute warn_unused_results. Also C++ has standardized this under the name "nodiscard", and C has a proposal to do the same [0]. In my patch I call the symbol pg_nodiscard, so that perhaps in a distant future one only has to do s/pg_nodiscard/nodiscard/ or something similar. Also, the name is short enough that it doesn't mess up the formatting of function declarations too much. I have added pg_nodiscard decorations to all the list functions where I found it sensible, as well as repalloc() for good measure, since realloc() is usually mentioned as an example where this function attribute is useful. I have found two places in the existing code where this creates warnings. Both places are correct as is, but make assumptions about the internals of the list APIs and it seemed better just to fix the warning than to write a treatise about why it's correct as is. [0]: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2051.pdf -- Peter Eisentraut http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Commits
-
Add pg_nodiscard decorations to some functions
- a378ba49a5cf 14.0 landed
-
Add pg_nodiscard function declaration specifier
- c617aea6acdd 14.0 landed
-
Fix cases of discarding result from list API functions
- c77f6f50e418 14.0 landed