On Wednesday 04 December 2024 00:02:11 Martin Storsjö wrote:
> 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.

Seems that this is truth. So it would be better to remove the {} part.

> > 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

Yes, it is only about duplicated definitions. But for me it sounds
dangerous to use this feature by default.


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

Reply via email to