https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92938
--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to jcmvbkbc from comment #5) > (In reply to Andrew Pinski from comment #3) > > I DON'T think it is a GCC issue. The code is broken. > > Even if I remove all attributes from this function I see this issue: > > static void bitmap_replace(unsigned long *dst, > const unsigned long *old, > const unsigned long *new, > const unsigned long *mask, > unsigned int nbits) > { > if ((__builtin_constant_p(nbits) && (nbits) <= 32 && (nbits) > 0)) > *dst = (*old & ~(*mask)) | (*new & *mask); > else > __bitmap_replace(dst, old, new, mask, nbits); > } > > Why is it broken? What do you expect? That it is either inlined or a call to __bitmap_replace is emitted (with presumably is in .init* sections?)?