Greg McGary <lcc.gm@UCLA-LOCUS.ARPA> (01/12/85)
I was recently bitten by a bug that caused me more trouble than it should have. By doing a careful audit on the usage of certain flags and flag words, I discovered that a flag test was and-ing the correct flag with the wrong flag-word. Determined to stamp out all bugs of this nature, I need an automated method of detecting such inconsistencies. I have a couple of ideas: 1) Use a C language `enum' type to define the flag values, then declare the flag word to be of that type so that the compiler and/or lint can detect type clashes. The problem with this approach is that I have no control over the size of an `enum' variable or structure member. The C Reference Manual says that `enum' variables have the same size as `int'. I consider it evil to use `int' in structures-- one should use `char', `short', or `long' since their size is quite a bit less fuzzy. 2) Build a shell program using grep to audit the uses of a given flag or flag-word. The disadvantage here is that it is difficult to lexically isolate expressions and thereby identify a flag/flag-word pair. 3) Build a syntax directed source analyzer to detect expressions and audit flag/flag-word usage. The disadvantages here are economic. It's just too damn much work to build such a special purpose beast. Especially when you consider that cpp manifest constants must remain un-expanded for the thing to work at all. Has anyone out there thought about this problem, and hopefully built a tool to check for this type of error?? Please reply by mail. I'll summarize later. Thanx, Greg McGary Locus Computing Corp. lcc!gm@ucla-cs {ihnpr,randvax,sdcrdcf,ucbvax}!ucla-cs!lcc!gm {trwspp,ucivax}!ucla-va!ucla-cs!lcc!gm trwb!lcc!gm