On 11/22/06, Mike Stump <[EMAIL PROTECTED]> wrote:
ensure if doesn't fall over, if you structure it that way, however,
if instead you just warn:
[snip code using warnings]
or even maybe just a note, it'll make it just a bit safer in the
short term.  People can then watch for these messages and report
them.  I've been known to do this type of code before and the warning
definitely was nicer as the complex cases came in after release in my
case.

I like the idea of making it a warning. To get the warning, of course,
we need to slow down compilation significantly to do the checking,
hence ENABLE_CHECKING. Now, one thing we need to keep in mind here is
that the failure mode is pretty bad when the canonical types are
wrong. I am concerned that, no matter how much code we cram through
with this checking enabled, we're going to miss some cases. Most
likely, we'll end up rejecting valid code that used to work; when
we're unlucky, we'll miscompile code that used to work. Ugh.

So, here's a variant that might just work: add a flag variable
flag_check_canonical_types.  When it's true, we do the complete
structural checking, verify it against the canonical types result, and
warn if they differ. (This is what we do now when
VERIFY_CANONICAL_TYPES is defined).

When it's false, we just use canonical types for fast comparison of types.

So, we pay for one extra branch in comptypes, but when we miscompile
the user's code we can tell them to add "-fcheck-canonical-types" to
their command line and report the resulting warnings. Their code will
now compile correctly (albeit with warnings, since we're using
structural type comparison), and the warnings will tell us what we
need to fix for the next version.

For the hook into --enable-checking, we use:

 int flag_check_canonical_types =
 #ifdef ENABLE_CHECKING
   1
 #else
   0
 #endif
 ;

Other than that, this looks like a nice step in the right direction,
thanks.

Thanks!

 Cheers,
 Doug

Reply via email to