You are right, in that case the string may be in read-only memory and
(I think) shared with other strings.
In C89, literal strings need not be distinct, and need not be writable.
But in C89, I cannot find any indication of the scope or lifetime
of a string literal, so I do not think it is correct to say that
the compiler is necessarily "assigning a pointer into a static string pool".
There must be -something- about the lifetime, as it is well understood
that pointers to literals may be returned and may be stored and passed
around. The common usages are such that string literals must have
a lifetime "as if" equivilent to that of static variables, but if the
compiler can determine that a particular literal's address is not
being squirreled away, I see no documented limitation that would
prevent the compiler from effectively making the string literal local
to a routine -- possibly even coding the contents right into
the instruction space. I have these flashbacks to disassembling
in my Z80 days...