Re: const correctness
Thomas Munro <munro@ip9.org>
From: Thomas Munro <munro@ip9.org>
To: Kevin Grittner <Kevin.Grittner@wicourts.gov>
Cc: Robert Haas <robertmhaas@gmail.com>, pgsql-hackers@postgresql.org, Tom Lane <tgl@sss.pgh.pa.us>
Date: 2011-11-09T21:15:43Z
Lists: pgsql-hackers
Attachments
- constify-2.patch (text/x-patch) patch
On 9 November 2011 19:35, Kevin Grittner <Kevin.Grittner@wicourts.gov> wrote: > Robert Haas <robertmhaas@gmail.com> wrote: >> So that's already duplicating list_head, foreach, and forboth. > > OK, I failed to pick up on that properly. With that stripped out, > you get the attached patch, which does nothing but add "const" to > 661 lines. It still applies cleanly, builds with no warnings, and > passes regression tests. > > It is a bit disappointing that without creating two flavors of the > list_head function and the foreach and forboth macros, there are a > number of functions which aren't intended to modify their inputs > which can't be declared with const parameters; but unless there is > some demonstrable performance benefit from those changes, I agree > that the argument for having the two flavors is thin. There is another option: if list_head is changed to take a pointer to const List and return a pointer to non-const ListCell (something I was trying to avoid before), then no XXX_const functions/macros are necessary, and all of the functions from the first patch can keep their 'const', adding const to 930 lines. I've attached a new patch, which simply adds the keyword 'const' in lots of places, no new functions etc. This version generates no warnings under -Wcast-qual (now that I've read Peter E's thread and been inspired to fix up some places that previously cast away const) for all code under backend/nodes. To achieve that I had to stray outside backend/nodes and change get_leftop and get_rightop (from clauses.h).