https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61632
--- Comment #13 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> --- This: + fmt->format_string_len = strrchr (f->source, ')') - f->source + 1; Is taking the difference between two string pointers, ie memory addresses This: printf("pos 0 =%x, pos ) =%x\n",strchr (f->source, '\0'),strrchr (f->source, ')')); Is printing the value of the pointers, the addresses. Are you expecting something different?