Hi Bastien, > diff --git a/lib/explicit_bzero.c b/lib/explicit_bzero.c > index 21bbd67e8..59215852c 100644 > --- a/lib/explicit_bzero.c > +++ b/lib/explicit_bzero.c > @@ -43,6 +43,10 @@ > # undef explicit_bzero > #endif > > +#if !defined __GNUC__ > +static void * (* const volatile volatile_memset)(void *, int, size_t) = > memset; > +#endif > + > /* Set LEN bytes of S to 0. The compiler will not delete a call to > this function, even if S is dead after the call. */ > void > @@ -54,17 +58,17 @@ explicit_bzero (void *s, size_t len) > (void) memset_s(s,len,'\0',len); > #elif HAVE_SECUREZEROMEMORY > (void) SecureZeroMemory(s,len); > -#else > - memset (s, '\0', len); > -#if defined __GNUC__ > +#elif defined __GNUC__ > + (void) memset (s, '\0', len); > # if !defined __clang__ > /* Compiler barrier. */ > - asm volatile ("" ::: "memory"); > + asm volatile ("" ::: "memory"); > # else > /* https://bugs.llvm.org/show_bug.cgi?id=15495#c11 */ > __asm__ volatile("" : : "g"(s) : "memory"); > # endif > +#else > + (void) volatile_memset(s,'\0',len); > #endif > - > #endif > }
Nice trick. But does it need to be a static variable? A local variable should work the same way (like in [1]) and requires less #ifs. Bruno [1] https://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=commitdiff;h=bdf8b1d2b74e12648edafffcda43832bc35e3d1f