GNU bug report logs -
#31688
26.1.50; Byte compiler confuses two string variables
Previous Next
Reported by: Gemini Lasswell <gazally <at> runbox.com>
Date: Sat, 2 Jun 2018 17:53:01 UTC
Severity: normal
Tags: notabug
Found in version 26.1.50
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
Message #14 received at 31688 <at> debbugs.gnu.org (full text, mbox):
> I don't think this is a bug, the compiler coalesces equal string
> literals. `put-text-property' modifies the string destructively, so you
> shouldn't use it on literals, for the same reason you shouldn't use
> destructive operations on quoted list literals. Another example, not
> dependent on compilation:
>
> (defun foo (prop val)
> (let ((s "xyz"))
> (put-text-property 0 3 prop val s)
> s))
>
> (foo 'x 1) ;=> #("xyz" 0 3 (x 1))
> (foo 'y 2) ;=> #("xyz" 0 3 (x 1 y 2))
Yes. See also this, about Common Lisp:
https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node74.html
A snippet of it:
An additional problem with eq is that the implementation
is permitted to ``collapse'' constants (or portions thereof)
appearing in code to be compiled if they are equal. An object
is considered to be a constant in code to be compiled if it
is a self-evaluating form or is contained in a quote form.
This is why (eq "Foo" "Foo") might be true or false; in
interpreted code it would normally be false, because reading
in the form (eq "Foo" "Foo") would construct distinct strings
for the two arguments to eq, but the compiler might choose to
use the same identical string or two distinct copies as the
two arguments in the call to eq.
This bug report was last modified 7 years and 67 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.