On Friday, 15 June 2007 at 17:02, Kyle Wheeler wrote: > On Friday, June 15 at 02:59 PM, quoth Brendan Cully: >> On Friday, 15 June 2007 at 22:08, Vladim'ir Marek wrote: >>>>> Hi, I found bug in SS11 which is triggered by mutt source. It makes >>>>> function crc_matches return false even if the crc is correct. This >>>>> virtually disables header cache. >>>>> unsigned int mycrc = 0; to static unsigned int mycrc = 0; >>> [...] >>>> Wow, that's voodoo. I don't see any harm in making the change though. >>> Making the variable static makes compiler to store the value to physical >>> memory and not just to register. I can confirm that on SS12 the problem >> >> you'd think &mycrc would have the same effect :) > > It *should*, but I guess that's the very definition of a bug, eh? :) > >>> no longer exists. But at the same time, SS11 may not be fixed, since it is >>> not priority anymore ... >> >> I'll probably apply it. I'm just giving it time to see if any other C gurus >> comment. > > Well... there's the obvious comment, which is that if you're relying on > mycrc being initialized to zero in the function, making it static will break > that, so you'd need to add a separate mycrc=0; line in after it is declared, > because the existing initialization won't take care of that. No, restore_int always clobbers the variable. The zeroing just looks like paranoia. > The other problem with making it static is that it prevents the compiler > from doing certain kinds of optimization. That's not a performance-critical > function, but... I'd be somewhat uncomfortable with adding goofy-looking > code to work around compiler bugs---especially when the bug has been fixed > in the current version of the compiler. I mean, we aren't still working > around gcc 1.0 bugs, why work around SS11 bugs? If anything, put it in an > #ifdef, such as: Yeah, fair enough. I'll put it in if someone can tell me the right guard macro.
Attachment:
pgp4ntuUQmzS9.pgp
Description: PGP signature