http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57133
--- Comment #1 from Mikael Pettersson <mikpe at it dot uu.se> 2013-05-01 11:37:56 UTC --- (In reply to comment #0) > typedef char *type; > > void f(const type t) > { This doesn't do what you think it does. t is now a const variable of type char*, not a variable of type const char*. Observe: > cat pr57133.c typedef char *type; void f(const type t) { t = 0; } void g(const type t) { *t = 0; } > gcc -Wall -S pr57133.c pr57133.c: In function 'f': pr57133.c:2:1: error: assignment of read-only parameter 't' The warning in your main() is correct.