Re: Significant oversight in that #include-removal script - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: Significant oversight in that #include-removal script
Date
Msg-id 200901072131.n07LVOL19963@momjian.us
Whole thread Raw
In response to Significant oversight in that #include-removal script  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Significant oversight in that #include-removal script  (Alvaro Herrera <alvherre@commandprompt.com>)
List pgsql-hackers
Tom Lane wrote:
> I just noticed that optimizer/cost.h is not #include'd by plancat.c,
> which is not too cool because the former has the extern declaration
> for the constraint_exclusion global variable while the latter has
> the actual definition.  I didn't run it down in the CVS history to
> make sure, but I imagine what happened is that your unnecessary-includes
> script diked it out because the file still compiled warning-free without
> that header, ie, there is no warning for "int foo;" not preceded by
> "extern int foo;".  This isn't real good because it would allow a global
> variable to get out of sync with its declaration.  Is there a way to
> prevent such problems in future?

The script certainly has no way to know it is missing an extern, and I
am not sure how I would even teach it that trick.

The example you saw was:
 src/include/optimizer/cost.h:55:extern bool constraint_exclusion; src/backend/optimizer/util/plancat.c:46:bool
constraint_exclusion= false;
 

The only clean way I can think of to fix this would be to have all the
globals in a single C file that is included as part of postgres.h. 


--  Bruce Momjian  <bruce@momjian.us>        http://momjian.us EnterpriseDB
http://enterprisedb.com
 + If your life is a hard drive, Christ can be your backup. +


pgsql-hackers by date:

Previous
From: Magnus Hagander
Date:
Subject: Re: [BUGS] BUG #4186: set lc_messages does not work
Next
From: Dimitri Fontaine
Date:
Subject: Re: Do we still need constraint_exclusion?