> >>>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. Correct, although it does not matter in this case, as mycrc is filled by restore_int. > 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... Unmeasurable. > 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? Agreed. SS12 is out one month, thought ... > If anything, put it in > an #ifdef, such as: > > #ifdef __SUN11__ /* or whatever signifies that compiler */ > static int mycrc; > mycrc = 0; > #else > int mycrc = 0; > #endif Why not, if you believe that it's worth of six lines instead of one. Anything which will potentially stop others seeing the issue. I can't force the C team so I'm trying my luck here :) I'll forge the correct version and post it here. Thanks for the comments -- Vlad