Hi Bruno, On 4/28/24 3:11 AM, Bruno Haible wrote: >> Can I apply the attached patch which adds the 'static' specifier to >> global variables in unit tests? > > No! While adding 'static' would be no harm in some tests (such as > tests/jit/test-cache.c, tests/test-argp-version-etc.c, tests/test-argp.c), > in other tests the purpose of the global variables is to defeat compiler > optimizations. > Maybe in 10 years, everything will be compiled with '-flto' and thus > compiler optimizations on global variables will be the same as on 'static' > variables. But we're not there yet, and thus it helps us avoid compiler > optimizations that would make the unit test a no-op.
I see. It looks like I didn't spend enough time reading GCC's optimization documentation or I would have known it was a silly idea... > (You just discovered how tedious it is to investigate a compiler's > behaviour that causes a test failure. A compiler optimization that turns > a unit test into a no-op is even worse: You then notice, by chance, that > the unit test has not been effective for two years or so...) Yes, that doesn't sound very fun. I have a feeling you have had that happen before? > Recall that [1] > Many GCC warning options usually don’t point to mistakes in the code; > these warnings enforce a certain programming style. Yes, good point. So I guess here the warning wants you to be explicit about the visibility of the symbol. I think ISO C uses the terms internal/external linkage. > Yup, this is a programming style. > - Other developers do it differently. > - In many test cases, this programming style invites the compiler > to cause trouble. > > Therefore it's not the programming style that we use in the tests. Makes sense. Thanks for the explanations. I will listen to the Makefile and *ignore* them now, or disable them if they start annoying me. :) Collin