Subject: Compiler shares storage for assoc-lists even if some of them are mutated

From: Panicz Maciej Godek <[email-masked]>
Date: Sat, 20 Dec 2014 00:53:11 +0100

This bug was traced by Matt Wette and described here:

http://lists.gnu.org/archive/html/guile-user/2014-12/msg00023.html

In short, the bug manifests itself when at least two consecutive let forms
are used with an assoc list argument which starts with identical elements,
and the first appearance gets mutated before the second:

(begin
  (let ((l '((a . X)(b . Y)(c . 7))))
    (assoc-set! l 'b 'Z))
  (let ((l '((a . X)(b . Y))))
    l))
===> ((a . X) (b . Z))

The issue is known to appear in guile 2.0.11 and 2.0.5