On 09/05/2013 05:53 PM, Steven Bosscher wrote:
On Thu, Sep 5, 2013 at 5:47 PM, Andrew MacLeod <amacl...@redhat.com> wrote:
ok, so to dwell on header file cleanup.   When creating new header files for
say, tree-ssa-ter.h,  what other include files should we make assumptions
have already been included... or should we make none?
For instance, the header files tree-ssa-ter.h would require system.h,
bitmap.h, tree-ssa-live.h, and gimple.h (soon to be gimple-core.h I hope :-)
to parse the prototypes
Why bitmap.h? bitmap is in coretypes.h.

well, only because a function prototype used the bitmap type... I suppose you could include coretypes.h, but then you get even more stuff included. I was making the list the "minimal" required to compile the header file.

Or are you suggesting that coretypes.h is a file we can assume is available? that seems like a bit of a slippery slope, but we could pick a few. I prefer it be explicit myself.

As you may have noticed, I tried trimming the #include lists in many
.c files last year. It's a hard but worthwhile job: You find some
headers have to be included before others, or some headers are used by
some .c file but they don't #include it. Instead they receive it
through an #include in some .h file but nothing defined directly, i.e.
not via #include, is used in the .c file.


thats just an example, I don't think we need a tree-ssa-ter.h. There are
only  3 exported functions. 2 are used exclusively in tree-outof-ssa.c and
one is used in expr.c  (a reuse of the is_replaceable_p function.)
The 2 that are exclusive to tree-out-ssa.c could simple have the prototypes
in tree-outof-ssa.c,   That seems like the best thing to do for single
client's?
Not really. It's a single client now, but if it's an exported
interface of some kind, then why should its use stay limited to a
single client?

Either some function is exported and therefore should have a prototype
in a .h file, or something is local to a file and no prototype is
necessary (in most cases anyway).

Its exported only because the original file was split for modularity reasons., otherwise tree-outof-ssa.c would be much larger. If we had such a think as a "module clump", it would only be visible inside that clump.

If we go down the path of "its external so it it should be in a header file", then we will probably need to have pass-xyz.h header files.. ie, I would be creating a tree-ssa-ter.h file to put 2 externals in that are only used by tree-outof-ssa.c. a small sortof useless header file we don't actually need. it is cleaner than in putting it in tree-flow.h of course :-)



The other function could be moved from tree-ssa-ter.c to expr.c, and the
prototype exported in expr.h and used in tree-ssa-ter.c
Makes sense.


IIf I were to create a tree-ssa-ter.h file, then Id just leave the prototype in tree-ssa-ter.h :-)

So fundamentally, we need to make a decision on how we want to handle these. Richard seemed to prefer not having pass-xyz.h files if possible, and that means in my tree-outrof-ssa case, the single external consumer can just keep the prototype local. If there is more than one consumer, it should be in a header.

Or we ban that practice and make a .h file for any .c file which exports something.... and try to enforce a rule that prototypes required by a .c file comes from an appropriate header file associated with the originating source file... so no local prototypes for external functions.

Andrew

Reply via email to