https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70690

--- Comment #3 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #2)
> I think the new GCC is correct here and the old one accidentally just got it
> "right".
> We have:
> CentralFreeListPadded Static::central_cache_[kNumClasses];
> 
> 
> Which is of type:
> class CentralFreeListPadded : public CentralFreeListPaddedTo<
>   sizeof(CentralFreeList) % 64>
> 
> CentralFreeListPaddedTo  is defined as either:
> class CentralFreeListPaddedTo : public CentralFreeList
> 
> or
> class CentralFreeListPaddedTo<0> : public CentralFreeList
> 
> CentralFreeList has the following constructor:
>   CentralFreeList() : lock_(base::LINKER_INITIALIZED) { }
> 
> 
> So it just happened that LINKER_INITIALIZED was also zero:
> namespace base {
> enum LinkerInitialized { LINKER_INITIALIZED };
> }
> 
> 
> So this is a bug in tcmalloc as far as I can tell.
> 
> Before the call to the constructor was not done but after it is done.

Could you come up with a small testcase?

Reply via email to