On 10/06/2015 10:56 AM, Bernd Schmidt wrote:
On 10/06/2015 04:04 PM, Andrew MacLeod wrote:

I primarily submitted it early because you wanted to look at the tools
before the code patch, which is the one I care about since the longer it
goes, the more effort it is to update the patch to mainline.

The problem is that the generated patch is impossible to review on its own. It's just a half a megabyte dump of changes that can't realistically be verified for correctness. Reading it can throw up some interesting questions which can then (hopefully) be answered by reference to the tools, such as "why does timevar.h move?" For that to work, the tools need at least to have a minimum level of readability. They are the important part here, not the generated patch. (Unless you find a reviewer who's less risk-averse than me and is willing to approve the whole set and hope for the best.)

I dont get your fear. I could have created that patch by hand, it would just take a long time, and would likely be less complete, but just as large.

I'm not changing functionality. ALL the tool is doing is removing header files which aren't needed to compile. It goes to great pains to make sure it doesn't remove a silent dependency that conditional compilation might introduce. Other than that, the sanity check is that everything compiles on every target and regression tests show nothing. Since we're doing this with just include files, and not changing functionality, Im not sure what your primary concern is? You are unlikely to ever be able to read the patch and decide for yourself whether removing expr.h from the header list is correct or not. Much like if I proposed the same thing by hand.

Yes, I added the other tool in which reorders the headers and removes duplicates, and perhaps that is what is causing you the angst. The canonical ordering was developed by taking current practice and adding in other core files which had ordering issues that showed up during the reduction process. Reorderiing all files to this order should actually resolve more issues than it causes. I can generate and provide that as a patch if you want to look at it separately... I dont know what that buys you. you could match the includes to the master list to make sure the tool did its job by itself I guess.

The tools are unlikely to ever be used again... Jeff suggested I provide them to contrib just in case someone decided to do something with them someday, they wouldn't be lost,or at least they wouldn't have to track me down to get them.

IF we discover that one or more of the tools does continue to have some life, well then maybe at that point its worth putting some time into refining it a bit better.


I suspect you'll have to regenerate the includes patch anyway, because of the missing #undef tracking I mentioned.

I dont see that #undef is relevant at all. All the conditional dependencies care about is "MAY DEFINE" Its conservative in that if something could be defined, we'll assume it is and not remove any file which may depend on it. to undefine something in a MAY DEFINE world doesnt mean anything.




Let's consider the timevar.h example a bit more. Does the include have to move? I don't see anything in that file that looks like a dependency, and include files that need it are already including it. Is the fact that df.h includes it in any way material for generating an order of headers? IMO, no, it's an unnecessary change indicating a bug in the script, and any kind of unnecessary change in a patch like this makes it so much harder to verify. I think the canonical order that's produced should probably ignore files included from other headers so that these are left alone in their original order.

I covered this in the last note. Pretty much every file is going to have a "core" of up to 95 files reordered into the canonical form, which taken as a snapshot of any given file, may look arbitrary but is in fact a specific subset of the canonical ordering. You cant only order some parts of it because there are subtle dependencies between the files which force you to look at them all. Trust me, I didnt start by reordering all of them this way... it developed over time.


I'd still like more explanations of special cases in the tools like the diagnostic.h area as well as
    # seed tm.h with options.h since its a build file and won't be seen.
and I think we need to understand what makes them special in a way that makes the rest of the algorithm not handle them correctly (so that we don't overlook any other such cases).

See the other note, its because of the front end files/diagnostic dependencies or irreconcilable cycles because of what a header includes. Any other case would have shown up the way those did during development.

Andrew

Reply via email to