http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56391
Bug #: 56391 Summary: variable set but unused isn't reported. if it has been used prior to setting it to a new value. Classification: Unclassified Product: gcc Version: 4.6.3 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassig...@gcc.gnu.org ReportedBy: beg...@gmail.com #include <stdio.h> #include <stdlib.h> void release(void*); void release(void *ptr) { free(ptr); ptr = NULL; } int main(void) { int *a; a = malloc(sizeof(int)); if(a == NULL){ perror("malloc"); return 1; } *a = 42; printf("*a == %d\n", *a); release(a); if(a) printf("*a == %d\n", *a); return 0; } ------------------------------- Compiling this with "gcc -Wall -Wextra" doesn't report anything (should be varible set but unused at line 10). This is clearly isn't what the programmer intended and is easy to catch. Just reset the unused flag after setting the variable. This is also the case with g++.