On 12/10/2004, at 8:42 PM, Gabriel Dos Reis wrote: > The code in build_string > > memset (s, 0, sizeof (struct tree_common)); > TREE_SET_CODE (s, STRING_CST); > TREE_STRING_LENGTH (s) = len; > memcpy ((char *) TREE_STRING_POINTER (s), str, len); > ((char *) TREE_STRING_POINTER (s))[len] = '\0'; > > is trying to do similar thing, but it is undefined behaviour. > > [#5] If an attempt is made to modify an object defined with > a const-qualified type through use of an lvalue with non- > const-qualified type, the behavior is undefined. The object here is '*s', which was not defined with a const-qualified type. It's not defined with any type at all, it was allocated through malloc which is not a typed interface. (It would be different if it was allocated through 'new', but we do not have new in C.)