On Tue, 3 Dec 2024, Pali Rohár wrote:

It is not visible in the diff, but the functions starts with

 int
 __mingw_init_ehandler (void)
 {
   static int was_here = 0;
   size_t e = 0;
   PIMAGE_SECTION_HEADER pSec;
   PBYTE _ImageBase = _GetPEImageBase ();

   if (was_here || !_ImageBase)
     return was_here;
   was_here = 1;
   ...

which prevents multiple calls. So I think that it should have the same
behavior.

Ah, right, that's good.

(And even without the {} added here,
IIRC static variables are guaranteed to be zero initialized - they aren't
uninitialized like local variables.)

Yes, that is truth, this change is not needed. I wanted to make it
visible that they are zero initialized. Feel free to drop this part of
the change.

I already pushed it, but then Liu Hao pointed out that initializing with = {} without any elements inside of it, is only valid in C23, while older C versions don't strictly allow it (it would have to be { 0 } or something like that). So I'm considering pushing a change to remove that bit.

The behavior is different only for global variables, they are affected
by gcc -fcommon/-fno-common options. So for global variables it is a
good idea to always initialize them explicitly.

Hmm - even if they're common, they would still be zero initialized, no? Doesn't common/no-common only affect whether duplicates are ok or not?

// Martin

_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to