Hello Does GCC have a clear way to avoid memset being compiled out by optimiser? This article came up, so I combined the broken.c with GCC gcc -Wall -O2 -o broken broken.c Note, I've been using gcc for many years, I'm not looking for just tips how to compile code. I only want to discuss this optimiser issue :-) https://blog.cloudflare.com/the-linux-kernel-key-retention-service-and-why-you-should-use-it-in-your-next-application/ If I modify to clear the buffer, it gets removed by the compiler The only way I could get it to not remove the memset is by adding another printf, (propagating a return code after checking memset wasn't enough) // gcc -Wall -O2 -o broken broken.c #include <stdio.h> #include <stdint.h> #include <string.h> static int encrypt(void) { uint8_t key[] = "hunter2"; printf("encrypting with super secret key: %s\n", key); void * addr = memset(key, 0, 8); //printf("encrypting with super secret key: %s\n", key); if(addr) return 1; else return 0; } static void log_completion(void) { /* oh no, we forgot to init the msg */ char msg[8]; printf("not important, just fyi: %s\n", msg); } int main(void) { int ret = encrypt(); printf("ret:%d\n", ret); /* notify that we're done */ log_completion(); return ret; } Jonny