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